Java中常用的集合类

集合概述

什么是集合?集合有什么用? 数组其实就是一个集合。集合实际上就是一个容器,可以用来容纳其它类型的数据。
集合不能直接存储基本数据类型,另外集合也不能直接存储java对象,集合当中存储的都是java对象的内存地址。(或者说是集合中存储的是引用)
例如:list.add(64);// 自动装箱 Integer

集合在java中本身是一个容器,是一个对象。
集合在任何时候都是“引用”。

所有的集合类和集合接口都在java.util包下
在java中集合分为两大类:

一类是单个方式存储元素,这一类集合中超级父接口:java.util.Collection;

另一类是以键值对 的方式存储元素,这一类集合的超级父接口:java.util.Map;

java集合框架图

Collection接口的集合

List集合

List元素特点:有序可重复,存储的元素有下标。有序的意思是存进去是这个顺序,取出来还是这个顺序。有序是因为list集合都有下标(从0开始)

常用的有3个实现类:

ArrayList集合底层采用了数组这种数据结构,它是非线程安全的。
数组初始容量是10,每次扩容都是以1.5倍增长(例如:初始容量为10,存第11个元素时数组最大容量变为15)

LinkedList集合底层采用了双向链表数据结构

Vector集合底层采用了数组结构, Vector的所有方法都有synchronize关键字修饰,所以线程安全,但是效率较低,现在保证线程安全有其他方案,所以vector使用较少了。Vector数组容量也是10。

Set集合

List元素特点:无序不可重复。无序的意思是存进去是这个顺序,取出来就不一定是这个顺序了。

常用的有2个实现类:

HashSet集合底层实际上new了一个HashMap,向HashSet集合中存储元素实际上就是存储到了HashMap当中。HashMap集合是一个哈希表数据结构。

TreeSet集合继承了SortedSet接口,它的底层也是new了一个TreeMap。TreeMap集合采用了二叉树数据结构。

SortedSet集合的特点:由于继承了Set集合,所以它的特点也是无序不可重复,但是放在SortedSet集合中的元素可以自动排序,我们称为可排序集合。

Map接口的集合

  1. Map集合和Collection集合没有关系
  2. Map集合以key和value这种键值对的方式存储元素
  3. key和value都是存储java对象的内存地址
  4. 所有Map集合的key特点:无序不可重复
  5. Map集合的key和Set集合元素的特点一样
    (如图,往HashSet集合添加元素其实就是存到了map集合的key部分)
    在这里插入图片描述

Map集合有3个常用的实现类:

HashMap:HashMap底层是哈希表表数据结构,是非线程安全的。在JDK8之后,如果哈希表单向链表中的元素个数超过8个,那么单向链表会变成红黑树数据结构。当红黑树上节点数量少于6个时,会重新把红黑树变成单链表数据结构,这种方式是为了提高检索的效率,二叉树会再次缩小检索范围,提高效率。初始化容量是16,默认加载因子是0.75;扩容是扩容之后的容量是原容量的2倍。HashMap集合的key和value可以为null。

Hashtable:Hashtable集合底层也是哈希表数据结构,是线程安全的,其中所有的方法都带有synchronized关键字,效率较低,现在控制线程安全有其他的方案了,使用较少。Hashtable集合的key和value不允许为null,会报空指针异常,Hashtable集合的初始化容量是11,默认加载因子是0.75 ;扩容是:原容量 *2 + 1。

TreeMap:继承了SortedMap接口,底层的数据结构是一个二叉树,因为SortedMap中的元素会自动排序,所以TreeMap也是可排序集合。

总结

ArrayList:底层是数组
LinkedList:底层是双向链表
Vector:底层是数组,线程安全,效率较低,使用较少
HashSet:底层是HashMap,放到HashSet集合中的元素等同于放到HashMap集合的key部分了
TreeSet:底层是TreeMap,放到TreeSet集合中的元素等同于放到HashMap集合的key部分了
HashMap:底层是哈希表
Hashtable:底层也是哈希表,只不过线程安全的,效率较低,使用较少
Properties:是线程安全的,并且key和value只能存储字符串String
TreeMap:底层是二叉树。TreeMap集合的key可以按照大小顺序自动排序

  • List集合存储元素特点
    有序可重复
    有序:存进去顺序和取出来的顺序相同,每一个元素都有下标。
    可重复:存进去1,可以再存一个1

  • Set集合存储元素特点
    无序不可重复
    无序:存进去顺序和取出来的顺序不一定相同
    不可重复:存进去1,不能再存一个1了

  • SortedSet(SortedMap)集合存储元素特点
    首先是无序不可重复的,但是集合中的元素是可排序的
    无序:存进去顺序和取出来的顺序不一定相同。另外Set集合中的元素没有下标。
    不可重复:存进去1,不能再存一个1了
    可排序:可以按照大小顺序排列

-------------------------------------分割线-------------------------------------------

//非线程安全的
List myList = new ArrayList();

//变成线程安全的
Collections.synchronizedList(myList);

//myList集合就是线程安全的了
myList.add("111");
myList.add("222");

版权声明:本文为weixin_43721056原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。