对java集合框架的一个小总结

  • 说说对集合框架理解
    参考菜鸟教程
    是一个工具是一组组对象的组织方式存放具有某一个共同属性的对象,注意是对象,不支持基本类型的集合,基本类型的集合放数组吧.实现基本的数据结构的经典,包含接口、实现类和算法。包含Collection和Map两大容器,Collection是存放一个个元素的集合,Map是存放映射集合即键值对集合一对对集合,每个Collection都依赖一个iterator用于遍历。Collection下有Set、List、Queue,这些接口都一样的方法,实现方式不同而已就是行为不同。Map提供方法转换成Collection类型的,转换后基本元素为Map的内部类Entry,保存键值对。
    在这里插入图片描述

  • 说说List的实现类
    List为有序的集合可重复和下标访问,有Vector、ArrayList、inkedList三个,其中Vector和ArrayList基本一样,都具有读取快插入慢的特点。就是Vector每个方法都加了synchronized同步,所以线程安全的ArrayList则线程不安全的,他们内部都维护一个可变数组,数组的扩充方式都是通过创建更大的数组把原来的数据复制到新的更长的数组里。LinkedList则通过双链表实现的为线程安全类。具有插入速度快,读取读取速度不如数组快。可直接实现栈、队列等功能

  • 说说Map的实现类
    主要有TreeMap、HashMap和LinkedHashMap。都是非线程安全类。其中TreeMap用一颗红黑树实现Key的排序过的,键值对放一个节点里,TreeMap的排序原理是可以通过用作Key的类实现Comparable接口覆盖compareTo方法,或者构造时传入传入一个Comparator接口的实现类,不然将会报类型转换错误。访问和增加都没有HashMap快。HashMap通过hash表实现的Map接口,底层维护了一个动态数组和每个数组元素对应链表,通过hashcode 映射到数组下标,所以操作速度快,当元素的hash值冲突时以链表的方式接到后面,在Java8后当链表的长度大于8时改用红黑树来保证访问速度。LinkedHashMap继承hashMap,特点是在节点中加入指向下一个节点的引用,保证可以通过顺序遍历,其他结构和HashMap一样。

  • 说说Set的实现类
    Set的接口继承Collection不允许出现重复元素,主要有HashSet、TreeSet、LinkedHashSet,HashSet不保证集合中元素的顺序,允许包含值为null的元素,但最多只能一个,底层实现直接调用HashMap实现,因为HashMap实现Set接口保证了Key值不重复即底层是一个HashMap,调用时用一个final的Object作为所有元素即key对应的value,重写的情况节约空间因为所有的value都是指向以恶地址。顾名思义LinkedHashSet同样的直接调用LinkedHashMap实现接口有序且不重复。有序是指的插入顺序,不是排序。TreeSet直接调用的TreeMap实现排序过的不重复。

再说说图中没有但是用的到的PriorityQueue
是一个优先队列的实现头部小尾部大,继承了Collection和Queue接口。一个基于优先级堆的无界优先级队列。优先级队列的元素按照其自然顺序进行排序,或者根据构造队列时提供Comparator 进行排序,具体取决于所使用的构造方法。优先级队列不允许使用 null 元素。依靠自然顺序的优先级队列还不允许插入不可比较的对象(这样做可能导致 ClassCastException)。有一个内部容量,控制着用于存储队列元素的数组大小。它通常至少等于队列的大小。随着不断向优先级队列添加元素,其容量会自动增加。无需指定容量增加策略的细节

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值