Java有哪些List???

在 Java 中,常用的 List 接口的实现类有以下几种:

1. ArrayList:基于数组实现的动态数组,支持快速随机访问和增删操作,但在插入和删除元素时需要移动其他元素。

当使用 `ArrayList` 时,可以按照以下示例代码进行操作:

import java.util.ArrayList;

public class ArrayListExample {
    public static void main(String[] args) {
        // 创建一个 ArrayList 对象
        ArrayList fruits = new ArrayList<>();

        // 添加元素到 ArrayList
        fruits.add("苹果");
        fruits.add("香蕉");
        fruits.add("橙子");

        // 获取 ArrayList 的大小
        int size = fruits.size();
        System.out.println("ArrayList 的大小为:" + size);

        // 检查 ArrayList 是否为空
        boolean isEmpty = fruits.isEmpty();
        System.out.println("ArrayList 是否为空:" + isEmpty);

        // 获取指定位置的元素
        String fruit = fruits.get(1);
        System.out.println("索引为 1 的水果是:" + fruit);

        // 修改指定位置的元素
        fruits.set(0, "梨子");
        System.out.println("修改后的 ArrayList:" + fruits);

        // 删除指定位置的元素
        String removedFruit = fruits.remove(2);
        System.out.println("被删除的水果是:" + removedFruit);

        // 判断 ArrayList 是否包含某个元素
        boolean containsFruit = fruits.contains("橙子");
        System.out.println("ArrayList 是否包含橙子:" + containsFruit);

        // 清空 ArrayList
        fruits.clear();
        System.out.println("清空后的 ArrayList:" + fruits);
    }
}

        以上代码示例了 `ArrayList` 的基本用法。通过 `add()` 方法添加元素,通过 `size()` 方法获取大小,通过 `get()` 方法获取指定位置的元素,通过 `set()` 方法修改指定位置的元素,通过 `remove()` 方法删除指定位置的元素,通过 `contains()` 方法判断是否包含某个元素,通过 `isEmpty()` 方法判断是否为空,通过 `clear()` 方法清空 ArrayList。


2. LinkedList:基于双向链表实现的列表,支持快速插入和删除元素,但随机访问的性能较差。
当使用 `LinkedList` 时,可以按照以下示例代码进行操作:

import java.util.LinkedList;

public class LinkedListExample {
    public static void main(String[] args) {
        // 创建一个 LinkedList 对象
        LinkedList colors = new LinkedList<>();

        // 添加元素到 LinkedList
        colors.add("红色");
        colors.add("绿色");
        colors.add("蓝色");

        // 获取 LinkedList 的大小
        int size = colors.size();
        System.out.println("LinkedList 的大小为:" + size);

        // 检查 LinkedList 是否为空
        boolean isEmpty = colors.isEmpty();
        System.out.println("LinkedList 是否为空:" + isEmpty);

        // 获取第一个元素
        String firstColor = colors.getFirst();
        System.out.println("第一个颜色是:" + firstColor);

        // 获取最后一个元素
        String lastColor = colors.getLast();
        System.out.println("最后一个颜色是:" + lastColor);

        // 在指定位置插入元素
        colors.add(1, "黄色");
        System.out.println("插入后的 LinkedList:" + colors);

        // 删除指定位置的元素
        String removedColor = colors.remove(2);
        System.out.println("被删除的颜色是:" + removedColor);

        // 判断 LinkedList 是否包含某个元素
        boolean containsColor = colors.contains("绿色");
        System.out.println("LinkedList 是否包含绿色:" + containsColor);

        // 清空 LinkedList
        colors.clear();
        System.out.println("清空后的 LinkedList:" + colors);
    }
}

        以上代码示例了 `LinkedList` 的基本用法。通过 `add()` 方法添加元素,通过 `size()` 方法获取大小,通过 `getFirst()` 和 `getLast()` 方法获取第一个和最后一个元素,通过 `add(index, element)` 方法在指定位置插入元素,通过 `remove()` 方法删除指定位置的元素,通过 `contains()` 方法判断是否包含某个元素,通过 `isEmpty()` 方法判断是否为空,通过 `clear()` 方法清空 LinkedList。

        需要注意的是,相较于 `ArrayList`,`LinkedList` 在插入和删除元素时的性能更好,但在随机访问元素时的性能较差。

3. Vector:与 ArrayList 类似,是一个动态数组,但是它是线程安全的,支持同步访问。

当使用 `Vector` 时,可以按照以下示例代码进行操作:

import java.util.Vector;

public class VectorExample {
    public static void main(String[] args) {
        // 创建一个 Vector 对象
        Vector fruits = new Vector<>();

        // 添加元素到 Vector
        fruits.add("苹果");
        fruits.add("香蕉");
        fruits.add("橙子");

        // 获取 Vector 的大小
        int size = fruits.size();
        System.out.println("Vector 的大小为:" + size);

        // 检查 Vector 是否为空
        boolean isEmpty = fruits.isEmpty();
        System.out.println("Vector 是否为空:" + isEmpty);

        // 获取指定位置的元素
        String fruit = fruits.get(1);
        System.out.println("索引为 1 的水果是:" + fruit);

        // 修改指定位置的元素
        fruits.set(0, "梨子");
        System.out.println("修改后的 Vector:" + fruits);

        // 删除指定位置的元素
        String removedFruit = fruits.remove(2);
        System.out.println("被删除的水果是:" + removedFruit);

        // 判断 Vector 是否包含某个元素
        boolean containsFruit = fruits.contains("橙子");
        System.out.println("Vector 是否包含橙子:" + containsFruit);

        // 清空 Vector
        fruits.clear();
        System.out.println("清空后的 Vector:" + fruits);
    }
}

        以上代码示例了 `Vector` 的基本用法。通过 `add()` 方法添加元素,通过 `size()` 方法获取大小,通过 `get()` 方法获取指定位置的元素,通过 `set()` 方法修改指定位置的元素,通过 `remove()` 方法删除指定位置的元素,通过 `contains()` 方法判断是否包含某个元素,通过 `isEmpty()` 方法判断是否为空,通过 `clear()` 方法清空 Vector。

        需要注意的是,`Vector` 是线程安全的,支持同步访问,因此在多线程环境下使用时比较安全。但由于同步操作的开销较大,如果不需要线程安全的特性,推荐使用 `ArrayList`。

