1、背会集合的集成结构图
java.util.Collection;
java.util.Map;
2、map中的常用方法:
调用这些方法:
3、map集合的遍历:
第一种方式用keyset()方法将key全部取出来,然后利用get()方法将value取出来。
第二种方法:利用set>entrySet()来获取键值对,然后通过getkey()方法获得key值。通过getValue()方法获得value值。这里的Map.Entry是一种内部类,也就是说可以看做一种数据类型,而k,y分别填写key和value的类型。这种方·比第一种方式效率要高的多,因为这种方式的一次性取出了key值和value值。
set>entrySet()的底层内存图
4、hashmap的概念及操作
哈希表数据结构图
5、hashmap的put和get操作以及哈希表的原理:
hash表的内存原理图以及put()和get()方法的操作过程。
需要注意的地方:
第一点:
第二点:
看一个例子,来体会hashcode()方法不重写带来的问题:
图片中放入的两个对象是相同的,也就是说最后的打印结果是2,按照hashmap的特性而言,hashmap是无序不可重复的。之所以出现这个情况,是因为hashcode没有重写,这是因为hashcode()函数不知道按照什么条件来判断两个对象是否相等。也就是说hashcode()判断相等不是只有equals()判断完就可以了,还要hashcode()函数里也判断一下是不是两个对象相等。因此hashcode()不重写会导致返回的两个对象的hashcode不一样,所以被同时放入了hashmap当中。因此这里我们得出了一个结论,hashcode不重写会导致存入重复的值。
hashmap在jdk8之后做了改进,如果哈希表单向链表中元素超过8个,单向链表这种数据结构会变成红黑树数据结构。当红黑树上的节点数量小于6时,会重新把红黑树变成单向链表数据结构。注意hashmap的数组初始化容量是16,默认加载因子是0.75,也就是说当数组中数值达到容量的0.75时,数组会进行扩容,扩容之后的容量是原容量的二倍。
注意:hashmap中key和value可以为null但是只能由一个null值,因为hashmap时不可重复的。
注意:hashtable中key和value不可以为null,如果为空会报错。
5、hashtable的定义和特性(技术比较老了解一下)
hashtable中key和value不允许为null
hashtable集合初始化容量为11
默认加载扩容因子为原容量*2+1
hashtable和hashmap一样底层也是哈希表数据结构
6、hashtable的子类:properties类
需要掌握的是properties的setproperty()(实际上调用的hashtable的put方法)和getproperty()相关方法即可
7、treeset放一个自定义的类型对象。
首先看一个问题,
解决问题的方法:
重写hashset中的compare()函数
8、二叉树
图中树结构就是自平衡二叉树:存放时先比较,小的放左边,大的放右边,取得时候按照中序遍历的方式取,也就是左根右。
9、通过重写比较器来实现,对自己新建的类的对象放入treeset中时的排序:
最终的结论是:放到TreeSet或者TreeMap集合key部分的元素要想做到排序,包括两种方式:
与重写comparable接口不同的是,重写comparator是实现java.util.comparator接口,重写comparable是实现java.lang.comparable接口。
以下方法是重写比较器的方式:
比较器也可以用匿名内部类的形式实现