ArrayList<string>和List<string>的区别

62 阅读2分钟

ArrayList<String>List<String> 之间的主要区别在于具体的实现和声明的类型。

  1. ArrayList<String>

    • ArrayListList 接口的具体实现类之一。
    • 它基于动态数组实现,提供了动态增长和缩减的数组,支持随机访问元素。
    • ArrayList 具有数组的特性,允许通过索引直接访问元素,因此适用于需要频繁随机访问元素的情况。
    ArrayList<String> arrayList = new ArrayList<>();
    
  2. List<String>

    • List 是一个接口,定义了有序、可重复的元素集合。它有多个实现类,包括 ArrayListLinkedList 等。
    • 当你声明一个变量为 List<String> 时,你更注重使用接口,而不是特定的实现类。这样可以更容易切换不同的实现类而不改变其余的代码。
    List<String> list = new ArrayList<>();
    

示例比较

// 使用 ArrayList 的声明和实例化
ArrayList<String> arrayList = new ArrayList<>();
arrayList.add("Apple");
arrayList.add("Banana");

// 使用 List 的声明,实例化时选择具体的实现类(ArrayList)
List<String> list = new ArrayList<>();
list.add("Apple");
list.add("Banana");

在实际开发中,推荐使用 List<String> 进行声明,以便更灵活地适应不同的 List 实现。如果后续需要更换为 LinkedList 或其他实现类,只需更改实例化的部分,而不必修改其余代码。

更改 List 的实例化部分通常涉及将声明类型从具体的实现类(如 ArrayList)更改为另一个实现类(如 LinkedList)。以下是示例:

// 原始使用 ArrayList 的声明和实例化
List<String> myList = new ArrayList<>();
myList.add("Apple");
myList.add("Banana");

// 更改为使用 LinkedList 实例化
myList = new LinkedList<>();
myList.add("Orange");
myList.add("Grapes");

在这个例子中,开始时使用了 ArrayList,然后通过将实例化部分更改为 new LinkedList<>(),将 List 实例更改为了 LinkedList。此时,你可以使用 LinkedList 特有的方法,同时保持其他代码不变。

这种灵活性是基于多态性和面向接口编程的思想,通过使用接口类型声明变量,可以在需要时轻松切换不同的实现类,而不会影响其余的代码。