02-容器

容器

1、Collection

Collection整体继承结构

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-zetJ14em-1617939659028)(C:\Users\91051\AppData\Roaming\Typora\typora-user-images\image-20210312123733563.png)]

Collection各种实现类的底层数据结构实现

1、List接口实现类

  • ArraylistObject[]数组
  • VectorObject[]数组,支持线程同步
  • LinkedList: 双向链表(JDK1.6 之前为循环链表,JDK1.7 取消了循环)

2、Set接口实现类

  • HashSet:完全使用HashMap实现,就是使用HashMap只存了Key
  • LinkedHashSet:数据以我们录入的顺序遍历输出。LinkedHashSetHashSet 的子类,并且其内部是通过 LinkedHashMap 来实现的。
  • TreeSet:实现了SortedSet接口,底层使用TreeMap实现

3、Queue接口实现类

Deque接口实现了Queeue接口,下面是Deque实现类

ArrayDeque:数组实现,包括队列操作、双端队列操作、栈操作

LinkedList:双向链表实现,包括队列操作、双端队列操作、栈操作

Clloction常用方法

  • 1 public boolean add(E e):添加一个元素
  • 2 public void clear():清空集合中所有的元素
  • 3 public boolean remove(E e):移除集合中指定的元素
  • 4 public boolean contains(E e):检查集合中是否包含指定的对象
  • 5 public boolean isEmpty():判断集合是否为空
  • 6 public void size():判断集合中元素的个数
  • 7 public Object[] toArray(new T[0]):把集合元素存储到数组中
  • 8 Iterator iterator(); 返回结合的迭代器

注意:(remove与contains源码调用equals方法比较是否含有相等对象)

2、Map

Map各种实现类的底层数据结构实现

  • HahsMap: JDK1.8 之前 HashMap数组+链表组成的,数组是 HashMap 的主体,链表则是主要为了解决哈希冲突而存在的(“拉链法”解决冲突)。JDK1.8 以后在解决哈希冲突时有了较大的变化,当链表长度大于阈值(默认为 8)(将链表转换成红黑树前会判断,如果当前数组的长度小于 64,那么会选择先进行数组扩容,而不是转换为红黑树)时,将链表转化为红黑树,以减少搜索时间。允许key为null,无法线程同步
  • LinkedHashMap:LinkedHashMap 继承自 HashMap,所以它的底层仍然是基于拉链式散列结构即由数组和链表或红黑树组成。另外,LinkedHashMap 在上面结构的基础上,增加了一条双向链表,使得上面的结构可以保持键值对的插入顺序。同时通过对链表进行相应的操作,实现了访问顺序相关逻辑
  • Hashtable数组+链表组成的,数组是 HashMap 的主体,链表则是主要为了解决哈希冲突而存在的,支持线程同步,不允许key为null
  • TreeMap实现了SortMap接口, 够把它保存的记录根据键排序,默认是按键值的升序排序,也可以指定排序的比较器,当用Iterator 遍历TreeMap时,得到的记录是排过序的。底层使用红黑树(自平衡的排序二叉树)

HashMap与HashTable联系:

  • 底层均是数组+链表或红黑树;
  • HashMap许key为null,无法线程同步;HashTable支持线程同步,不允许key为null

LinkedHashMap与HashMap联系:

  • LinkedHashMap继承自 HashMap,在HashMap结构的基础上,增加了一条双向链表,在其基础上保持了键值对的插入顺序

Map常用方法

//map.size()方法
//map.get(key)
//map.keySet()
//map.entrySet()
//map.clear()
//map.remove(key)
//map.value();所有value
//获得map中键值对的集合
Set set1 = map.entrySet();
//得到集合的迭代器
Iterator iterator = set1.iterator();

3、遍历容器

ArrayList<Integer> list = new ArrayList<>();
        list.add(1);
        list.add(2);
        HashMap<Integer, Integer> map = new HashMap<>();
        map.put(1, 1);
        map.put(2, 1);
        //------------List遍历------------
        //1、迭代器
        Iterator<Integer> iterator = list.iterator();
        while(iterator.hasNext()){
            int i = iterator.next();
            System.out.print(i+" ");
        }
        System.out.println();
        //2、for-each(不能执行List的删除添加操作,这会改变size大小但不会更新cursor,否则会遍历出问题或抛出异常)
        for(int i:list){
            System.out.print(i+" ");
        }
        System.out.println();

        //---------Map遍历--------------
        //1、迭代器
        Iterator<Map.Entry<Integer, Integer>> iterator2 = map.entrySet().iterator();
        while(iterator2.hasNext()){
            Map.Entry<Integer, Integer> entry = iterator2.next();
            System.out.println("key:"+entry.getKey()+",value:"+entry.getValue());
        }

        Iterator<Integer> iterator3 = map.keySet().iterator();
        while(iterator3.hasNext()){
            int key = iterator3.next();
            System.out.println("key:"+key+",value"+map.get(key));
        }
        //2、for-each
        for(int key:map.keySet()){
            System.out.println("key:"+key+",value"+map.get(key));
        }

5、Collections工具类

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值