集合概述(全)

概要

主要针对collection和Map这两个接口进行展开

Collection 接口的接口 对象的集合(单列集合)
├——-List 接口:元素按进入先后有序保存,可重复
│—————-├ LinkedList 接口实现类, 链表, 插入删除, 没有同步, 线程不安全
│—————-├ ArrayList 接口实现类, 数组, 随机访问, 没有同步, 线程不安全
└——-Set 接口: 仅接收一次,不可重复,并做内部排序
├—————-└HashSet 使用hash表(数组)存储元素
│————————└ LinkedHashSet 链表维护元素的插入次序
└ —————-TreeSet 底层实现为二叉树,元素排好序

Map 接口 键值对的集合 (双列集合)
├———Hashtable 接口实现类, 同步, 线程安全
├———HashMap 接口实现类 ,没有同步, 线程不安全-
├ ——–TreeMap 红黑树对所有的key进行排序
 

集合实现类的特点

List接口实现类特性:

ArrayList:单例集合,底层是Object数组组成的,所以集合中的每个数据都是有索引的,就体现出查询快的特性。排列都是有序的。

LinkedList:单例集合,底层是通过双向链表组成的,所以不具备索引,查询数据的时候都是需要从头部或者尾部通过指针移动来寻找的,查询相对于ArrayList慢些。但是添加和删除快,因为在删除或者添加的时候,只需要删除或者添加指针即可。排列是有序的。

Set实现类特性:

hashSet:单列集合,底层的数据结构是通过哈希表排列的,所以集合中的元素是无序的,也是唯一的,因为在储存元素的时候,需要计算出该元素的hash值,然后通过hash值去寻找指定位置,如果该位置上有数据,则比较两个元素是否相同,相同不添加,不相同则通过链表的形式挂在该元素下方。其实hashset就是一个hashMap的实例,在key出存储元素,计算出元素的hashcode的值进行存储。jdk8以后每个元素位置上的列表超过8个之后就会变为红黑树进行存储。

TreeSet:特点是有序但是不重复,有序是因为底层重写了比较器,如果是对象,可以实现Comparable重写Comparator方法,对对象进行进行排序即可。其实TreeSet就是创建了一个TreeMap的实例,value可以为空,但是key不为空

LinkedHashSet :底层是通过数组和双向链表的形式存储的,是hashSet的子类,元素是不重复的

Map实现类的特征:

hashMap:双列集合,组成是key-value的形式存储的,key是唯一的,value的值可以重复。jdk8之后,底层数据结构为数组+链表+红黑树。添加元素时key相同则覆盖,不相同则通过链表悬挂,链表的长度达到8之后,就会将链表编程红黑树的形式。

小结

凡是有Tree的集合,都是有序的,凡是有Set的就是不重复的

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值