集合

JDK8 java集合关系图

这里写图片描述

Iterator

遍历集合的接口,接口中声明了如下方法:

  • hasNext():判断集合是否遍历完毕,如果没有,返回true;
  • next():返回下一个元素;
  • remove():从集合中删除由next()返回的元素

Collection

java中除了Map接口,其余的三个集合List、Set、Queue都继承了Collection接口。这些接口都定义在java.util包下。
Collection接口的iterator()和toArray()方法都用于返回集合中的所有元素,前者返回一个Iterator对象,后者返回一个数组。

List

List的主要特征是元素以线性方式存储,集合中的元素是有序、可重复的。从上图可以看到,List有两个实现类:

  • ArrayList:ArrayList代表长度可变的数组,能够快速对数组进行随机访问,但插入和删除元素速度较慢。
  • LinkedList:在实现中采用链式数据结构。对顺序访问进行了优化,向LinkedList中添加和删除元素的速度较快,随机访问的速度较慢。

Set

Set不保存重复的元素,并且是无序的。

  • HashSet:为快速查找而设计的Set。存入HashSet的元素必须重写hashCode()方法。HashSet中的元素没有顺序可循,这是由于处于速度原因的考虑,HashSet使用了散列;
  • TreeSet:实现了SortedSet接口,保持次序的Set,元素必须实现Comparable接口。TreeSet将元素存储在红黑树的数据结构中;
  • LinkedHashSet:继承了HashSet,具有HashSet的查找速度,也使用了散列(哈希表)来存储元素,但LinkedHashSet使用了链表来维护元素的插入顺序,元素也必须重写hashCode()方法。

Map

Map是一种把键对象和对象进行映射的集合,键是唯一的,而值对象仍可以是Map类型,依次类推就形成了多级映射。

  • HashMap:Map基于哈希表的实现,插入和查询键值对的开销是固定的,HashMap不是线程安全的,HashMap最多只允许一条记录的键为null;允许多条记录的值为 null;
  • HashTable:HashTable是线程安全的,不允许键值为null;
  • TreeMap:实现了SortedMap接口,基于红黑树的实现,具有排序功能的Map;
  • LinkedHashMap:内部使用双向链表保证了数据插入的顺序;遍历LinkedHashMap时,可以选择插入顺序遍历,也可以按照LRU(最近最少使用)的次序遍历;
  • ConcurrentHashMap:线程安全的HashMap,比HashTable性能更好,替代了HashTable

HashSet和HashMap的负载因子

HashSet和HashMap都使用哈希算法来存取元素,哈希表中的每个位置也被称为桶(bucket),在发成哈希冲突的时候,在桶中以链式的形式存放多个元素。
这里写图片描述

HashSet和HashMap都具有以下属性:

  • 容量(capacity):哈希表中桶的数量,上图一共6个桶,容量为6;
  • 初始容量(initial capacity):可以在创建HashSet和HashMap的构造方法中传入;
  • 大小(size):元素的数目
  • 负载因子:等于size/capacity;负载因子为0,表示空的哈希表。轻负载的哈希表具有冲突少、适合插入和查找的优点,但是遍历元素较慢;如果负载因子较高,虽然会降低对内存空间的要求,但会缩短查找数据的时间,因为查找的时候也是根据hashCode先找桶,再在桶里找数据。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值