java集合
Posted zenghuilong
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java集合相关的知识,希望对你有一定的参考价值。
Java 集合框架主要包括两种类型的容器:Collection和Map(如下图所示)
一:如上图所示,Collection下有3个常用的子接口分别为Set, List, Queue
1:Set(无序,唯一)
HashSet:
底层数据结构是哈希表。(无序,唯一)
hashSet主要是通用的存储数据集合
LinkedHashSet:
底层数据结构是链表和哈希表。(插入有序,唯一,先进先出)
由链表保证元素有序
由哈希表保证元素唯一
Treeset:
底层数据结构是红黑树。(唯一,有序)
Treeset通常用于排序
三者的相同点:
1:都是实现Set接口
2:三者都不是线程安全的,如果要使用线程安全可以使用Collections.synchronizedSet()
三者的不同的:
1:HashSet插入数据最快,其次LinkHashSet,最慢的是TreeSet因为内部实现排序
2:HashSet不保证有序,LinkHashSet保证FIFO即按插入顺序排序,TreeSet安装内部实现排序,也可以自定义排序规则
3:HashSet和LinkHashSet允许存在null数据,但是TreeSet中插入null 数据时会报NullPointerException
代码演示:
2:List(有序,可重复的)
ArrayList: 底层数据结构是数组实现,查询快,增删慢,轻量级,效率高;(线程不安全)
底层是Object数组,所以ArrayList具有数组的查询速度快的优点以及增删速度慢的缺点。
而在LinkedList的底层是一种双向循环链表。在此链表上每一个数据节点都由三部分组成:前指针(指 向前面的节点的位置),数据,后指针(指 向后面 的节点的位置)。最后一个节点的后指针指向第一个节点的前指 针,形成一个循环。
双向循环链表的查询效率低但是增删效率高。ArrayList和LinkedList在用法上没有区别,但是在功能上还是有区别的。
Vector: 底层数据结构是数组实现,查询快,增删慢。 (线程安全、使用少)
与ArrayList相似,区别是Vector是重量级的组件,使用使消耗的资源比较多。
结论:
在考虑并发的情况下用Vector(保证线程的安全)。
在不考虑并发的情况下用ArrayList(不能保证线程的安全)
LinkedList: 底层数据结构是双向链表实现,增删快,查询慢,效率高 (线程不安全)
LinkedList是采用双向循环链表实现的。
利用LinkedList实现栈(stack)、队列(queue)、双向队列(double-ended queue )。
它具有方法addFirst()、addLast()、getFirst()、getLast()、removeFirst()、removeLast()等。
3:queue
以上是关于java集合的主要内容,如果未能解决你的问题,请参考以下文章