• 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)都会做一次数组拷贝。

  • 相关阅读:
    Rust权威指南之编写自动化测试
    PAT 1139 First Contact
    Vue在表单校验中trigger属性指定何时触发校验规则
    关于servlet提交响应后无法跳转
    chatgpt prompt提示词
    【人大金仓】迁移MySql数据库到人大金仓,出现sys_config表重复
    Linux内存管理(二十五):shrink_node
    在模块中使用外部依赖的类
    京东云开发者|软件架构可视化及C4模型:架构设计不仅仅是UML
    蓝桥杯实战应用【算法知识篇】-快速排序算法(附Java、Python和C++代码)
  • 原文地址:https://blog.csdn.net/Lxcjl/article/details/126879935