06_集合间的差异及如何选择

集合:

基本的使用方法查询API即可,主要说说差异。

List:有索引,集合有序,怎么插入的,就按照什么顺序取出,且允许包含重复元素。

ArrayList:
​		底层数据结构是数组,查询快,增删慢。
​		线程不安全,效率高。
​	Vector: 
​		底层数据结构是数组,查询快,增删慢。
​		线程安全,效率低。

​	LinkedList:
​		底层数据结构是链表,查询慢,增删快。
​		线程不安全,效率高。
在选择时,如果需要线程安全,就选择Vector,因为它线程同步。

​		   如果不考虑同步问题,再看主要是进行查询操作还是进行增删操作,如果查询更多,就选择ArrayList,如果增删更多,就选用LinkedList

Set:不包含重复元素

​ HashSet:底层数据结构时哈希表。对集合的迭代顺序不做保证, HashSet 不是线程安全的 集合元素可以是 null。

​ TreeSet:元素唯一,并且可以对元素进行排序

​ 排序:
​ a: 自然排序
​ b: 使用比较器排序
​ 到底使用的是哪一种的排序取决于,构造方法.

     使用TreeSet集合进行元素的自然排序,那么对元素有要求,
     要求这个元素 必须实现Comparable接口 否则无法进行自然排序
     
     保证元素的唯一性是靠compareTo方法的返回值来确定如果返回0 表示两个元素相等
		则不重复存储
		
	A:画图演示:	TreeSet保证元素唯一和自然排序的原理和图解
               二叉树的数据结构 先存入一个树根 分两个叉
	存储元素时 跟树根比较 小的放在左边 大的放在右边
	如果相等就不存储
	取的时候按照 左中右的顺序来取
      

​ LinkedHashSet:有序且元素唯一

​ 数据结构有两个: 链表和哈希表,链表保证有序 哈希表保证元素唯一

相对HashSet,TreeSet的优势是有序,劣势是相对读取慢。根据不同的场景选择不同的集合。而LinkedHashSet则是可以对去重后的结果进行预测性的顺序保障。

泛型(Generic):泛型日记

可变参数
增强for循环

双链集合

Map:存储键值对的集合。

HashMap:基于哈希表的Map接口。不保证迭代顺序,不是同步的。允许null值,但是允许一次。

​	两个影响其性能的参数:初始容量和负载因子。

​		初始容量:容量是哈希表中的桶数,初始容量是创建哈希表时的容量。

​		负载因子:指容量自动增加之前允许哈希表得到满足的度量。

​	当哈希表中的条目数超过负载因子和当前容量的乘积时,重新排列哈希表(即内部数据结构重新构建),以使散列表具有大约两倍的桶数。

TreeMap:基于红黑树的Map实现。对元素进行排序。

Hashtable:与HaShMap基本类似,不允许null出现,无论是作为键还是作为值。支持线程同步。

LinkedHashMap:哈希表和链表实现的Map接口,具有可预测的迭代顺序。

​ 底层的数据结构是链表和哈希表 元素有序 并且唯一

​ 元素的有序性由链表数据结构保证 唯一性由 哈希表数据结构保证

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值