0
点赞
收藏
分享

微信扫一扫

Java集合的知识点(一)

深夜瞎琢磨 2022-02-26 阅读 51

Java中的集合也叫做容器,主要由两大接口派生出来,第一个是接口是Collection,主要存放单一的元素,又叫做单列集合,另一个接口是Map接口,主要是用来存放键值对,又被称为双列集合。

Collection的子接口有List接口和Set接口以及Queue接口。

论List,Set,Queue,Map这四个接口的区别:

首先List(有序可重复):List接口的实现类集合存储的元素都是有序可重复的。

其次Set(无序不可重复): Set接口的实现类集合存储的元素都是无序不可重复的。

然后Queue(实现排队功能):按照特定的排队规则来确定先后顺序,存储的元素是有序可重复的。

最后Map(用唯一的Key去寻找指定的Value):该这就的实现类存储时,使用的是键值对(Key,Value)存储,存储的Key是无序的不可重复的,Value是无序可重复的。Key和Value是一一对应的。

List的常用实现类:

ArrayList,Vector,LinkedList。

ArrayList类集合内部存储数据的数据结构是数组,更适合于对元素遍历和查询,但对于元素的增删相对于LinkedList慢,不是线程安全的。

Vector类集合内部存储数据的数据结构也是数组,其中的大部分方法都是使用了synchronized修饰符,更适合对元素遍历和查找,是线程安全的。

LinkedList类集合内部村塾数据的数据结构是链表结构,更方便元素的增加和删除,但对元素的遍历和查询相对于ArrayList来说较慢。

List接口实现类用法的选择总结:

如果更多的是遍历和查询元素,更建议选择ArrayList集合,如果更多的是增加和删除元素,更建议选择LinkedList集合。

Set接口的常用实现类:

HashSet,TreeSet,LinkedHashSet。

HashSet:因为Set接口实现类集合存储的元素都是无序不可重复的,所以对集合中元素的遍历可以采用迭代器,增强for循环等。HashSet是基于HashMap实现的,底层采用的是HashMap来保存元素的。HashSet存储元素是通过存储对象的哈希值来确定元素在集合中具体的存储位置,因此具有良好的查找性能和存储性能,HashSet保证元素唯一性的方式以来的是hashCode()方法和equals()方法,因此可以保证存储的元素是不可重复的。

TreeSet:TreeSet集合类存储的元素是有序无重复的,其内部是由TreeMap实现的,采用的是红黑树(自平衡的排序二叉树)。

LinkedHashSet:该集合类的特点是存储的元素是有序无重复的,该类内部是链表加哈希值的相组合的一个数据结构。LinkedHashSet是HashSet的子类,其内部是通过LinkedHashMap来实现的。

Map接口的常见实现类:

HashMap,LinkedHashMap,Hashtable,TreeMap。

HashMap:HashMap在JDK1.8之前是由数组加链表组成的,数组是HashMap的主体,链表则主要是为了解决哈希冲突来存在的。JDK1.8版本以后,在解决哈希冲突有了更好的办法,

LinkedHashMap:当链表长度大于阈值(默认值是8)时,会将链表转换成红黑树(将链表转换成红黑树前会进行判断,如果当前数组的长度小于64,那么会选择先进行数组扩容,而不是直接转换成红黑树),已减少搜索的时间。

LinkedHashMap:LinkedHashMap继承自HashMap,其底层仍然用的是基于数组加链表组成(散列表结构)加红黑树组成,另外,LinkedHashMap在此基础上,增加了一条双向链表,使得上面的结构可以保证键值对的插入顺序,实现了顺序访问的相关逻辑。

Hashtable:采用的是数组加链表的数据结构,数组是Hashtable的主体,链表则是为了更好的解决哈希冲突而产生。

TreeMap:采用的是红黑树(自平衡的排序二叉树)。

举报

相关推荐

0 条评论