梳理Java中关于集合的知识

本文详细介绍了Java集合框架中的各种常用接口及其实现类,包括List、Set、Map等,并对比了它们的特点和适用场景,例如ArrayList与LinkedList的区别,以及HashMap的工作原理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在这里插入图片描述

常见接口简介

  1. List 有序、可重复

    ArrayList 查改速度快,初始大小10,扩容一次是原来的1.5倍。

    LinkedList 增删速度快,双向链表结构。

    Vector 线程安全,初始大小10,扩容一次是原来的2倍。其他集合可通过java.util.Collections类的静态方法如synchronizedListsynchronizedSet等实现线程安全。

  2. Set 无序、不可重复

    HashSet 底层就是一个HashMap的实例

    LinkedHashSet 相比于HashSet其保存了记录的插入顺序。

    TreeSet 二叉树排序树

  3. Map

    HashMap key和value允许null值的存在,key不许重复,value允许重复。初始大小是16。

    LinkedHashMap 相比于HashMap其保存了记录的插入顺序。

    TreeMap 实现SortMap接口,可根据key进行排序。不允许key为null,非同步的。

    Hashtable 在JDK1.0版本就已经存在了,线程安全效率较低。

    PropertiesHashtable的子类,常用于加载配置文件。

    ConcurrentHashMap 线程安全,并且锁分离。

为何Map接口不继承Collection接口?

Map是集合框架的一部分,但是Map与List、Set等结构不同,所以无需继承Collection接口。

HashMap是如何工作的?

首先根据hashCode()方法获取hash值,根据hash值计算出在应放置在数据的位置,假如该位置为空,那么直接将其插入;假如该位置不为空,检查其equals(Object obj)方法,如果返回true,将其抛弃,反之插入。hash值若一样,将以链表的形式存放在数组中。

假设hash值计算相同,将以链表的形式存储。JDK7和JDK8有点不同,JDK7是将新的值追加在链表上,JDK8是将链表追加在新的值上。

Collections类是什么?

其位于java.util包下,它是一个工具类,有关于List、Set、Map等操作的静态方法。如:排序、交换、反转、复制、最大值、最小值等。

HashMap在多线程时可能会死循环

在并发情形下,Rehash会造成元素间形成一个循环链表。并发情形下推荐使用 ConcurrentHashMap。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值