Java集合框架 :ArrayList 类,LinkedList 类 较详细

1、集合框架

  • 提供了性能优良、使用方便的接口和类;都在Java . util 包中
  • Java的集合类主要由 Collection 接口 和 Map 接口 派生而来
  • Collection 存储不唯一的,无序对象的 有序集合;Map 存储 成对的键(key)——值(value)对象,通过key检索,无序,唯一。

2、ArrayList 类动态存储数据

  • 泛型:就是一种不确定的数据类型。ArrayList,E 可代表任意数据类型,但使用基本数据类型时要使用对应的包装类。

  • 定义 ArrayList 对象

    ArrayList<E> arrayList = new ArrayList<E>();
    //以 String 示例:
    ArrayList<String> arrayList = new ArrayList<String>();
    
  • add 添加

    //1、添加
    arrayList.add("ccc");
    arrayList.add("aaa");
    arrayList.add("eee");
    arrayList.add("123");
    arrayList.add("bbb");
    arrayList.add("ddd");
    System.out.println(arrayList);		
    
  • set 修改

    //2、修改
    arrayList.set(3, "121");
    System.out.println(arrayList);
    
  • remove 删除

    //3、删除
    arrayList.remove(3);//按下标删除
    arrayList.remove("ddd");//按元素值删除
    arrayList.remove("fff");//没有,就不会删除
    System.out.println(arrayList);
    
  • get 取值

    // 4、取值
    System.out.println(arrayList.get(1));
    
  • indexOf | lastIndexOf 查找重复中的一个

    // 5、查找重复中的一个
    arrayList.add("aaa");
    arrayList.add("eee");
    System.out.println(arrayList);
    System.out.println(arrayList.indexOf("aaa"));
    System.out.println(arrayList.lastIndexOf("eee"));
    
  • (查后)迭代

    //6、(查后)迭代
    //foreach,根据元素遍历
    for (String str : arrayList) {
    System.out.print(str+",");
    }
    System.out.println();
    //for 根据下标遍历,ArrayList没有length,用size
    for (int i = 0; i < arrayList.size(); i++) {
    System.out.print(arrayList.get(i)+",");
    }
    System.out.println();
    
  • clear 清空

    //7、清空 
    //arrayList.clear();
    
  • sort 排序

    // 8、排序(难点 重点) 只能排系统 8种 基本数据类型 和 String类型
    Collections.sort(arrayList);
    System.out.println(arrayList);
    
  • ArrayList 实体类的排序

    //ArrayList 自定义类的排序
    /**
    * 8.1、单项 排序
    * 1、在实体类中,实现java.lang.Comparable<实体类>接口
    * 2、在实体类中,重写compareTo(实体类   参数)方法
    */
    //Collections.sort(list);
    //System.out.println("排序后:\n"+list.toString());
    		
    /**
    * 8.2、多项 排序
    * 1、定义比较器类,实现java.lang.Comparator<实体类>接口
    * 2、在比较器类,重写compare(实体类 参数1, 实体类 参数2)方法
    */
    //8.2.1、根据id排序
    //Collections.sort(list, new ProductByIdComparator());
    //System.out.println(list);
    
    //8.2.2、根据price排序
    Collections.sort(list, new ProductByPriceComparator());
    System.out.println(list);
    

3、LinkedList 类动态存储数据

  • 定义 LinkedList 对象

    LinkedList<E> linkList = new LinkedList<E>();
    //以实体类 Dept 示例:
    LinkedList<Dept> linkList = new LinkedList<Dept>();
    
  • add 添加

    //1、添加
    Dept d1 = new Dept();
    Dept d2 = new Dept();
    Dept d3 = new Dept();
    Dept d4 = new Dept();
    linkList.add(d4);
    linkList.add(d2);
    linkList.add(d1);
    linkList.add(d3);
    System.out.println(linkList);
    
  • get(i) . setDeptId 修改

    //2、修改
    linkList.get(0).setDeptId(4);;
    linkList.get(1).setDeptId(2);;
    linkList.get(2).setDeptId(3);;
    linkList.get(3).setDeptId(1);;
    linkList.get(0).setDeptNo(10);
    linkList.get(1).setDeptNo(40);
    linkList.get(2).setDeptNo(30);
    linkList.get(3).setDeptNo(20);
    linkList.get(0).setdName("教育部");
    linkList.get(1).setdName("研发部");
    linkList.get(2).setdName("人事部");
    linkList.get(3).setdName("后勤部");
    linkList.get(0).setLoc("北京");
    linkList.get(1).setLoc("上海");
    linkList.get(2).setLoc("深圳");
    linkList.get(3).setLoc("南京");
    System.out.println(linkList);
    
  • remove 删除

    // 3、删除
    //linkList.remove(0);//根据索引(下标)删除
    //linkList.remove();//无参,默认删除第一个下标为0的
    //linkList.remove(d4);//根据对象删除
    System.out.println(linkList);
    
  • get 取值

    // 4、取值
    Dept dd =  linkList.get(2);
    System.out.println(dd);
    
  • indexOf | lastIndexOf 查找

    //5、查找
    System.out.println(linkList.indexOf(d3));//返回下标
    System.out.println(linkList.lastIndexOf(d2));//返回下标
    
  • (查后)迭代

    // 6、(查后)迭代
    //foreach
    for (Dept dept : linkList) {
    System.out.println(dept.toString());
    }
    System.out.println("-------------------------------");
    //for
    for (int i = 0; i < linkList.size(); i++) {
    System.out.println(linkList.get(i));
    }
    
  • clear 清空

    //7、清空
    //linkList.clear();
    //System.out.println(linkList);
    
  • LinkedList 自定义类(实体类)的排序 sort

    //8、LinkedList 自定义类(实体类)的排序 sort
    /**
    * 8.1、单项 排序
    * 1、在实体类中,实现java.lang.Comparable<实体类>接口
    * 2、在实体类中,重写compareTo(实体类   参数)方法
    */
    //Collections.sort(linkList);
    //System.out.println("排序后:\n"+linkList.toString());
    
    /**
    * 8.2、多项 排序
    * 1、在实体类中,实现java.lang.Comparable<实体类>接口
    * 2、在实体类中,重写compareTo(实体类   参数)方法
    */
    //8.2.1、根据deptId排序
    //Collections.sort(linkList, new DeptLinkedListByIdComparator());
    //System.out.println(linkList);
    
    //8.2.2、根据deptNo排序
    Collections.sort(linkList, new DeptLinkedListByNoComparator());
    System.out.println(linkList);
    
  • push() 方法:将元素放置在第一个;若有多个push()方法,则越在后的,越放置在前

  • pop()方法:删除第一个

4、ArrayList 类 与 LinkedList 类 的区别

  • 存储方式:
    • ArrayList 采用数组的存储方式;
    • LinkedList 采用链表存储方式;
  • 访问效率:
    • ArrayList 集合随机访问查找效率高;
    • LinkedList 集合在插入、删除数据时效率高
上一篇:PTA 7-4 单链表基本操作


下一篇:数据结构(严蔚敏)2.3.1线性链表