Java常用集合类概述

前言:集合类是什么呢?


简单来说,集合类就是一个存放数据对象引用的容器;
  • 集合类是定义在Java.util包下的一组接口和实现类;
  • 集合类型主要有3种:set(集)、list(列表)、map(映射);
  • 集合类中存放的都是对象的引用,而非对象本身;

在这里插入图片描述在这里插入图片描述

集合类的分类

set

特点:

  • 属于单列集合,不允许包含重复元素;
  • 判断元素重复的标准为对象的equals方法,存在时返回false,不存在时返回true;
  • 元素的排序规则,由相应的实现类决定,分为无序、元素大小排序、写入顺序排序;
名称类型线程同步描述
Set接口同步继承了Collection接口
SortedSet接口同步继承了set接口
HashSet实现类不同步实现了Set、Cloneable、Serializable接口
TreeSet实现类不同步实现了SortedSet、Cloneable、Serializable接口

HashSet

特点:

  • 实现了Set接口,看源码可以发现HashSet是一个HashMap实例;
  • HashSet不保证集合内的元素有序,允许null元素存在;
  • HashSet中保存的元素以键值对形式保存;

TreeSet

特点:

  • TreeSet 中的元素有序的,排序规则遵照元素本身的大小进行排序,元素不能重复;
  • TreeSet中保存的元素以键值对形式保存;

List

特点:

  • List 集合属于单列、有序的、允许元素重复、可以为 null 的集合;
  • List 接口的实现类主要有三种:ArrayList、LinkedList、Vector;
名称类型线程同步描述
List接口同步实现了Collection接口
ArrayList实现类不同步继承了AbstractList类,实现了List、Cloneable、Serializable接口
LinkedList实现类不同步继承了AbstractList类,实现了List、Deque、Cloneable、Serializable接口
Vector实现类同步继承了AbstractList类,实现了List、Cloneable、Serializable接口

ArrayList

特点:

  • 继承了AbstractList抽象类,实现了List接口,底层结构是数组;
  • 默认初始化长度为 10,扩容规则为 0.5倍的原容量加1,即一次扩容后的长度为 16;
  • 查询速度快,添加、删除相对于LinkedList较慢,线程不同步(不安全);
### LinkedList 特点:
  • 继承了AbstractList抽象类,实现了list接口,底层结构是链表;
  • 添加、删除速度快,查询相对于ArrayList较慢、线程不同步(不安全);

Vector

特点:

  • 继承了AbstractList抽象类,实现了List接口,底层结构是数组;
  • 默认初始化长度为 10,扩容加载因子为 1,当元素长度大于原容量时进行扩容,默认为 10,一次扩容后容量为 20;
  • 线程安全,但是速度慢;

Stack

特点:

  • 继承了Vector类,元素满足后进先出;

Queue

特点:

  • 实现了Collection接口,元素满足先进先出;

Deque

特点:

  • 继承了Queue接口,是一个双端队列;

PriorityQueue

特点:

  • 实现了Queue接口,是一个基于堆实现的优先级队列;

Map

Map集合最常见的子类也有两个:HashMap、TreeMap;

名称类型线程同步描述
Map接口同步
HashMap实现类不同步实现了Map、Cloneable、Serializable接口
TreeMap实现类不同步实现了SortedMap、Cloneable、Serializable接口接口

HashMap

特点:

  • HashMap实现了 Map接口,底层采用链表或红黑树进行存储;
  • 默认初始化长度为 16,扩容加载因子为 0.75,一旦大于 0.75*16之后,就会调用resize()进行扩容,扩容2倍,即32;
  • 支持克隆、无序,线程不同步,不安全;

TreeMap

特点:

  • TreeMap实现了SortedMap接口;
  • 数据结构基于二叉搜索树(红黑树)实现;
  • 该映射根据其键的自然顺序进行排序,或者根据创建映射时提供的 Comparator 进行排序,具体取决于使用的构造方法;
  • 无初始化长度;
  • 支持克隆、有序,线程不同步,不安全;

总结

  • List,Set都是继承自Collection接口,Map不是;

  • List特点:元素有放入顺序,元素可重复;

  • Set特点:元素无放入顺序,元素不可重复,重复元素会覆盖掉;

    注意:元素虽然无放入顺序,但是元素在set中的位置是由该元素的HashCode决定的,其位置其实是固定的,加入Set 的Object必须定义equals()方法 ;另外list支持for循环,也就是通过下标来遍历,也可以用迭代器;但是set只能用迭代,因为它无序,无法用下标来取得想要的值!!!

  • Set:检索元素效率低,删除和插入效率高,插入和删除不会引起元素位置改变;

  • List:和数组类似,List可以动态增长,查找元素效率高,插入删除元素效率低(会引起其他元素位置改变);

  • Map用于保存具有映射关系的数据,Map里保存着两组数据:key和value,它们都可以使任何引用类型的数据,但key不能重复;

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值