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 集合在插入、删除数据时效率高