集合框架2

1、ArrayList去除重复字符串

      思路:创建一个新的集合,然后将旧集合的内容遍历放入新集合,如果新集合里不存在该元素就放入,存在就不要了
  1. publicstaticvoid main (String[] args){
  2. ArrayList list=newArrayList();
  3. list.add("a");
  4. list.add("a");
  5. list.add("b");
  6. list.add("b");
  7. list.add("c");
  8. list.add("d");
  9. ArrayList newList=getSingle(list);
  10. System.out.println(newList);
  11. }
  12. /**
  13. * 创建新集合将重复元素去掉
  14. * 1、明确返回值类型,返回ArrayList
  15. * 2、明确参数列表ArrayList
  16. */
  17. publicstaticArrayList getSingle(ArrayList list){
  18. ArrayList newList =newArrayList();
  19. Iterator it = list.iterator();
  20. while(it.hasNext()){
  21. Object obj = it.next();
  22. if(!newList.contains(obj)){
  23. newList.add(obj);
  24. }
  25. }
  26. return newList;
  27. }
  28. }
 
2、ArrayList去除重复的自定义对象
contains依赖于equals方法,所以需要在person类中重写equals方法
  
 
    注意:remove方法的底层同样依赖于equals方法:
 
3、LinkedList特有功能
 
4、栈和队列
    栈:先进后出
           
 
    队列:先进先出
          
 
5、LinkedList模拟栈数据结构的集合并测试  
  1. publicclassStack{
  2. privateLinkedList list =newLinkedList();
  3. // 模拟进栈方法
  4. publicvoid in(Object obj){
  5. list.addLast(obj);
  6. }
  7. // 模拟出栈方法
  8. publicObject out(){
  9. return list.removeLast();
  10. }
  11. // 模拟栈结构是否为空
  12. publicboolean isEmpty(){
  13. return list.isEmpty();
  14. }
  15. }
  1. publicstaticvoid main(String[] args){
  2. //demo1();
  3. Stack s=newStack();
  4. s.in("a");
  5. s.in("b");
  6. s.in("c");
  7. s.in("d");
  8. while(!s.isEmpty()){
  9. System.out.println(s.out());
  10. }
  11. }
 
6、泛型概述和基本使用
 
 <>标识了集合只能存储某该类引用数据或者该类的子类型,所有对象都继承object,泛型不定义为object,无意义
 
 类型转换异常:将类型转换成非该类型实例时出现类型转换异常:运行期错误
 
 注意:it.next()只能调用一次,如果多次会让指针向后移动多次
 
泛型注意事项:
 
7、泛型的由来
 种瓜得瓜种豆得豆
 
8、泛型类的概述及其使用
 
 
9、泛型方法的概述和使用
     非静态方法:方法泛型需要与类的泛型一致;如果不一致,需要在方法上声明该泛型:
 
 
      静态方法:必须声明自己的泛型,因为静态方法是随着类的加载而加载的,非静态方法是在创建对象的时候赋值
 
10、泛型接口的使用
两种方法:推荐用第一种
       
 
 
11、泛型高级之通配符
 
 

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

 
13、三种迭代的能否删除

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





原文地址:https://www.cnblogs.com/mairanran/p/6840251.html