Java中集合类扩容操作案例分析

原创 深碍√TFBOYSˉ_ 2024-11-07 15:21 80阅读 0赞

Java中的集合类,如ArrayListHashSet等,通常在元素数量超过当前容量时会进行扩容操作。以下是一些常见的集合类扩容操作的案例分析:

1. ArrayList的扩容ArrayList是基于动态数组实现的,当添加元素时,如果数组没有足够的空间来容纳新元素,就会进行扩容操作。默认情况下,ArrayList的初始容量为10,每次扩容时,容量大约是原来的1.5倍(具体是原容量的1.5倍向上取整)。

扩容操作示例:

javaArrayList<Integer> list = new ArrayList<>(); //初始容量为10for (int i =0; i <20; i++) { list.add(i); // 当添加到第11个元素时,会触发扩容操作}###2. HashSet的扩容HashSet是基于HashMap实现的,所以它的扩容操作与HashMap类似。当HashMap中的元素数量超过当前容量与加载因子的乘积时,就会进行扩容操作。默认情况下,HashMap的初始容量为16,加载因子为0.75。

扩容操作示例:

javaHashSet<Integer> set = new HashSet<>(); //初始容量为16for (int i =0; i <20; i++) { set.add(i); // 当添加到第13个元素时,会触发扩容操作}###3. LinkedHashSet的扩容LinkedHashSet内部维护了一个链表来保持元素的插入顺序,同时使用HashMap来存储元素。它的扩容操作与HashMap相同。

4. HashMap的扩容HashMap在元素数量超过当前容量与加载因子的乘积时会进行扩容操作。扩容时,会创建一个新的容量更大的数组,并将旧数组中的元素重新映射到新数组中。

扩容操作示例:

javaHashMap<Integer, String> map = new HashMap<>(); //初始容量为16for (int i =0; i <20; i++) { map.put(i, "Value" + i); // 当添加到第13个元素时,会触发扩容操作}###5. LinkedHashMap的扩容LinkedHashMap维护了一个双向链表来保持元素的插入顺序或访问顺序,同时使用HashMap来存储元素。它的扩容操作与HashMap相同。

总结-扩容操作通常发生在添加元素时,当集合的当前容量不足以容纳更多元素时。

-扩容操作涉及到创建新的数组并重新映射旧数组中的元素,这是一个相对耗时的操作,因此合理地选择初始容量和加载因子可以减少扩容操作的次数,提高性能。

  • 不同的集合类有不同的扩容机制和性能特点,选择合适的集合类对于优化程序性能至关重要。
文章版权声明:注明蒲公英云原创文章,转载或复制请以超链接形式并注明出处。

发表评论

表情:
评论列表 (有 0 条评论,80人围观)

还没有评论,来说两句吧...

相关阅读