跳转至

Java集合框架与泛型:List集合

概述

在Java编程中,集合框架(Collection Framework)是一组用于存储和操作数据的类和接口。List是集合框架中的一个重要接口,它表示一个有序的集合,允许存储重复的元素。List接口提供了多种方法来操作列表中的元素,如添加、删除、查找等。

List接口的特点

  • 有序性List中的元素按照插入的顺序存储,并且可以通过索引访问。
  • 允许重复元素List中可以包含重复的元素。
  • 允许null元素List中可以包含null元素。

List接口的常用实现类

Java提供了多个List接口的实现类,常用的有:

  • ArrayList:基于动态数组的实现,支持快速随机访问,但在中间插入或删除元素时性能较差。
  • LinkedList:基于双向链表的实现,适合频繁的插入和删除操作,但随机访问性能较差。
  • Vector:与ArrayList类似,但是线程安全的。

代码示例

示例1:使用ArrayList

import java.util.ArrayList;
import java.util.List;

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

        // 添加元素
        fruits.add("Apple");
        fruits.add("Banana");
        fruits.add("Cherry");

        // 打印列表
        System.out.println("Fruits: " + fruits);

        // 获取元素
        String firstFruit = fruits.get(0);
        System.out.println("First fruit: " + firstFruit);

        // 修改元素
        fruits.set(1, "Blueberry");
        System.out.println("Updated fruits: " + fruits);

        // 删除元素
        fruits.remove(2);
        System.out.println("After removal: " + fruits);
    }
}

解释: - 我们创建了一个ArrayList来存储水果名称。 - 使用add()方法添加元素,get()方法获取元素,set()方法修改元素,remove()方法删除元素。 - 最后打印列表以查看操作结果。

示例2:使用LinkedList

import java.util.LinkedList;
import java.util.List;

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

        // 添加元素
        numbers.add(10);
        numbers.add(20);
        numbers.add(30);

        // 在列表开头添加元素
        numbers.add(0, 5);

        // 打印列表
        System.out.println("Numbers: " + numbers);

        // 删除第一个元素
        numbers.remove(0);
        System.out.println("After removal: " + numbers);
    }
}

解释: - 我们创建了一个LinkedList来存储整数。 - 使用add()方法在列表开头添加元素,remove()方法删除元素。 - LinkedList适合频繁的插入和删除操作。

示例3:使用Vector

import java.util.Vector;

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

        // 添加元素
        colors.add("Red");
        colors.add("Green");
        colors.add("Blue");

        // 打印列表
        System.out.println("Colors: " + colors);

        // 获取元素
        String firstColor = colors.get(0);
        System.out.println("First color: " + firstColor);

        // 修改元素
        colors.set(1, "Yellow");
        System.out.println("Updated colors: " + colors);

        // 删除元素
        colors.remove(2);
        System.out.println("After removal: " + colors);
    }
}

解释: - 我们创建了一个Vector来存储颜色名称。 - VectorArrayList类似,但是线程安全的。 - 使用add()get()set()remove()方法操作元素。

练习题

练习1:基本操作

创建一个ArrayList,添加5个不同的字符串元素,然后打印列表。接着删除第三个元素,并再次打印列表。

练习2:LinkedList操作

创建一个LinkedList,添加10个整数元素。编写代码找出列表中的最大值和最小值,并打印它们。

练习3:Vector与ArrayList的比较

创建一个Vector和一个ArrayList,分别添加10000个元素。比较它们在插入和删除操作中的性能差异,并解释原因。

总结

  • List接口List是一个有序的集合,允许存储重复元素和null元素。
  • 常用实现类ArrayListLinkedListVectorList接口的常用实现类。
  • ArrayList:基于动态数组,适合随机访问,但在中间插入或删除元素时性能较差。
  • LinkedList:基于双向链表,适合频繁的插入和删除操作,但随机访问性能较差。
  • Vector:与ArrayList类似,但是线程安全的。

通过本主题的学习,你应该能够理解List接口的基本概念及其常用实现类的使用。通过练习题的实践,你将进一步掌握List集合的操作技巧。