关与List Map Set集合

引用一张图 

List

通俗理解:

可以为空,是有序的,线程不安全的

List可以完全当作数组来使用,但list中可以有重复元素,Map里也可以,但Set集合不允许出现重复元素

ArrayList

  • 显而易见,其是数组list,那说明他跟数组一样,可以很好的通过数组下标查找元素,查找快

  • 那数组还有一个特点就是修改会比较慢,因为他的下标都是有序的 改变了一个就得牵动别的

  • 其添加元素(add)的时间复杂度为O(n),其实线性的

  • 在你添加元素进去的时候,其容量(Capacity)是会自动增长的

LinkedList

  • link也就是链表,链表有个很大的特点就是他是通过指针的相连的,改变指针的指向速度效率高,那他插入和删除一个数据就会更快

  • 还有下列方法:addFirst(),addLast(),getFirst(),getLast(),removeFirst(),romoveLast().这些方法使得LinkedList可以当作堆栈,队列和双向队列使用。

  • 从前到后遍历 遍历慢

ArrayList的扩容机制

  • 以无参构造的方法创建ArrayList时,实际上初始化赋值的是一个空数组

  • 当真正对数组进行元素操作时,才真正分配容量

  • 向数组中分配第一个元素时,数组容量扩为10

Set

不允许重复

HashSet

  • 不允许出现重复元素

  • 是无序的

  • 允许出现一个null的情况

  • 不同步

  • 以hash表的形式存放元素,插入删除速度快

TreeSet

  • 有序的 记住这一点优点

list和Set的比较

  • set检查元素效率低,但插入和删除的效率高,因为他是用hash表的形式存放元素,插入和删除不会引起元素位置的变化

  • list其可以实现动态增长,查找快,插入删除慢,元素位置会发生改变

Map

map是比较常用到的,她有对应的key 和value 键值对的形式,是一种映射关系,key不能重复

HashMap

  • key可以为空,value也可以为空,即可以储存空对象 key是唯一的 如果key为null 只有一个key为null的情况 value随意

  • 其迭代子操作时间开销和HashMap的容量成比例,因此不要把HashMap的初始容量设置的过高

  • 线程不安全

  • JDK1.8 以后的 HashMap 在解决哈希冲突时有了较大的变化,当链表长度大于阈值(默认为 8)(将链表转换成红黑树前会判断,如果当前数组的长度小于 64,那么会选择先进行数组扩容,而不是转换为红黑树)时,将链表转化为红黑树,以减少搜索时间。Hashtable 没有这样的机制。(后面详细讲)

HashTable

  • 线程安全的 stack 栈也线程安全 Vector

  • 不允许null的key和null的value值

HashMap的遍历

  • 其一般是通过entrySet或是keySet的方式遍历,keySet效率高

    Map map = new HashMap();
    Iterator iter = map.entrySet().iterator();
    where(iter.hasNext()){
    Map.Entry entry = (Map.Entry)iter.Next();
    Object key = entry.getKey();
    Object val = entry.getValue();
    }

  • keySet

      Map map = new HashMap();
    Iterator iter = map.keySet().iterator();
    while (iter.hasNext()) {
    Object key = iter.next();
    Object val = map.get(key);
    }

解决hash冲突的办法

  • 开放定址法(线性探测再散列,二次探测再散列,伪随机探测再散列)

  • 再哈希法

  • 链地址法

  • 建立一个公共溢出区

后面数据结构时再详细讲

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值