首页 > 编程语言 > 详细

Java集合框架

时间:2021-08-09 23:08:28      阅读:24      评论:0      收藏:0      [点我收藏+]

# [Java 集合框架](https://www.pdai.tech/md/java/collection/java-collection-all.html)

## 1.关于容器

容器就是可以容纳其他Java对象的对象,*Java Collections Framework(JCF)* 提供了通用的容器

优点是:

降低编程难度和学习难度,提高程序性能

增加程序的重用性

提高API之间的互操作性

Java容器中只能放对象,对于基本类型要把其包装成对象(包装类)才能放到容器里

> **容器主要包括 Collection 和 Map 两种,Collection 存储着对象的集合,而 Map 存储着键值对(两个对象)的映射表。**

## 2.Collection

### Set:无序,唯一

Set继承Collection接口,是一个不允许出现重复元素,并且无序的集合,主要有TreeSet和HashSet。

在判断重复元素时,Set集合会调用hashCode()和equal方法实现。

#### TreeSet

基于红黑树实现,每一个元素都是树中的一个节点,插入的元素都会进行排序。查找效率不如HashSet,HashSet查找时间复杂度为O(1),

TreeSet查找时间复杂度为O(logN)。

#### HashSet

哈希表结构,支持快速查找。主要利用HashMap的key来存储元素,计算插入元素的hashCode来获取元素在集合中的位置。失去了元素的插入顺序信息,也就是说使用 Iterator 遍历 HashSet 得到的结果是不确定的

HashSet底层由HashMap实现,插入元素被当作是HashMap的key,根据hashCode值来确定集合中的位置,由于Set集合中并没有下标的概念,所以并没有像List一样提供get()方法。**当获取HashSet中某个元素时,只能通过遍历集合的方式进行equals()比较来实现**。

> **如果你知道是Set,但是不知道是哪个Set,就用HashSet。**

##### LinkedHashSet

具有HashSet的查找效率,且内部使用双向链表维护元素的插入顺序

### List:有序,可重复

#### ArrayList

基于动态数组实现,支持随机访问。

查询快,增删慢;线程不安全,效率高

> **如果你知道是List,但是不知道是哪个List,就用ArrayList。**

#### Vector

和ArrayList类似,但他是线程安全的,效率低

#### LinkedList

基于双向链表实现,只能顺序访问,但是可以快速地在链表中插入和删除元素。不仅如此,LinkedList还可以用作栈,队列和双向队列。

查询慢,增删快;线程不安全,效率高

## 3.Map

Map接口有三个比较重要的实现类,分别是HashMap、TreeMap和HashTable

### TreeMap

基于红黑树实现,有序

### HashMap

基于哈希表实现,线程不安全,效率高。如果对同步性或与遗留代码的兼容性没有任何要求,建议使用HashMap

HashMap允许null值(key和value都允许)

现在可以使用 ConcurrentHashMap 来支持线程安全,并且 ConcurrentHashMap 的效率会更高,因为 ConcurrentHashMap 引入了分段锁

### HashTable

和HashMap类似,但他是线程安全的,Hashtable不允许null值

# 问题分析

## (一) TreeSet,LinkedHashSet和HashSet的区别

**相同点**:都实现Set接口,三者都不是线程安全的,如果要使用线程安全可以使用Collection.synchronizedSet()

**不同点**:HashSet插入数据最快,其次是LinkedHashSet,最慢的是TreeSet因为内部实现排序

? HashSet不保证有序,LinkedHashSet保证FIFO即按插入顺序排序,TreeSet按照内部规则排序,也可自定义排序规则

? HashSet和LinkedHashSet允许存在null数据,但TreeSet中插入null数据时会报NullPointerException

 

Java集合框架

原文:https://www.cnblogs.com/sixdog/p/15120246.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!