java中List的底层数据结构 - 面试宝典

举报
皮牙子抓饭 发表于 2023/08/14 09:40:27 2023/08/14
【摘要】 在Java中,List是一种有序的集合,可以存储任意类型的元素。List接口的常见实现类有ArrayList、LinkedList和Vector。ArrayList:底层数据结构是数组,数组的长度会根据需要进行动态扩容。当元素数量超过当前容量时,会创建一个更大的数组,并将原来的元素复制到新数组中。由于基于数组实现,ArrayList在随机访问(根据索引获取元素)方面具有良好的性能,时间复杂度...

在Java中,List是一种有序的集合,可以存储任意类型的元素。List接口的常见实现类有ArrayList、LinkedList和Vector。

  1. ArrayList:底层数据结构是数组,数组的长度会根据需要进行动态扩容。当元素数量超过当前容量时,会创建一个更大的数组,并将原来的元素复制到新数组中。由于基于数组实现,ArrayList在随机访问(根据索引获取元素)方面具有良好的性能,时间复杂度为O(1),但在插入和删除元素时,需要移动后续元素,时间复杂度为O(n)。
  2. LinkedList:底层数据结构是双向链表,每个节点包含一个元素和两个指针,分别指向前驱节点和后继节点。由于链表的特性,LinkedList在插入和删除元素时具有较好的性能,时间复杂度为O(1),但在随机访问方面性能较差,需要遍历链表,时间复杂度为O(n)。
  3. Vector:与ArrayList类似,底层数据结构也是数组,但Vector是线程安全的,通过使用synchronized关键字来保证线程安全。由于存在同步开销,Vector的性能相对较差,一般在不需要线程安全的场景下使用ArrayList。 综上所述,List的底层数据结构可以是数组(如ArrayList和Vector)或链表(如LinkedList),根据不同的需求选择合适的实现类。

下面是Java中List的底层数据结构的代码示例:

  1. 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);
    }
}
  1. 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

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。