java集合类构造及原理

Java集合主要分为Collection和Map两个接口;Collection又分别被List和Set继承;List被AbstractList实现,然后分为3个子类,ArrayList,LinkList和VectorList;Set被AbstractSet实现,又分为2个子类,HashSet和TreeSet;Map被AbstractMap实现,又分为2个子类,HashMap和TreeMap;Map被Hashtable实现。

在这里插入图片描述

ArrayList和LinkedList、Vector的区别

ArrayList和LinkedList的区别:

(1)相同点:

LinkedeList和ArrayList都实现了List接口。
ArrayList和LinkedList是两个集合类,用于存储一系列的对象引用(references)。
(2)不同点:

ArrayList底层的实现数组,而LinkedList是双向链表。
ArrayList进行随机访问所消耗的时间是固定的,因此随机访问时效率比较高。
LinkedList是不支持快速的随机访问的,但是在插入删除时效率比较高。

ArrayList和Vector的区别:

(1)相同点:

ArrayList和Vector都是用数组实现的。
默认初始化大小都是10
(2)不同点

Vector多线程是安全的,而ArrayList不是。Vector类中的方法很多有synchronized进行修饰,这样就导致了Vector在效率上无法与ArrayList相比;
两个都是采用的线性连续空间存储元素,但是当空间不足的时候,两个类的增加方式是不同的。(ArrayList每次存储时会检查空间大小,不够时会扩充为原来的1.5倍,Vector会扩充为原来空间的2倍)
原文
https://blog.csdn.net/glpghz/article/details/107581333

HashSet和TreeSet的区别

相同点:单例集合,数据不可重复

不同点1:底层使用的储存数据结构不同:


  1,Hashset底层使用的是HashMap哈希表结构储存
   2,而Treeset底层用的是TreeMap树结构储存。



不同点2:储存的数据保存唯一方式不用。


   1,Hashset是通过复写hashCode()方法和equals()方法来保证的。
   2,而Treeset是通过Compareable接口的compareto方法来保证的。

不同点3:

    hashset无序   Treeset有序

储存原理:

hashset:底层数据结构是哈希表,本质就是哈希值储存。通过判断元素的hashcode方法和equals方法来保证元素的唯一性。当哈希值不同时就直接进行储存。
如果相同,会判断一次equals方式是否返回为true ,如果是true 则视为用的同一个元素,不用再储存。  如果是false,这俄格相同哈希值不同内容的元素会放在同一个桶里(
当哈希表中有一个桶结构,每一个捅都有一个哈希值)


Treeset:底层数据结构式一个二叉树,可以对set集合中的元素进行排序,这种结构,可以提高排序性能。根据比较方法的返回值决定的,只要返回的是0,就代表元素重复。

原文
https://blog.csdn.net/qq_42216184/article/details/84026603

HashMap 和 TreeMap 的区别:

原文
https://blog.csdn.net/weixin_43281498/article/details/123434620

Java中的List、Set和Map的各自特征及使用场景:

Java中的集合分为单列集合Collection和双列集合Map。
先通过这张图看看Collection和Map的各自体系。
在这里插入图片描述
首先看单列集合Collection中的List及Set的各自特征。
List(有序,可重复)
ArrayList
底层数据结构是数组,查询快,增删慢
线程不安全,效率高
Vector
底层数据结构是数组,查询快,增删慢
线程安全,效率低
LinkedList
底层数据结构是链表,查询慢,增删快
线程不安全,效率高
Set(无序,唯一)
HashSet
底层数据结构是哈希表。
LinkedHashSet
底层数据结构由链表和哈希表组成。
由链表保证元素有序。
由哈希表保证元素唯一。
TreeSet
底层数据结构是红黑树。(是一种自平衡的二叉树)
根据比较的返回值是否是0来决定保证元素唯一性
两种排序方式
自然排序(元素具备比较性)
让元素所属的类实现Comparable接口
比较器排序(集合具备比较性)
让集合接收一个Comparator的实现类对象

接下来是双列集合Map的特征
Map(双列集合)
注:Map集合的数据结构仅仅针对键有效,与值无关。存储的是键值对形式的元素,键唯一,值可重复。
HashMap
底层数据结构是哈希表。线程不安全,效率高
哈希表依赖两个方法:hashCode()和equals()
执行顺序:
首先判断hashCode()值是否相同
是:继续执行equals(),看其返回值
是true:说明元素重复,不添加
是false:就直接添加到集合
否:就直接添加到集合
最终:
自动生成hashCode()和equals()即可
LinkedHashMap
底层数据结构由链表和哈希表组成。
由链表保证元素有序。
由哈希表保证元素唯一。
Hashtable
底层数据结构是哈希表。线程安全,效率低
哈希表依赖两个方法:hashCode()和equals()
执行顺序:
首先判断hashCode()值是否相同
是:继续执行equals(),看其返回值
是true:说明元素重复,不添加
是false:就直接添加到集合
否:就直接添加到集合
最终:
自动生成hashCode()和equals()即可
TreeMap
底层数据结构是红黑树。(是一种自平衡的二叉树)
根据比较的返回值是否是0来决定保证元素唯一性
两种排序方式
自然排序(元素具备比较性)
让元素所属的类实现Comparable接口
比较器排序(集合具备比较性)
让集合接收一个Comparator的实现类对象

那么到底什么时候需要用什么样的集合呢?
画一张图总结下
在这里插入图片描述
原文:
https://blog.csdn.net/codest/article/details/120093254

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值