JAVA常用数据集合分析


概述

主要介绍和对比JAVA常用的数据集合

常用数据集合

List结构的集合类:ArrayList类,LinkedList类,Vector类,Stack类

Map结构的集合类:HashMap类,Hashtable类

Set结构的集合类:HashSet类,TreeSet类

Queue结构的集合:Queue接口

集合对比以及使用

1)如果要求线程安全,使用Vector,Hashtable

2)如果不要求线程安全,使用ArrayList,LinkedList,HashMap

3)如果要求键值对,则使用HashMap,Hashtable

4)如果数据量很大,又要求线程安全考虑Vector

集合说明

1.ArrayList: 元素单个,效率高,多用于查询

2.Vector: 元素单个,线程安全,多用于查询

3.LinkedList:元素单个,多用于插入和删除

4.HashMap: 元素成对,元素可为空

5.HashTable: 元素成对,线程安全,元素不可为空

ArrayList

ArrayList底层是Object数组,所以ArrayList具有数组的查询速度快的优点以及增删速度慢的缺点。

LinkedList的底层是一种双向循环链表。在此链表上每一个数据节点都由三部分组成:前指针(指向前面的节点的位置<<<)数据,后指针(指向后面的节点的位置>>>)数据,最后一个节点的后指针指向第一个节点的前指针,形成一个循环。

双向循环链表的查询效率低但是增删效率高。

LinkedList

经常用在增删操作较多而查询操作很少的情况下:队列和堆栈,比如消息队列等, 在JAVA1.5后,collection使用queue来实现队列。

队列:先进先出的数据结构。>>> IN …>>> OUT

栈:后进先出的数据结构。 >>> IN …<<< OUT

使用栈的时候一定不能提供方法让不是最后一个元素的元素获得出栈的机会。

Vector

与ArrayList相似,区别是Vector是重量级的组件,使用使消耗的资源比较多,且Vector是线程安全的.

HashSet(hashMap单独一篇介绍)

hashSet的底层是数组,其查询效率非常高。而且在增加和删除的时候由于运用的hashCode的比较开确定添加元素的位置,所以不存在元素的偏移,所以效率也非常高。因为hashSet查询和删除和增加元素的效率都非常高。

但是hashSet增删的高效率是通过花费大量的空间换来的:因为空间越大,取余数相同的情况就越小,HashSet这种算法会建立许多无用的空间,造成空间的浪费.

使用hashSet类时要注意,如果发生冲突,就会出现遍历整个数组的情况,这样就使得效率非常的低。

如将自定义类用hashSet来添加对象,一定要覆盖hashcode()和equals(),覆盖的原则是保证当两个对象hashcode返回相同的整数,而且equals()返回值为True。

如果没有设定equals(),就会造成返回hashCode虽然结果相同,但在程序执行的过程中会多次地调用equals(),从而影响程序执行的效率。

TreeSet

Java中的TreeSet是Set的一个子类,TreeSet集合是用来对象元素进行排序的,同样他也可以保证元素的唯一。

可以按照任何顺序将元素插入该集合,当对该集合进行迭代时,各个值将自动以排序后的顺序出现。TreeSet中的元素按照升序排列,缺省是按照自然顺序进行排序,意味着TreeSet中的元素要实现Comparable接口,或者有一个自定义的比较器Comparator。

TreeSet底层使用的是TreeMap,TreeMap的底层实现是红黑树.

总结

了解到各个集合的特性,才能在使用的时候游刃有余。

一盏灯, 一片昏黄; 一简书, 一杯淡茶。 守着那一份淡定, 品读属于自己的寂寞。 保持淡定, 才能欣赏到最美丽的风景! 保持淡定, 人生从此不再寂寞。



   Reprint policy


《JAVA常用数据集合分析》 by jackromer is licensed under a Creative Commons Attribution 4.0 International License
 Previous
DOCKER常用命令 DOCKER常用命令
概述 主要介绍docker中常用的一些命令 常用命令 docker build -t xxxx:1.0.0 . //docker 打包镜像,最后的“ .”必须要 docker push xxxx:1.0.0 //doc
2019-08-27
Next 
JAVA使用枚举实现单例模式 JAVA使用枚举实现单例模式
概述 本文主要介绍使用Enum实现JAVA单例,以及其单例模式的使用。 单例模式 单例模式(Singleton Pattern)是 Java 中最简单的设计模式之一。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。
2019-08-27
  目录