首页 > 编程语言 > 详细

java-集合学习-底层实现

时间:2019-07-08 20:57:57      阅读:116      评论:0      收藏:0      [点我收藏+]

 Collection类关系图

技术分享图片

 

 

 

单向链表

由若干个节点组成,每个节点除了数据域之外还保存一个指向下个节点的指针域。

优点:

插入/删除元素时,不需要像数组一样还得扩容、复制/移动元素,只需要修改一下next指针域即可。

缺点:

访问时,总是从第一个结点依次向后访问,只能向后访问,不能向前访问。

 

双向链表

LinkedList底层采用双向链表

使用LinkedList模拟栈结构。栈结构特点:后进先出。

Push()

Pop()

 

使用LinkedList,模拟队列。队列:先进先出。

Offer()

Poll();

 

HashSet

底层是HashMap

 

 

TreeSet

可以对元素排序,要求元素必须是可以比较的。

TreeSet是先选择Comparator,没有Comparator再选择

Comparable。

TreeSet的底层是TreeMap

 

TreeSet如果比较两个元素相同,只能存在一个。

要非常注意,比较方法。TreeSet集合根据Comparator/Comparable的比较结果是否为0,来判断元素是否为同一个元素的。

==================================

3.5 Collection小结

Collection单个存储

基本操作:

add(o),   remove(o),  contains(o),  size(), 

iterator()  ?  hasNext(),  next(), remove()

----List 

特点:

有序,存储顺序与添加顺序一样

可重复,可以存储重复的数据

为每个元素指定一个索引值

新增的操作:

add(inex, o ), remove(index), get(index), set(index, newValue)

sort(Comparator)

--------ArrayList

底层是数组, 访问快,添加删除慢

初始化容量:10

扩容: 1.5 倍

--------Vector

底层是数组,  它是线程安全的, ArrayList不是线程安全的

初始化容量: 10

扩容: 2倍

--------LinkedList

底层是双向链表, 添加/删除效率高,访问慢

新增的操作:

addFirst(o) / addLast(o)removeFirst()/removeLast()

getFirst()/getLast()

push(o)/pop()

offer(o)/poll()

*******应用场景***************************************************

存储可以重复的数据选择List集合

如果以查询访问为主,选择ArrayList

如果频繁的进行添加/删除操作,选LinkedList

如果开发多线程程序,选择juc包中的CopyOnWriterArrayList

-------注意------------------------------------------------------------------------------------------------

List集合,在contains(o), remove(o)操作时,需要比较元素,调用equals()方法

如果在List存储自定义类型数据,需要重写equals()/hashCode()

 

----Set

特点:

无序:存储顺序与添加顺序可能不一样

不可重复,存储的数据不允许重复

--------HashSet

底层是HashMap

向HashSet添加元素就是把该元素作为键添加到底层的HashMap中

HashSet就是HashMap键的集合

--------TreeSet

TreeSet实现了SortedSet接口,可以对元素自然排序,要求元素必须 是可比较的

(1)在构造方法中指定Comaparator比较器

(2)没有Comaprator,需要让元素的类实现Comaparable接口

TreeSet是先选择Comparator,在没有Comparator的情况下,再选择Comparable

TreeSet底层是TreeMap

向TreeSet添加元素就是把该元素作为键添加到底层的TreeMap中

TreeSet就是TreeMap键的集合

******应用场景*******************************************************

如果存储不重复的元素使用Set集合

如果不需要排序就使用HashSet

如果需要排序就选择TreeSet

-----注意--------------------------------------------------------------------------------------------------

HashSet中的元素需要重写equals()/hashCode()方法

TreeSet集合中判断是否相同的元素, 根据Comparator/Comparable比较结果是否为0来判断

 ===========================================

Map是以键值对存储数据

技术分享图片

 

java-集合学习-底层实现

原文:https://www.cnblogs.com/Tpf386/p/11153728.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!