java集合中Map_java中的集合-map

1、背会集合的集成结构图

java.util.Collection;

571cf8fed67d

571cf8fed67d

java.util.Map;

571cf8fed67d

571cf8fed67d

571cf8fed67d

571cf8fed67d

571cf8fed67d

2、map中的常用方法:

571cf8fed67d

571cf8fed67d

571cf8fed67d

571cf8fed67d

调用这些方法:

571cf8fed67d

571cf8fed67d

3、map集合的遍历:

第一种方式用keyset()方法将key全部取出来,然后利用get()方法将value取出来。

571cf8fed67d

第二种方法:利用set>entrySet()来获取键值对,然后通过getkey()方法获得key值。通过getValue()方法获得value值。这里的Map.Entry是一种内部类,也就是说可以看做一种数据类型,而k,y分别填写key和value的类型。这种方·比第一种方式效率要高的多,因为这种方式的一次性取出了key值和value值。

571cf8fed67d

set>entrySet()的底层内存图

571cf8fed67d

4、hashmap的概念及操作

571cf8fed67d

哈希表数据结构图

571cf8fed67d

5、hashmap的put和get操作以及哈希表的原理:

571cf8fed67d

571cf8fed67d

hash表的内存原理图以及put()和get()方法的操作过程。

571cf8fed67d

需要注意的地方:

第一点:

571cf8fed67d

第二点:

看一个例子,来体会hashcode()方法不重写带来的问题:

571cf8fed67d

图片中放入的两个对象是相同的,也就是说最后的打印结果是2,按照hashmap的特性而言,hashmap是无序不可重复的。之所以出现这个情况,是因为hashcode没有重写,这是因为hashcode()函数不知道按照什么条件来判断两个对象是否相等。也就是说hashcode()判断相等不是只有equals()判断完就可以了,还要hashcode()函数里也判断一下是不是两个对象相等。因此hashcode()不重写会导致返回的两个对象的hashcode不一样,所以被同时放入了hashmap当中。因此这里我们得出了一个结论,hashcode不重写会导致存入重复的值。

571cf8fed67d

571cf8fed67d

571cf8fed67d

hashmap在jdk8之后做了改进,如果哈希表单向链表中元素超过8个,单向链表这种数据结构会变成红黑树数据结构。当红黑树上的节点数量小于6时,会重新把红黑树变成单向链表数据结构。注意hashmap的数组初始化容量是16,默认加载因子是0.75,也就是说当数组中数值达到容量的0.75时,数组会进行扩容,扩容之后的容量是原容量的二倍。

注意:hashmap中key和value可以为null但是只能由一个null值,因为hashmap时不可重复的。

571cf8fed67d

注意:hashtable中key和value不可以为null,如果为空会报错。

571cf8fed67d

5、hashtable的定义和特性(技术比较老了解一下)

hashtable中key和value不允许为null

hashtable集合初始化容量为11

默认加载扩容因子为原容量*2+1

hashtable和hashmap一样底层也是哈希表数据结构

571cf8fed67d

6、hashtable的子类:properties类

需要掌握的是properties的setproperty()(实际上调用的hashtable的put方法)和getproperty()相关方法即可

571cf8fed67d

571cf8fed67d

7、treeset放一个自定义的类型对象。

首先看一个问题,

571cf8fed67d

解决问题的方法:

重写hashset中的compare()函数

571cf8fed67d

571cf8fed67d

8、二叉树

图中树结构就是自平衡二叉树:存放时先比较,小的放左边,大的放右边,取得时候按照中序遍历的方式取,也就是左根右。

571cf8fed67d

9、通过重写比较器来实现,对自己新建的类的对象放入treeset中时的排序:

最终的结论是:放到TreeSet或者TreeMap集合key部分的元素要想做到排序,包括两种方式:

571cf8fed67d

与重写comparable接口不同的是,重写comparator是实现java.util.comparator接口,重写comparable是实现java.lang.comparable接口。

以下方法是重写比较器的方式:

571cf8fed67d

571cf8fed67d

571cf8fed67d

比较器也可以用匿名内部类的形式实现

571cf8fed67d

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值