一. 把前面讲到的三个集合使用一下.交代一下需求,学生是键,归属地是值.到底归属地是不是 String,有待商榷.如果归属地比较简单,用天津,上海.... 这些就是字符串.如果归属地比较复杂,北京的海淀的..., 建议把归属地封装成对象.为什么?归属地封装成对象以后,它里面包含着省字段,市字段,区字段..... 这些字段你想单独地去获取,归属地对象自己最清楚,所以这个时候要进行封装.记住,一旦事物变复杂了,封装对象.将复杂事物简单化.如果就是简答的,那就直接字符串上,不用封装对象.
在第一个例子中,演示的是 hashmap 集合.前面已经讲述了 map 集合,这里讨论的是 map 子类的集合?无论什么类型的集合,都是一个容器,对不同类型的存储元素进行各种操作.不同集合间对元素进行的操作种类大多都差不多,增,删,查...
在本例中进行取元素,可以有两种方法,要么 keyset,要么....先演示 keyset.
set 集合里面装的是键类型,
其实这里书写的方式挺奇怪的,距离来看,lisi,38 和北京三个属性间在添加入集合时,书写方式比较奇怪,没看懂.
哈希是无序的,输出结果无序.
现在修改程序,对于 zhaoliu 这个对象,修改一下归属地,多添加一次.
输出结果如上,怎么解决.如果你认为键相同,是不是会出现值覆盖情况,它能全列是因为键不相同.如果想保证键相同,必须要提供键判断相同的依据.
哈希表结构要保证两个方法,一说 hashset 都明白,一说 hashmap 就糊涂了.既然这个键是存到了 hashmap 中 (哈希表),它要具备 hashcode 和 equals 方法,具备它自己内容,所以在 person 类里面,要做一个复写动作.(集合这一块,代码貌似都是分开写的) 有人说存的是 student,但是 student 继承了 person,student 里面没有任何属性,直接在 person 里面写就好了.现在在 person 类中,添加了 hashcode 和 equals 方法,再看输出结果.
上海的归属地对象,被铁岭覆盖了.
现在提个小事情,如果不写截图中注释的两句,而是截图中最后一句.它们是一个意思.
来源: http://www.bubuko.com/infodetail-2468729.html