Java的List、Set、Map三大集合

List、Set、Map三大集合,基本上是面试必被问到的东西,关于Java中JCF的东西是面试当中的一个大点,如果正在面试的话,建议还是认真学习一下JCF相关的东西。

一、List
List是数据集合,是有序的,可以重复的集合,List主要有三个实现类,分别是ArrayList,LinkedList,vector

我们分别介绍一下:
1、ArrayList

  • 不支持同步
  • 以数组作为底层原理实现
  • 利用索引定位,可以快速查询,适合变动不大,用于查询的数据
  • 基于数组实现,不适合指定位置的插入、删除;尾部插入删除的效率和LinkedList差不多,可能ArrayList差一些;
  • 在开始定义的内存大小满之后,会自动扩容1.5倍;开始定义的长度默认是10,具体的扩容方式可以研究一下源码(这里我还没有去看,后面看了会做补充)
    2、LinkedList
  • 不支持同步
  • 以双向链表作为原理实现(关于双向链表可以查看数据结构)
  • 可被当作堆栈、队列和双端队列进行操作
  • 顺序访问高效,随机访问较差;中间插入和删除高效
  • 适用于经常变化的数据
    3、Vector
  • 和ArrayList类似,但适用于多线程,是同步列表
    在这里插入图片描述这是List集合的一个类结构图
    从上图可以看到
    1、都实现了collection接口,Vector和ArrayList是通过实现List接口间接实现的
    2、都是AbstractList的子类
    3、LinkedList没实现RandomAccess,而Vector和ArrayList实现了

二、Set
Set和List都继承了collection,也是一个集合
-确定性:对于任意元素都可以判断是否在集合中
-互异性:互译,不能存放相同的
-无序性
主要实现:
-HashSet:基于散列函数,无序,不支持同步
-TreeSet:基于树结构,可排序,不支持同步
-LinkedHashSet:基于散列函数和双向链表,可排序,不支持同步
需要注意的是:
HashSet的构造函数是new了一个HashMap() ,这里我也提出一个问题,set构造了一个Map来存储元素,是为什么?
在这里插入图片描述
下面分别说一下Set的几个实现类:
1、HashSet

  • 可以为空
  • 不支持同步
    2、LinkedHashSet
  • LinkedHashSet是hashSet的子类
  • 可以为null
  • 不支持同步
    3、TreeSet
  • 不允许有null元素
  • 不支持同步
  • 默认从小到大排序
    注:添加到TreeSet的元素必须实现Comparator
    在这里插入图片描述
    这是Set集合的一个类结构图
    从上图可以看到
    1、HashSet和TreeSet都实现了AbstractSet,LinkedHashSet是HashSet的子类
    2、AbstractSet的父类是AbstractCollection,和AbstractList是一个父类
    3、AbstractSet实现了set,所以HashSet和TreeSet也都实现了set

三、Map:映射
-两个集合之间的元素对应关系
-一个输入对应一个输出
-键值对 k-v
主要实现:
-HashMap:不同步,快,数据量大
-HashTable:同步,慢,数据量小
-Proporties:同步,文件形式,数据量小

关于Map的几个实现:
1、HashMap

  • K-V对,K,V均可为null
  • 不同步,多线程不安全;
  • 无序
    2、HashTable
  • K-V对,K和V都不可以为null
  • 同步,多线程安全
  • 无序,适合小数据量
    3、LinkedHashMap
  • 基于双向链表实现,维持插入顺序
  • 有序
    4、TreeMap
  • 基于红黑树的Map,可以根据key的自然排序或compareTo进行排序
  • 有序
    5、Properties
  • 继承于HashTable
  • 可以将k-v对存放在文件中
  • 适用于数据量少的配置文件
  • load()从文件加载内容;store()写入到文件
  • 获取属性getPropetry();设置属性setPropetry()

Map的类结构图
在这里插入图片描述
基于上述,我大概总结了个类关系图
在这里插入图片描述
可以看出map是和conllection没有关系的。

以上仅为个人总结,难免有些有问题的地方,还请提出,我来改进就好,谢谢阅读。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值