4. Stack:栈的实现类,继承自 Vector 类,提供了后进先出(LIFO)的操作。当使用 `Stack` 时,可以按照以下示例代码进行操作:

当使用 `Stack` 时,可以按照以下示例代码进行操作:

import java.util.Stack;

public class StackExample {
    public static void main(String[] args) {
        // 创建一个 Stack 对象
        Stack stack = new Stack<>();

        // 将元素推入栈顶
        stack.push("Java");
        stack.push("Python");
        stack.push("C++");

        // 获取栈顶元素
        String topElement = stack.peek();
        System.out.println("栈顶元素是:" + topElement);

        // 弹出栈顶元素
        String poppedElement = stack.pop();
        System.out.println("弹出的元素是:" + poppedElement);

        // 判断栈是否为空
        boolean isEmpty = stack.isEmpty();
        System.out.println("栈是否为空:" + isEmpty);

        // 获取栈的大小
        int size = stack.size();
        System.out.println("栈的大小为:" + size);

        // 遍历栈中的元素
        System.out.print("栈中的元素为:");
        while (!stack.isEmpty()) {
            String element = stack.pop();
            System.out.print(element + " ");
        }
        System.out.println();
    }
}

        以上代码示例了 `Stack` 的基本用法。通过 `push()` 方法将元素推入栈顶,通过 `peek()` 方法获取栈顶元素,通过 `pop()` 方法弹出栈顶元素,通过 `isEmpty()` 方法判断栈是否为空,通过 `size()` 方法获取栈的大小。

        需要注意的是,`Stack` 是继承自 `Vector` 类的,因此具有线程安全的特性。但同样地,由于同步操作的开销较大,如果不需要线程安全的特性,可以考虑使用 `ArrayDeque` 作为栈的实现类。

以上代码示例了 `Stack` 的基本用法。通过 `push()` 方法将元素推入栈顶,通过 `peek()` 方法获取栈顶元素,通过 `pop()` 方法弹出栈顶元素,通过 `isEmpty()` 方法判断栈是否为空,通过 `size()` 方法获取栈的大小。

 

5. CopyOnWriteArrayList:线程安全的列表,通过在修改操作时创建一个新的副本来实现线程安全,适用于读多写少的场景。

当使用 `CopyOnWriteArrayList` 时,可以按照以下示例代码进行操作:

import java.util.concurrent.CopyOnWriteArrayList;

public class CopyOnWriteArrayListExample {
    public static void main(String[] args) {
        // 创建一个 CopyOnWriteArrayList 对象
        CopyOnWriteArrayList list = new CopyOnWriteArrayList<>();

        // 添加元素到 CopyOnWriteArrayList
        list.add("Java");
        list.add("Python");
        list.add("C++");

        // 遍历 CopyOnWriteArrayList
        System.out.println("CopyOnWriteArrayList 中的元素为:");
        for (String element : list) {
            System.out.println(element);
        }

        // 修改 CopyOnWriteArrayList
        list.set(0, "JavaScript");
        System.out.println("修改后的 CopyOnWriteArrayList:" + list);

        // 删除元素
        list.remove("Python");
        System.out.println("删除后的 CopyOnWriteArrayList:" + list);

        // 判断 CopyOnWriteArrayList 是否包含某个元素
        boolean containsElement = list.contains("C++");
        System.out.println("CopyOnWriteArrayList 是否包含 C++:" + containsElement);

        // 获取 CopyOnWriteArrayList 的大小
        int size = list.size();
        System.out.println("CopyOnWriteArrayList 的大小为:" + size);
    }
}

        以上代码示例了 `CopyOnWriteArrayList` 的基本用法。通过 `add()` 方法添加元素,通过 `set()` 方法修改元素,通过 `remove()` 方法删除元素,通过 `contains()` 方法判断是否包含某个元素,通过 `size()` 方法获取大小。

        需要注意的是,`CopyOnWriteArrayList` 是线程安全的,适用于读多写少的场景。在修改操作时,`CopyOnWriteArrayList` 会创建一个底层数组的副本,因此写操作的性能较低,但读操作的性能较高。它适用于对数据一致性要求较高,但并发写操作较少的情况下。

        这些 List 实现类都位于 Java 的标准库中,可以根据具体的需求选择合适的实现类来使用。

        除了以上列举的 List 实现类,还可以使用其他第三方库或框架提供的 List 实现,如 Guava 的         ImmutableList、Apache Commons Collections 的 LinkedList 等。

你可能感兴趣的:(java,java,开发语言)