java集合

List,Set,Map三者的区别?  

  1. List 和set都继承自Collection接口,Map来自map接口
  2. List储存数据是有序可重复的,Set是无序不可重复的
  3. Map是一个键值对的集合,储存的键与值相互映射 键值是不可重复的,其结构为hashSet数据结构

ArrayList与LinkedList 

  1. 数据结构不同    ArrayList是一个可扩容的数组 Linked是一个双向链表
  2. 增加的时候都是在尾部增加
  3. 查找ArrayList优于LinkeList
  4. 但是在插入和删除中间部分数据的时候,这个要比较ArrayList迁移速度,与LinkeList查找数据的效率相比较

为什么数组不能迭代

  1. ArrayList重写实现迭代器
  2. Collection实现itrable
  3. 数组没有实现迭代器接口

 ArrayList扩容机制

ArrayList是一个动态数组当数组容量到达一定程度时,会进行扩容

第一次元素进来时 由于数组进行add操作原来数据是0,此时添加的元素时,会有三种不同构造进行扩容

  1. 无参构造方法,第一次扩容容量为10,后面需要扩容,则正常扩容
  2. 传入的容量扩容,比如最开始容量是0,传入一个数1.此时容量为1,后为正常的二次扩容
  3. 传列表构造:

第二次扩容:当arrayList满的时候,会将原来的数组长度扩容到原来的1.5倍

hashSet底层原理

  1.  hashSet每次进行添加的时候 都会进行一定的哈希算法 把得到的哈希值取余得到16个不同的结果
  2. 当第一次元素进来时,把元素放到15个位置去,第一次先判断数组的位置有没有元素,如果没有元素,则直接存储元素,如果存在元素,判断其哈希值是否相等,如果哈希值不相等,则直接存储在该位置的下方,用双向链表连接起来
  3. 要判断该位置元素的哈希值是否与新计算的数的哈希值相等,如果相等,不能判断;两个数的值是同一个,应当再比较两个数在内存中eques的值,如果eques相同,则判断两个数相当则不存储

hashSet扩容

  1.  每次添加操作时,到达阈值因子(原来长度的0.75)就要进行扩容,扩容长度为原来的两倍,比如第一次为16,当到达12时,就会进行扩容到32个长度的数组
  2. 树化的条件,链表中长度为8,数组长度超过64时,就会进行树化

comparator 与 comparable 比较

  1. comparable 在实现类中继承comparaTo方法,直接重写排序规则
  2. comparator 是单独写一个实现类,里面实现排序规则
  3. 用Comparable 简单, 只要实现Comparable 接口的对象直接就成为一个可以比较的对象,但是需要修改源代码。 用Comparator 的好处是不需要修改源代码

hashMap添加

  1. 底层就是hashSet的添加

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值