java中List的底层数据结构 - 面试宝典
【摘要】 在Java中,List是一种有序的集合,可以存储任意类型的元素。List接口的常见实现类有ArrayList、LinkedList和Vector。ArrayList:底层数据结构是数组,数组的长度会根据需要进行动态扩容。当元素数量超过当前容量时,会创建一个更大的数组,并将原来的元素复制到新数组中。由于基于数组实现,ArrayList在随机访问(根据索引获取元素)方面具有良好的性能,时间复杂度...
在Java中,List是一种有序的集合,可以存储任意类型的元素。List接口的常见实现类有ArrayList、LinkedList和Vector。
- ArrayList:底层数据结构是数组,数组的长度会根据需要进行动态扩容。当元素数量超过当前容量时,会创建一个更大的数组,并将原来的元素复制到新数组中。由于基于数组实现,ArrayList在随机访问(根据索引获取元素)方面具有良好的性能,时间复杂度为O(1),但在插入和删除元素时,需要移动后续元素,时间复杂度为O(n)。
- LinkedList:底层数据结构是双向链表,每个节点包含一个元素和两个指针,分别指向前驱节点和后继节点。由于链表的特性,LinkedList在插入和删除元素时具有较好的性能,时间复杂度为O(1),但在随机访问方面性能较差,需要遍历链表,时间复杂度为O(n)。
- Vector:与ArrayList类似,底层数据结构也是数组,但Vector是线程安全的,通过使用synchronized关键字来保证线程安全。由于存在同步开销,Vector的性能相对较差,一般在不需要线程安全的场景下使用ArrayList。 综上所述,List的底层数据结构可以是数组(如ArrayList和Vector)或链表(如LinkedList),根据不同的需求选择合适的实现类。
下面是Java中List的底层数据结构的代码示例:
- ArrayList:
javaCopy codeimport java.util.ArrayList;
import java.util.List;
public class ArrayListExample {
public static void main(String[] args) {
List<String> list = new ArrayList<>();
// 添加元素
list.add("Apple");
list.add("Banana");
list.add("Orange");
// 遍历元素
for (String fruit : list) {
System.out.println(fruit);
}
// 获取指定索引的元素
String element = list.get(1);
System.out.println("Element at index 1: " + element);
// 删除指定索引的元素
list.remove(0);
// 判断列表是否为空
boolean isEmpty = list.isEmpty();
System.out.println("Is list empty? " + isEmpty);
// 获取列表的大小
int size = list.size();
System.out.println("List size: " + size);
}
}
- LinkedList:
javaCopy codeimport java.util.LinkedList;
import java.util.List;
public class LinkedListExample {
public static void main(String[] args) {
List<String> list = new LinkedList<>();
// 添加元素
list.add("Apple");
list.add("Banana");
list.add("Orange");
// 遍历元素
for (String fruit : list) {
System.out.println(fruit);
}
// 获取指定索引的元素
String element = list.get(1);
System.out.println("Element at index 1: " + element);
// 删除指定索引的元素
list.remove(0);
// 判断列表是否为空
boolean isEmpty = list.isEmpty();
System.out.println("Is list empty? " + isEmpty);
// 获取列表的大小
int size = list.size();
System.out.println("List size: " + size);
}
}
以上代码示例分别展示了ArrayList和LinkedList的基本操作,包括添加元素、遍历元素、获取指定索引的元素、删除指定索引的元素、判断列表是否为空以及获取列表的大小。你可以根据需要选择合适的List实现类。
【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)