java常用容器详细介绍

             Collection --Queue --优先级队列/数组实现的队列                                              Map    --WeakedHashMap

        /                           \                                /              \

   List                           Set                            HashMap TreeMap

   /        \                      /     \                          |

ArrayList LinkedList    HashSet  TreeSet                  LinkedHashMap

                              |

                  LinkedHashSet

两个可以进行比较的接口的区别:

Comparable:需要比较对象实现该接口,有CompareTo()方法。

Comparator:比较器,使比较器类实现该接口,将要比较的对象传到这个实现类的对象中。

第二个更好一些,它相当于一个工具类,第一个对要比较的对象耦合度较高。

Collection:接口  里面包含常用的方法,add().remove() contains() isEmpty()等基础方法。

List:元素在序列中,根据索引对序列特定位置进行操作,重写的方法中要传入索引index值。

Arraylist:底层是数组实现的List容器,查找效率高,默认容量是10,扩容1.5倍,在底层new一个1.5倍容量的数组进行扩容。

LinkedList:链表实现的,对删除和存入效率很高。

Set:方法和Collection完全相同,确保容器内元素唯一,根据这个特性可以用来查找。

HashSet:HashSet底层持有一个HashMap,key就是存储的值,value是统一的一个值,HashSet中的各种方法实际上是调用HashMap相应的方法实现的。

TreeSet:持有一个TreeMap。

LinkedHashSet:底层是LinkedHashMap。

Map:存储的是键值对。

HashMap:层是Hash表来实现的Set,在add()方法中调用,contains()方法,cotains方法会根据对象的hashcode判断在哪个桶内,然后调用equals方法和桶内其他元素比较如果相同就要插入失败。

LinkedHashMap:底层是Hash表和双向链表,继承HashMap,持有的Entry类继承了HashMap中的类,并且多了before,after两个引用,分别指向hash表中自己节点的前驱和后继,有序方式分为两种,一种是插入时的顺序,一种是访问顺序(通过get方法等),有一个标志位来切换两种顺序。

TreeMap:底层是红黑树实现的Map,树的节点存储的是Entry,遍历时是有序的,顺序是底层定义的比较器所比较的顺序。

Hash表:桶的数量要选择2的整数次幂,因为确定一个对象所在的桶需要使用,Hashcode%桶数得到,而除法和求余操作对于处理器来说是最慢的,而二的整数次幂可用掩码代替除法。

猜你喜欢

转载自www.cnblogs.com/gmzqjn/p/11771113.html