博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
2019-05-25 Java学习日记之List集合
阅读量:7085 次
发布时间:2019-06-28

本文共 11650 字,大约阅读时间需要 38 分钟。

去除ArrayList中重复字符串元素方式:

需求:ArrayList去除集合中字符串的重复值(字符串的内容相同)

import java.util.ArrayList;import java.util.Iterator;@SuppressWarnings({ "unchecked", "rawtypes" })public class Demo1 {public static void main(String[] args) {        ArrayList list = new ArrayList();        list.add("a");        list.add("a");        list.add("b");        list.add("d");        list.add("b");        list.add("c");        list.add("e");                ArrayList newList = getSingle(list);        System.out.println(newList);    }    /**     * 创建新集合将重复元素去掉     * 1、明确返回值类型,返回ArrayList     * 2、明确参数列表ArrayList     *      * 分析:     * 1、创建新集合     * 2、根据传入的集合(老集合)获取迭代器     * 3、遍历老集合     * 4、通过新集合判断是否包含老集合中的元素,如果包含就不添加,如果不包含就添加     */    public static ArrayList getSingle(ArrayList list) {        ArrayList newList = new ArrayList();    // 1、创建新集合        Iterator it = list.iterator();            //2、根据传入的集合(老集合)获取迭代器                while (it.hasNext()) {                    //3、遍历老集合            Object obj = it.next();                //记录住每一个元素            if (!newList.contains(obj)) {                        newList.add(obj);            }        }        return newList;    }}

 

去除ArrayList中重复自定义对象元素:

需求:ArrayList去除自定义对象元素的重复值(对象的成员变量值相同)

注意事项:重写equals()方法

package com.list;import java.util.ArrayList;import java.util.Iterator;import com.bean.Person;@SuppressWarnings({ "unchecked", "rawtypes" })public class Demo2 {    /**     * contains方法判断是否包含,底层依赖的是equals方法     * remove方法判断是否删除,底层依赖的是equals方法     *     */    public static void main(String[] args) {        ArrayList list = new ArrayList();        //创建集合对象        list.add(new Person("张三",23));        list.add(new Person("李四",23));        list.add(new Person("张三",23));        list.add(new Person("张三",23));        list.add(new Person("李四",23));        list.add(new Person("张三",23));        //        ArrayList newList = getSingle(list);    //调用方法去除重复//        System.out.println(newList);        list.remove(new Person("张三",23));        System.out.println(list);            }    /**     * 创建新集合将重复元素去掉     * 1、明确返回值类型,返回ArrayList     * 2、明确参数列表ArrayList     *      * 分析:     * 1、创建新集合     * 2、根据传入的集合(老集合)获取迭代器     * 3、遍历老集合     * 4、通过新集合判断是否包含老集合中的元素,如果包含就不添加,如果不包含就添加     */    public static ArrayList getSingle(ArrayList list) {        ArrayList newList = new ArrayList();    // 1、创建新集合        Iterator it = list.iterator();            //2、根据传入的集合(老集合)获取迭代器                while (it.hasNext()) {                    //3、遍历老集合            Object obj = it.next();                //记录住每一个元素            if (!newList.contains(obj)) {                        newList.add(obj);            }        }        return newList;    }}

 

LinkedList的特有功能:

import java.util.LinkedList;public class Demo3 {    public static void main(String[] args) {        LinkedList list = new LinkedList();        list.addFirst("a");        list.addFirst("b");        list.addFirst("c");        list.addFirst("d");        list.addLast("e");        //        System.out.println(list.getFirst());//        System.out.println(list.getLast());//        System.out.println(list.removeFirst());//        System.out.println(list.removeLast());                System.out.println(list.get(1));        System.out.println(list);    }}

 

栈和队列数据结构:

栈:先进后出

队列:先进先出

用LinkedList模拟栈数据结构的集合并测试:

需求:用LinkedList模拟栈数据结构的集合,并测试

创建一个类将LinkedList中的方法封装

package com.list;import java.util.LinkedList;public class Demo4 {    public static void main(String[] args) {         //demo1();        Stack s = new Stack();         s.in("a");                //进栈         s.in("b");         s.in("c");         s.in("d");                  while (!s.isEmpty()) {            System.out.println(s.out());        }    }    public static void demo1() {    //判断栈结构是否为空        LinkedList list = new LinkedList();         list.addLast("a");         list.addLast("b");         list.addLast("c");         list.addLast("d");                  while (!list.isEmpty()) {            System.out.println(list.removeLast());        }    }}

 

Stack.java

package com.list;import java.util.LinkedList;public class Stack {    private LinkedList list = new LinkedList();    /**     * 模拟进栈方法     */    public void in(Object obj) {        list.addLast(obj);    }    /**     * 模拟出栈     */    public Object out(){        return list.removeLast();    }    /**     * 模拟栈结构是否为空     */    public boolean isEmpty() {        return list.isEmpty();    }}

 

泛型概述和基本使用:

A:泛型的好处

提高安全性(将运行期的错误转换到编译期)

省去强转的麻烦

B:泛型的基本使用

<>中放的必须是引用数据类型

C:泛型使用的注意事项

前后的泛型必须一致,或者后面的泛型可以省略不写(1.7的新特性菱形泛型)

package com.generic;import java.util.ArrayList;import java.util.Iterator;import com.bean.Person;public class Demo1 {    public static void main(String[] args) {//        demo1();        //int[] arr = new byte[5];                                //数组要保证前后的数据类型一样        //ArrayList list = new ArrayList
(); //集合的泛型要保证前后的数据类型一致 //ArrayList
list = new ArrayList<>(); //1.7版本的新特性,菱形泛型 ArrayList list = new ArrayList<>(); //泛型最好不要定义成Object,没有意义 list.add("aaa"); list.add(true); } public static void demo1() { ArrayList
list = new ArrayList
(); list.add(new Person("张三",23)); list.add(new Person("李四",24)); Iterator
it = list.iterator(); while (it.hasNext()) {// System.out.println(it.next().getName() + "..." + it.next().getAge());//next方法只能调用一次,如果调用多次会将指针向后移动多次 Person p = it.next(); System.out.println(p.getName() + "..." +p.getAge()); } }}

 

ArrayList存储字符串和自定义对象并遍历泛型版:

package com.generic;import java.util.ArrayList;import java.util.Iterator;import com.bean.Person;public class Demo2 {    public static void main(String[] args) {//        demo1();        ArrayList
list = new ArrayList<>(); list.add(new Person("张三", 23)); list.add(new Person("李四", 24)); list.add(new Person("王五", 25)); list.add(new Person("赵六", 26)); Iterator
it = list.iterator(); while (it.hasNext()) { Person p = it.next(); //将集合中的每一个元素用Person记录 System.out.println(p.getName() + "..." +p.getAge()); } } public static void demo1() { ArrayList
list = new ArrayList<>(); //创建集合对象 list.add("a"); list.add("b"); list.add("c"); list.add("d"); Iterator
it = list.iterator(); while (it.hasNext()) { System.out.println(it.next()); } }}

 

增强for的概述和使用:

A:概述

简化数组和Collection集合的遍历

B:格式

for(元素数据类型 变量 :数组或者Collection集合) {

  使用变量即可,该变量就是元素

}

C:好处

简化遍历

package com.jdk5;import java.util.ArrayList;import com.bean.Person;public class Demo1 {    /**     * z增强for循环底层依赖的是迭代器(Iterator)     */    public static void main(String[] args) {//        demo1();        ArrayList
list = new ArrayList<>(); list.add(new Person("张三",23)); list.add(new Person("李四",24)); list.add(new Person("王五",25)); list.add(new Person("赵六",26)); for (Person person : list) { System.out.println(person); } } public static void demo1() { int[] arr = {11,22,33,44,55}; for(int i : arr){ System.out.println(i); } ArrayList
list = new ArrayList<>(); list.add("a"); list.add("b"); list.add("c"); list.add("d"); for (String string : list) { System.out.println(string); } }}

 

 

ArrayList存储字符串和自定义对象并遍历增强for版:

三种迭代的能否删除:

普通for循环,可以删除,但是索引要--

迭代器,可以删除,但是必须使用迭代器自身的remove方法,否则会出现并发修改异常

增强for循环不能删除

package com.jdk5;import java.util.ArrayList;import java.util.Iterator;public class Demo2 {    public static void main(String[] args) {        ArrayList
list = new ArrayList<>(); list.add("a"); list.add("b"); list.add("b"); list.add("c"); list.add("d"); //1、普通for循环删除,索引要-- /*for (int i = 0; i < list.size(); i++) { if ("b".equals(list.get(i))) { list.remove(i--); //通过索引删除元素 } }*/ //2、迭代器删除 /*Iterator
it = list.iterator(); while (it.hasNext()) { if ("b".equals(it.next())) { //list.remove("b"); //不能用集合的删除方法,因为迭代过程中如果集合修改会出现并发修改异常 it.remove(); } }*/ /*for(Iterator
it2 = list.iterator(); it2.hasNext();){ if ("b".equals(it2.next())) { //list.remove("b"); //不能用集合的删除方法,因为迭代过程中如果集合修改会出现并发修改异常 it2.remove(); } }*/ //3、增强for循环,不能删除,只能遍历 for (String string : list) { if ("b".equals(string)) { list.remove("b"); } } System.out.println(list); }}

 

可变参数的概述和使用:

A:概述

定义方法的时候不知道该定义多少个参数

B:格式

修饰符 返回值类型 方法名(数据类型... 变量名){}

C:注意事项

这里的变量其实是一个数组

如果一个方法有可变参数,并且有多个参数,那么,可变参数肯定是最后一个

package com.jdk5;public class Demo3 {    public static void main(String[] args) {        int[] arr = {11,22,33,44,55};//        print(arr);        print(11,22,33,44,55);//        print();    }    private static void print(int ... arr) {    //可变参数其实是一个数组        for (int i = 0; i < arr.length; i++) {            System.out.println(arr[i]);        }    }}

 

Arrays工具类的asList()方法的使用:

package com.jdk5;import java.util.ArrayList;import java.util.Arrays;import java.util.List;public class Demo4 {    /**     * 数组转换成集合     * 数组转换成集合虽然不能增加或减少元素,但是可以用集合的思想操控数组,     * 也就是说可以使用其他集合中的方法     */    public static void main(String[] args) {//        demo1();//        demo2();        //集合转数组,加泛型        ArrayList
list = new ArrayList<>(); list.add("a"); list.add("b"); list.add("c"); list.add("d"); String[] arr = list.toArray(new String[10]); //当集合转换数组时,数组长度如果是小于等于集合的size时,转换后的数组长度等于集合的size for (String string : arr) { //如果数组的长度大于了size,分配的数组长度就和你指定的长度一样 System.out.println(string); } } public static void demo2() { /*int[] arr = {11,22,33,44,55}; List list = Arrays.asList(arr); //基本数据类型的数组转换成集合,会将整个数组当作一个对象转换 System.out.println(list);*/ Integer[] arr = {11,22,33,44,55}; //将数组转换成集合,数组必须是引用数据类型 List
list = Arrays.asList(arr); System.out.println(list); } public static void demo1() { String[] arr = {"a","b","c"}; List
list = Arrays.asList(arr); //将数组转换成集合 //list.add("d"); //不能添加 System.out.println(list); }}

 

集合嵌套之ArrayList嵌套ArrayList:

 

package com.list;import java.util.ArrayList;import com.bean.Person;public class Demo5 {    public static void main(String[] args) {        ArrayList
> list = new ArrayList<>(); ArrayList
first = new ArrayList<>(); first.add(new Person("张三",23)); first.add(new Person("李四",24)); first.add(new Person("王五",25)); ArrayList
second = new ArrayList<>(); second.add(new Person("小三",13)); second.add(new Person("小四",14)); second.add(new Person("小五",15)); //将班级添加到学科集合中 list.add(first); list.add(second); //遍历学科集合 for(ArrayList
a : list){ for (Person p : a) { System.out.println(p); } } }}

 

转载于:https://www.cnblogs.com/clqbolg/p/10924957.html

你可能感兴趣的文章
简单的个人博客建站
查看>>
使用Newtonsoft.Json.dll(JSON.NET)动态解析JSON、.net 的json的序列化与反序列化(一)...
查看>>
POJ 3080 Blue Jeans、POJ 3461 Oulipo——KMP应用
查看>>
python3中input()方法报错traceback变量未定义的解决方法
查看>>
animation渐进实现点点点等待效果实例页面
查看>>
配置 ssh无密码登陆
查看>>
java读取和写入浏览器Cookies
查看>>
熟悉常用的HDFS操作
查看>>
SCM软件配置管理 (一)SVN 与 CVS
查看>>
js闭包
查看>>
CocoaPods Setting up CocoaPods master repo无反应时的处理
查看>>
linux驱动系列之s3c2440内存布局
查看>>
asp.net上传文件大小限制
查看>>
javascript基础拾遗——词法作用域
查看>>
该来的年终总结,还是来了
查看>>
HustOJ - 1001
查看>>
typedef void far *LPVOID 的具体定义
查看>>
webp图片转换工具
查看>>
2015.12.24(圣诞节) 解决Oralce数据库将具有相同属性的多行合并为一行的简单方法多年想要wmsys.wm_concat...
查看>>
嵌入式Linux之旅——环境搭建篇之烧写整个系统
查看>>