集合总结

集合的简单结构(口头叙述一下):

Iteratable接口中含有一个iterator()方法,可以产生一个iterator对象

Collection接口继承了Iteratable接口,源码中使用的extends关键字;(单一数据)

而Collection接口下有以下接口继承了Collection接口:

实现了List接口的类:ArrayList; LinkList,Vector

实现了Set接口的类或接口:HashSet,SortedSet->TreeSet

与Collection接口类似,还有一个Map接口(键值对)

HashMap,HashTable,SortedMap->TreeMap

 

这里主要例举了比较重要的集合。

LIst:(有序,可重复,含下标,且元素允许为空)

ArrayList、LinkList和Vector的特点:

ArrayList: 底层使用数组实现,初始默认容量为10,会进行扩容,扩容大小为原来大小的1.5倍,检索快,但是插入删除慢,当插入删除末尾元素时无影响。

LinkList:底层使用双向链表实现,因此插入删除操作快,但是检索慢

Vector:底层使用数组实现,初始默认容量为10,会进行扩容,扩容大小为原来的2被,方法含有synchronized 关键字,线程安全,但是由于效率低,基本被放弃

 

Set:(无序,不可重复,HashSet元素允许为空,TreeSet元素不允许为空)

HashSet:底层使用的是HashMap,添加元素时,HashSet集合作为HashMap的键进行构造,初始默认容量为16,会进行扩容,负载因子为0.75,即超过这个指标便会进行扩容,扩容为原来的2倍

TreeSet:底层使用的是TreeMap,元素按照一定的规则进行排序,如果需要自定义规则时,需要实现Comparable接口或者传递Comparator对象。

 

Map:(键值对)

HashMap:底层使用的时哈希表,键和值允许为空,并且,键只允许一个为空。初始容量为16,会进行扩容,负载因子为0.75。并且,当哈希表单向链表中元素超过8个,单向链表数据结构会变成红黑树数据结构,当红黑树上的节点数小于6时,会重新变为单向链表。

HashTable:底层使用的时哈希表,线程安全,键和值不允许为空。初始容量为11,扩容后大小为原容量的2倍+1。

Properties:键和值只能为字符串。

TreeMap:底层使用的是自平衡二叉树。

 

哈希表,数据结构上是由一组单向链表组成的数组。当HashMap执行put()方法时,首先将key,value封装到Node对象中,然后调用key的hashCode()方法得出hash值,而后通过哈希函数将这个hash值转换为数组下标,如果数组下标对应的位置为空,就将此对象加进去。如果不为空,就会对key和链表上的每个key进行equals()比较,当所有返回的都是false,就添加到末尾,如果返回了true,就更新value。

执行get()方法时,调用key的hashCode()方法,然后通过hash函数计算出数组下标定位,如果这个位置上无元素,放回null,如果有单向链表,key进行equals运算,若都返回false,get方法返回null,若返回ture,返回对应的value。

 

posted @ 2020-10-29 01:03  执着的乌龟  阅读(55)  评论(0编辑  收藏  举报