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

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

  • 说说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实现排序过的不重复。