• Java 集合面试题小结(1)


    1. 集合和数组的区别

    • 数组是固定长度的;集合可变长度的。
    • 数组可以存储基本数据类型,也可以存储引用数据类型;集合只能存储引用数据类型。
    • 数组存储的元素必须是同一个数据类型;集合存储的对象可以是不同数据类型。

    2. 使用集合框架的好处

    1. 容量自增长;
    2. 提供了高性能的数据结构和算法,使编码更轻松,提高了程序速度和质量;
    3. 可以方便地扩展或改写集合,提高代码复用性和可操作性。
    4. 通过使用JDK自带的集合类,可以降低代码维护和学习新API成本。

    3. 常用的集合类有哪些?

    Map接口和Collection接口是所有集合框架的父接口:

    • Collection接口的子接口包括:Set接口和List接口
    • Map接口的实现类主要有:HashMap、TreeMap、Hashtable、ConcurrentHashMap以及Properties等
    • Set接口的实现类主要有:HashSet、TreeSet、LinkedHashSet等
    • List接口的实现类主要有:ArrayList、LinkedList、Stack以及Vector.

    4.ArrayList 和LinkedList 的区别是什么?

    • 数据结构实现:ArrayList 是动态数组的数据结构实现,而 LinkedList 是双向链表的数据结构实现。
    • 随机访问效率:ArrayList 比 LinkedList 在随机访问的时候效率要高,因为 LinkedList 是线性的数据存储方式,所以需要移动指针从前往后依次查找。
    • 增加和删除效率:在非首尾的增加和删除操作,LinkedList 要比 ArrayList 效率要高,因为ArrayList 增删操作要影响数组内的其他数据的下标。
    • 内存空间占用:LinkedList 比 ArrayList 更占内存,因为 LinkedList 的节点除了存储数据,还存储了两个引用,一个指向前一个元素,一个指向后一个元素。
    • 线程安全:ArrayList 和 LinkedList 都是不同步的,也就是不保证线程安全;
    • 综合来说,在需要频繁读取集合中的元素时,更推荐使用 ArrayList,而在插入和删除操作较多时,更推荐使用 LinkedList。
    • LinkedList 的双向链表也叫双链表,是链表的一种,它的每个数据结点中都有两个指针,分别指向直接后继和直接前驱。所以,从双向链表中的任意一个结点开始,都可以很方便地访问它的前驱结点和后继结点。

    5. ArrayList 和 Vector 的区别是什么?

    6. 多线程场景下如何使用 ArrayList?

    ArrayList 不是线程安全的,如果遇到多线程场景,可以通过 Collections 的 synchronizedList 方法将其转换成线程安全的容器后再使用

    JDK集合框架中为我们提供了 ArrayList 的这样一个实现:CopyOnWriteArrayList。但是如果不是写少读多的场景,使用 CopyOnWriteArrayList 开销比较大,因为每次对其更新操作(add/set/remove)都会做一次数组拷贝。

  • 相关阅读:
    RocketMQ高性能核心原理与源码架构剖析
    第 362 场 LeetCode 周赛题解
    OpenCV入门(C++/Python)- 使用OpenCV读取和编写视频(二)
    【vue】使用 apache 给前后端服务做反向代理
    go-gin-api 本地部署调试问题总结
    【PAT甲级】1099 Build A Binary Search Tree
    【MySQL】深入了解索引的底层逻辑结构
    沈阳陪诊系统|沈阳陪诊系统开发|沈阳陪诊系统功能和优势
    Spring声明式事务
    [ 渗透测试面试篇 ] 渗透测试面试题大集合(详解)(二)XSS注入相关面试题
  • 原文地址:https://blog.csdn.net/Lxcjl/article/details/126879935