Java基础(十四)——Map(集合)
一、Map
Map:以键值对形式存储对象,key—value:key是唯一,value是可重复的。
二、HashMap
HashMap:key是无序不可重复。
1、HashMap不可重复
来验证下不可重复特性:
可以看到,重复的并没有出现
2、Key相同,后出现元素覆盖前面元素
如果 Key 相同的情况下,后出现的元素会覆盖前面的元素:
3、获取元素
HashMap 获取元素不能用 for 循环遍历,因为 通过 .get()获取的元素,如果 key 不存在,value 就会返回 null:
这里记住一点,无序的东西都没办法通过索引去获取到元素。
同样的,这里迭代器跟 foreach 也不可用。
4、通过 Collection 的迭代器帮助遍历 HashMap
a、方法一:通过Set()的方式
我们只需要获取到 key,那么就能获取到 value,所以重点就是如何获取到 key,以及遍历它:
这样,就能完成遍历输出。
b、方法二:通过 entry.set()方式
这种方式,可以直接取 key 跟 value:
5、删除
可以看到删除有两种方式,一个是根据 key 来删除,另一个是 key-value:
根据 key 来删除的话,可以看到右边有个返回值类型,是 int 类型,删除的同时会返回 value 的值。
6、修改
修改 key :先删除后添加。
修改 value:直接覆盖。
7、自定义对象当作 key 和 value
自定义两个对象,然后输出:
可以发现,有重复的元素。不是说会去重吗?
原因是因为:这里没有重写 equal()方法和 hashcode()方法。而且,必须是,当作 key 的对象重写方法:
重写以后:
这时可以发现,已经完成了去重了。
三、TreeMap
TreeSet 的底层就是 TreeMap,所以有需要看相关知识看前面的博客即可。这里只提一部分:
TreeMap 存储自定义对象,当作 key 的对象需要实现自然排序或者传递比较器。如果这两个之一都没有实现,运行时就会报类型转换的错误。