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