c语言编程笔录

首页 >   > 笔记大全

笔记大全

深入浅析Java中的 List类

更新时间:2023-12-02

一、 List概述及基本使用

Java中的List接口继承了Collection接口,是一种有序的集合类型,可以存储重复元素。

public interface List extends Collection {
    // 集合中元素的个数
    int size();
 
    // 判断集合是否为空
    boolean isEmpty();
 
    // 判断集合是否包含某个元素
    boolean contains(Object o);
 
    // 添加元素
    boolean add(E e);
 
    // 移除元素
    boolean remove(Object o);
 
    // 清空集合中所有元素
    void clear();
}

其中,List接口特有的方法有:

// 根据索引获取元素
E get(int index);
 
// 根据索引替换元素
E set(int index, E element);
 
// 在指定位置插入元素
void add(int index, E element);
 
// 移除指定位置的元素
E remove(int index);
 
// 获取子集合
List subList(int fromIndex, int toIndex);
 
// 获取元素在集合中的索引位置
int indexOf(Object o);
 
// 获取元素在集合中最后一次出现的索引位置
int lastIndexOf(Object o);

下面是List基本用法的示例代码:

List<String> list = new ArrayList<>();
list.add("A");
list.add("B");
list.add("C");
list.add("D");
for (String s : list) {
    System.out.println(s);
}

二、 ArrayList和LinkedList的区别

ArrayList和LinkedList都是List的实现类,但它们的实现方式不同。

ArrayList底层是数组,适用于查找和随机访问操作,但插入和删除操作会导致元素的移动,效率较低。

LinkedList底层是链表,适用于插入和删除操作,但随机访问的效率较低。

下面是ArrayList和LinkedList的示例代码:

// ArrayList示例代码
List<String> arrayList = new ArrayList<>();
arrayList.add("A");
arrayList.add("B");
arrayList.add("C");
arrayList.add("D");
for (String s : arrayList) {
    System.out.println(s);
}
 
// LinkedList示例代码
List<String> linkedList = new LinkedList<>();
linkedList.add("A");
linkedList.add("B");
linkedList.add("C");
linkedList.add("D");
for (String s : linkedList) {
    System.out.println(s);
}

三、 List的遍历方式

List的遍历方式有三种:for循环、迭代器和Lambda表达式。

// for循环示例
for (int i = 0; i < arrayList.size(); i++) {
    System.out.println(arrayList.get(i));
}
 
// 迭代器示例
Iterator<String> iterator = arrayList.iterator();
while (iterator.hasNext()) {
    System.out.println(iterator.next());
}
 
// Lambda表达式示例
arrayList.forEach(s -> System.out.println(s));

四、 List的排序和比较

List接口中提供了sort()方法来对元素进行排序,排序时需要保证元素实现了Comparable接口或者提供Comparator接口实现。

Comparable接口需要实现compareTo()方法,Comparator接口需要实现compare()方法。

下面是List排序和比较的示例代码:

// Comparable示例
class Student implements Comparable<Student> {
    private int age;
    private String name;
 
    public Student(int age, String name) {
        this.age = age;
        this.name = name;
    }
 
    public int getAge() {
        return age;
    }
 
    public String getName() {
        return name;
    }
 
    @Override
    public int compareTo(Student o) {
        return this.age - o.getAge();
    }
}
 
List<Student> list = new ArrayList<>();
list.add(new Student(20, "Tom"));
list.add(new Student(18, "Jerry"));
list.add(new Student(25, "John"));
Collections.sort(list);
for (Student s : list) {
    System.out.println(s.getName() + "," + s.getAge() + "岁");
}
 
// Comparator示例
Comparator<String> comparator = (o1, o2) -> o2.compareTo(o1);
Collections.sort(arrayList, comparator);
for (String s : arrayList) {
    System.out.println(s);
}