您的位置:首页 > 其它

hash集合源码学习笔记(一)

2017-01-06 10:29 239 查看
1. map数组是set数组扩展,同时map还提供setkeyset()方法来返回所有key组成的set数组,只要把key集合在一起,那么就组成了一组set集合,完成set与map的互换。

 2. map数组的本质是一种关联数组。

 3. 与二维数组的本质相同,集合的存储也是在存储着一个对象的引用,虽然集合是存储对象的容器,但是其本质是存储这些引用变量。这些引用变量的集合就是我们的存储对象的集合。

 4. ArrayList的本质是一组数组集合,可以进行动态初始化,如果在arraylist后面加个小括号写上数字,则表明初始化几个,如果没有标明则初始化10个。

 5. HashMap是根据key的hash值来决定存储位置的,这更加说明,map根本就不用考虑value值的。

 6. HashMap存储数据的过程:

(1)首先判断key的hashcode值,如果这个位置上没有其他的数值,则插入数据,

(2)如果这个位置上有其他数值,会进行key的equal方法进行判断

(3)如果返回值为true,则覆盖value,key值不变,如果返回值为flase,则形成数据链,且位于原来的map数组的前面。

 7. hashmap初始化结构

 a. hashmap()创建一个初始化容量16,负载因子0.75。

 b. hashmap(int )初始化容量为int,负载影子0.75 c. hashmap(int float)初始化容量为int,负载因子为folat

 8. hashmap的初始化值不一定相等与指定的数组,总是会大一点,除非你指定了正好是2的n次方的值。

9.hashmap初始化过程 创建一个长度为capacity的entry数组并标记每个位置的索引值程序取得key,通过hashcode()方法取得返回值,在根据返回值取得位置的索引,返回该value属性。

10.hashmap在只有enty数组中没有形成链表时,是性能最好的。

11.如果形成了entry链,则需要遍历这个链表,找出符合的值。(效率很低)

12.每个对象都有独一无二的hash值,但是hash值的相等的对象却不可能是同一对象。

13.hashmap总得来说效率比较高,因为hashmap会将key-value当成一个entry对象,形成一个ectry数组,根据这个对象的hash算法来得到它的位置,如果要取出,就要根据key的hashcode值来获得索引值,来取得value值。

 hashset

14.hashset,其实就是一个被封装的hashmap,其大部分方法也是更具hashmap的方法得到转化的,hashset是保存着hashmap的key,而value是一个静态对象。

15.hashset在添加数据时也是根据hashmap的存储原理,但是这里key是不会被覆盖的,只有value才会被覆盖。

16.如果要将hashset判断两个对象是否相等的有两个条件,一是hashcode值相等,另一个是equals()方法的返回值。必须要做到这两个值都要相等才可,缺一不可。--------------------------------------------------------------------------------

treemap和treeset

17.treeset的底层依然是treemap来保存数据,虽然它申明是一个navigablemap来存储,但是它是一个接口。treeset的方法也是调用treemap的方法来进行实现的。

18.treemap添加数据的原理:当重新添加一对key-value值,系统会将该entry当作一个新节点,添加到已有的红黑树上,这样就可以保证从小到大排序

19.treemap和hashmap的不同点:hashmap就相当于归置东西,不同的东西放在在不同的位置上。擅长查询,增删改查treemap就相当于排队,不同的东西按照顺序就一定的标准排序。擅长排序

20,treemap的存储原理是红黑树,树中每个节点的值都大于它左子树的所有节点的值,小于或等于它右子树所有节点的值,这样就可以确保能够快速找到所需要的值。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: