Java集合Set 集合、List和Collections类( 三 )

注意\color{red}{注意}注意:操作索引的时候一定要放置索引越界异常 。
3.3、List 接口的子类3.3.1、ArrayList 集合ArrayList 集合的底层数据结构是数组结构 , 其特点是元素增删慢 , 查询快 , 由于日常开发中使用最多的功能就算查询数据 , 所以 ArrayList 是最常用的集合 。 但是呢 , 我们不能在开发中随意的使用 ArrayList 完成任何需求 , 只有当 ArrayList 适合我们的开发需求时(查询多 , 增删少) , 我们才去使用它 。
3.3.2、LinkedList 集合LinkedList 集合的底层数据结构是链表结构 , 其特点是元素增删快 , 查询慢 , 但是链表结构的首尾元素查找速度跟数组的查找是一样快的 , 所以 LinkedList 中包含了大量操作首尾元素的方法 。 所以当我们需要实现的需求增删操作很多 , 查询很少或者查询很多但都是查询手尾的时候 , 我们就可以使用 LinkedList 集合 。
LinkedList 集合操作首尾元素方法代码演示如下所示:
public class LinkedListDemo02 {public static void main(String[] args) {// show01();// show02();show03();}// 增加元素private static void show01() {// 创建LinkedList集合对象LinkedList linkedList = new LinkedList<>();linkedList.add("a");linkedList.add("b");linkedList.add("c");System.out.println(linkedList);// addFirst()linkedList.addFirst("www");System.out.println(linkedList);// push() 等效于 addFirst()linkedList.push("ccc");System.out.println(linkedList);// addLast() 等效于 add()linkedList.addLast("com");System.out.println(linkedList);}// 获取元素private static void show02() {// 创建LinkedList集合对象LinkedList linkedList = new LinkedList<>();linkedList.add("a");linkedList.add("b");linkedList.add("c");System.out.println(linkedList);if (!linkedList.isEmpty()) {String first = linkedList.getFirst();System.out.println(first);String last = linkedList.getLast();System.out.println(last);}}// 移除元素private static void show03() {// 创建LinkedList集合对象LinkedList linkedList = new LinkedList<>();linkedList.add("a");linkedList.add("b");linkedList.add("c");System.out.println(linkedList);// pop() 相当于 removeFirst()String first = linkedList.removeFirst();System.out.println(first);String last = linkedList.removeLast();System.out.println(last);System.out.println(linkedList);}}复制代码3.3.3、Vector 集合Vector 集合的底层数据结构也是数组结构 , 但是与List和LinkedList 不同的是 , Vector 集合是单线程的 , 速度慢 , 目前已经被 ArrayList 所取代 。
四、Collections 集合工具类4.1、常用功能Collections 是集合工具类 , 用来对集合进行操作 , 部分方法如下:

  • public static <泛型> boolean addAll(Collections, c, T...elements):往集合中添加一些元素 。
  • public static void shuffle(List list):打乱集合顺序 。
  • public static <泛型> void sort(List list):将集合中元素按照默认规则排序 。
  • public static <泛型> void sort(List list, Comparator):将集合中元素按照指定规则排序 。
4.2、sort(List list) 方法sort(List list) 方法的使用前提是被排序的集合里面存储的元素必须实现 Comparable 接口 , 并重写接口中的 compareTo() 方法定义排序的规则 。
sort(List list) 方法代码演示如下所示:
public class CollectionsDemo01 {public static void main(String[] args) {ArrayList list = new ArrayList<>();list.add(new Student("张三", 18));list.add(new Student("李四", 20));list.add(new Student("王五", 15));System.out.println(list);Collections.sort(list);System.out.println(list);}static class Student implements Comparable {private String name;private int age;public Student() {}public Student(String name, int age) {this.name = name;this.age = age;}public String getName() {return name;}public void setName(String name) {this.name = name;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}@Overridepublic String toString() {return "Student{" +"name='" + name + '\'' +", age=" + age +'}';}@Overridepublic int compareTo(Student o) {// 自定义比较规则// 比较两个人的年龄return this.getAge() - o.getAge();// 按照年龄升序//return o.getAge() - this.getAge();// 按照年龄降序}}}复制代码4.3、sort(list, Comparator) 方法Comparator 和 Comparable 的区别:
  1. Comparable 是排序接口 , 若一个类实现了 Comparable 接口 , 就意味着“该类支持排序” 。
  2. Comparator 是比较器 , 我们若需要控制某个类的次序 , 可以建立一个“该类的比较器”来进行排序 。
  3. Comparable 相当于“内部比较器” , 而 Comparator 相当于“外部比较器” 。
一个对象不支持自己和自己比较(没有实现Comparable接口) , 但是又想对两个对象进行比较
sort(list, Comparator) 方法代码演示如下所示: