java集合

集合

java集合类主要由两个根接口Collection和Map派生出来的。

Java集合

Collection派生出了三个子接口:

1)List

List代表了有序可重复集合,可直接根据元素的索引来访问。

2)Set

Set代表无序不可重复集合,只能根据元素本身来访问。

3)Queue

Queue是队列集合

Map接口派生:

Map代表的是存储key-value对的集合,可根据元素的key来访问value。

因此Java集合大致也可分成List,Set,Queue,Map四种接口体系。

Java集合List

List代表了有序可重复集合,可直接根据元素的索引来访问。

1.List接口常用的实现类

ArrayList,LinkedList,Vector。

2.List集合特点

1)集合中的元素允许重复

2)集合充电元素是有顺序的,各元素插入的顺序就是各元素的顺序

3)集合中的元素可以通过索引来访问或设置

3.ArrayList

ArrayList是一个动态数组,也是我们最常用的集合,是List类的典型实现。

每一个ArrayList都有一个初始容量(10),该容量戴白哦了数组的大小。

随着元素增多,在每次添加元素的同时都会进行容量检查,当快溢出时,就会进行扩容操作。所以开始时最好指定一个初始容量值,避免过多的进行扩容操作,浪费时间效率。

4.Vector

与ArrayList相似,但是Vector是同步的,ArrayList是非同步的。

5.LinkedList

LinkedList是采用双向循环链表实现的,LinkedList是List接口的另一个实现,除了可以根据索引访问集合元素外,LinkedList还实现了Deque接口,可以当作双端队列来使用,也就是说,既可以当作栈使用,又可以当作队列使用。

Java List总结

1)ArrayList

优点:底层数据结构是数组,查询快,效率高。

缺点:线程不安全,增删慢。

2)Vector

优点:底层数据结构是数组,查询快,线程安全。

缺点:增删慢,效率低。

3)LinkedList

优点:底层数据结构是链表,增删快,效率高。

缺点:查询慢,线程不安全。

Java集合Set

Set扩展Collection接口,无序集合,不允许存放重复的元素。

Set接口常用的实现类有:HashSet,LinkedHashSet,TreeSet

HashSet

HashSet是Set类集合最常用实现类,是其经典实现。

HashSet底层数据结构采用哈希表实现,元素无序且唯一,线程不安全,效率高。

LinkedHashSet

底层数据结构采用链表和哈希表共同实现,链表保证元素的顺序与储存顺序一致,哈希表保证了元素的唯一性。

TreeSet

底层数据结构采用了二叉树来实现,元素唯一且已经排好序,而二叉树结构保证了元素的有序性。

Jave Set总结

1)HashSet

底层其实是包装了一个HashMap实现的,底层数据结构是数组+链表 + 红黑树,具有比较好的读取和查找性能, 可以有null 值,通过equals和HashCode来判断两个元素是否相等,非线程安全。 2)LinkedHashSet

继承HashSet,本质是LinkedHashMap实现,底层数据结构由哈希表(是一个元素为链表的数组)和双向链表组成。有序的,根据HashCode的值来决定元素的存储位置,同时使用一个链表来维护元素的插入顺序,非线程安全,可以有null 值。 3)TreeSet

是一种排序的Set集合,实现了SortedSet接口,底层是用TreeMap实现的,本质上是一个红黑树原理 排序分两种:自然排序(存储元素实现Comparable接口)和定制排序(创建TreeSet时,传递一个自己实现的Comparator对象) 正常情况下不能有null值,可以重写Comparable接口 局可以有null值了。

Java集合Queue

队列是数据结构在比较重要的一种类型,它支持FIFO,尾部添加,头部删除(先进队列的元素先出队列)。

PriorityQueue

PriorityQueue保存队列元素的顺序并不是按照加入的顺序,而是按照队列元素的大小进行排序的。PriorityQueue不允许插入null元素。

Deque

Duque接口是Queue接口的子接口,它代表一个双端队列,当程序中余姚使用栈的时候,推荐使用ArrayDeque。

Java集合Map

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

1.HashMap

Map接口基于哈希表的实现,是使用频率最高的用于键值对处理的数据类型。

它根据key的hashCode值存储数据,大多数情况下可以直接定位到它的值,特点是访问速度快,遍历顺序不确定,线程不安全。

2.Hashtable

Hashtable与HashMap从存储结构和实现来讲有许多相似之处,不同的是它的线程是安全的。

3.LinkedHashMap

LinkedHashMap继承了HashMap,是Map接口的哈希表和链接列表实现,它维护着一个双重链接列表,此链接列表定义了迭代顺序,该迭代顺序可以是插入顺序或者是访问顺序。

4.TreeMap

TreeMap能够把它保存到记录根据key排序,默认是按key值的升序排序。

5.总结

实现类数据结构是否线程安全key是否可以为null是否有序
HashMap数组+链表+红黑树
Hashtable数组+链表
LinkedHashMap数组+链表+红黑树+双重链接列表
TreeMap红黑树
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值