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的存储原理是红黑树,树中每个节点的值都大于它左子树的所有节点的值,小于或等于它右子树所有节点的值,这样就可以确保能够快速找到所需要的值。
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的存储原理是红黑树,树中每个节点的值都大于它左子树的所有节点的值,小于或等于它右子树所有节点的值,这样就可以确保能够快速找到所需要的值。
相关文章推荐
- Java集合源码学习笔记(五)ArrayList,LinkedList,Vector和Hashtable,HashMap的比较
- java 集合学习笔记3-HashSet TreeSet
- Java集合源码学习笔记(二)ArrayList分析
- Java集合源码学习笔记(四)HashMap分析
- nginx 源码学习笔记(十)——基本容器——ngx_hash
- java1.8 常用集合源码学习:HashSet
- java1.8 常用集合源码学习:LinkedHashSet
- nginx 源码学习笔记(十)——基本容器——ngx_hash
- nginx 源码学习笔记(十)——基本容器——ngx_hash
- JDK源码学习笔记——HashSet LinkedHashSet TreeSet
- nginx 源码学习笔记(十)——基本容器——ngx_hash
- Java集合源码学习笔记(一)集合框架概览
- Java集合源码学习笔记(三)LinkedList分析
- 原创:Data Structure 学习笔记 之一 hash
- 铁血联盟2源码学习笔记--Makefile边看边学3
- 将集合随机排列和穷举集合排列 暑期学习笔记(七)
- JAVA核心技术学习笔记(第七版,Ⅱ高级特性之集合)
- Ubuntu学习笔记(1)---编译源码包
- C#3.0 新特性学习笔记(1): 对象集合初始化器
- 设计模式学习笔记二:面向对象基础五之集合和泛型