集合框架2
1、ArrayList去除重复字符串
思路:创建一个新的集合,然后将旧集合的内容遍历放入新集合,如果新集合里不存在该元素就放入,存在就不要了
publicstaticvoid main (String[] args){ArrayList list=newArrayList();list.add("a");list.add("a");list.add("b");list.add("b");list.add("c");list.add("d");ArrayList newList=getSingle(list);System.out.println(newList);}/*** 创建新集合将重复元素去掉* 1、明确返回值类型,返回ArrayList* 2、明确参数列表ArrayList*/- publicstaticArrayList getSingle(ArrayList list){
ArrayList newList =newArrayList();Iterator it = list.iterator();while(it.hasNext()){Object obj = it.next();if(!newList.contains(obj)){newList.add(obj);}}return newList;}}
2、ArrayList去除重复的自定义对象
contains依赖于equals方法,所以需要在person类中重写equals方法


注意:remove方法的底层同样依赖于equals方法:
3、LinkedList特有功能
4、栈和队列
栈:先进后出

队列:先进先出

5、LinkedList模拟栈数据结构的集合并测试
publicclassStack{privateLinkedList list =newLinkedList();// 模拟进栈方法publicvoid in(Object obj){list.addLast(obj);}// 模拟出栈方法publicObject out(){return list.removeLast();}// 模拟栈结构是否为空publicboolean isEmpty(){return list.isEmpty();}}
publicstaticvoid main(String[] args){//demo1();Stack s=newStack();s.in("a");s.in("b");s.in("c");s.in("d");while(!s.isEmpty()){System.out.println(s.out());}}
6、泛型概述和基本使用

<>标识了集合只能存储某该类引用数据或者该类的子类型,所有对象都继承object,泛型不定义为object,无意义

类型转换异常:将类型转换成非该类型实例时出现类型转换异常:运行期错误
注意:it.next()只能调用一次,如果多次会让指针向后移动多次
泛型注意事项:
7、泛型的由来
种瓜得瓜种豆得豆
8、泛型类的概述及其使用

9、泛型方法的概述和使用
非静态方法:方法泛型需要与类的泛型一致;如果不一致,需要在方法上声明该泛型:

静态方法:必须声明自己的泛型,因为静态方法是随着类的加载而加载的,非静态方法是在创建对象的时候赋值

10、泛型接口的使用
两种方法:推荐用第一种


11、泛型高级之通配符


12、增强for循环的概述和使用
底层依赖的是迭代器iterator

13、三种迭代的能否删除

publicstaticvoid main(String[] args){// TODO Auto-generated method stubArrayList<String> list=newArrayList<>();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--);}}System.out.println(list);}
//2、迭代器删除Iterator<String> it=list.iterator();while(it.hasNext()){if("b".equals(it.next())){//list.remove("b");不能用集合的删除方法,迭代过程中如果修改会出现【并发修改异常】it.remove();}}System.out.println(list);}
//3、增强for循环,不能删除,只能遍历,因为底层由迭代器实现的for(String string:list){if("b".equals(string)){list.remove("b");}}System.out.println(list);}
14、静态导入的概述和使用
静态导入后,Arrays.sort的前缀可以省略不写直接写sort
15、可变参数的概述和使用
publicclassChangeableArgs_Demo2{publicstaticvoid main(String[] args){// TODO Auto-generated method stubint[] arr={11,22,33,44,55};//print(arr);print(11,22,33);}// public static void print(int[] arr){// for(int i=0;i<arr.length;i++){// System.out.println(arr[i]);// }// }publicstaticvoid print(int...arr){//可变参数是一个数组for(int i=0;i<arr.length;i++){System.out.println(arr[i]);}}}
16、Arrays工具类的aslist方法的使用
publicstaticvoid main(String[] args){//demo1();//demo2();//集合转数组,加泛型的ArrayList<String> list=newArrayList<>();list.add("a");list.add("b");list.add("c");list.add("d");list.add("e");String[] arr = list.toArray(newString[6]);//当集合转换数组时,数组的长度如果是<=集合的size值,转换后的数组长度等于集合//如果数组的长度>集合的size值,那分配的数组长度就和指定的长度相同for(int i=0;i<arr.length;i++){System.out.println(arr[i]);}}publicstaticvoid demo2(){// int[] arr={11,22,33,44,55}; 基本数据类型的数组转换成集合,会将整个数组当做一个对象进行转换// List<int[]> list=Arrays.asList(arr);// System.out.println(list);Integer[] arr={11,22,33};//想将数组转换成集合,数组必须是引用数据类型List<Integer> list=Arrays.asList(arr);System.out.println(list);}publicstaticvoid demo1(){String[] arr={"a","b","c"};List<String> list=Arrays.asList(arr);//将数组转换成集合//list.add("d"); 不能添加System.out.println(list);}
17、ArrayList嵌套
publicclassArrayListArrayList_demo1{/*** 集合嵌套* 学科分为若干个班级* 整个学科是一个大集合* 若干个班级分为每一个小集合* @param args*/publicstaticvoid main(String[] args){ArrayList<ArrayList<Person>> list=newArrayList<>();ArrayList<Person> first =newArrayList<>();first.add(newPerson("张三",23));first.add(newPerson("李四",24));first.add(newPerson("王五",25));ArrayList<Person> second =newArrayList<>();second.add(newPerson("大黄",3));second.add(newPerson("豆豆",4));second.add(newPerson("小呆",5));//将班级添加到学科集合中list.add(first);list.add(second);//遍历学科集合for(ArrayList<Person>a : list){for(Person p:a){System.out.println(p);}}}}

浙公网安备 33010602011771号