以下代码分为三部分内容:
①不适用自定义键遍历
②使用自定义键的遍历,但不从写hashCode()和equals()方法
③使用自定义键的遍历+重写hashcode方法和equals方法
package map;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Set;
public class Demo {
public static void main(String[] args) {
HashMap<String,Student> map=new HashMap<>();
map.put("一",new Student("陈碧忠",18));
map.put("一",new Student("陈碧忠",18));
map.put("二",new Student("张学友",18));
map.put("三",new Student("张国荣",18));
//不适用自定义键遍历
System.out.println("不使用自定义键遍历");
for (String key:map.keySet()
) {
System.out.println(key+" "+map.get(key).getName()+" "+map.get(key).getAge());
}
/** 遍历结果:
* 一 陈碧忠 18
* 三 张国荣 18
* 二 张学友 18
*
* 结论:
* ①hashMap是无序的
* ②在不使用自定义类做对象的时候,如果存入相同键值的数据,则会覆盖原来的键
*
* */
System.out.println("使用自定义键的遍历,但不从写hashCode()和equals()方法");
HashMap<Student,String> map1=new HashMap<>();
map1.put(new Student("陈碧忠",18),"一");
map1.put(new Student("张学友",18),"二");
map1.put(new Student("陈碧忠",18),"三");
map1.put(new Student("张学友",18),"4");
map1.put(new Student("王大拿",18),"一");
for (Student key1:map1.keySet()
) {
System.out.println(key1.getAge()+" "+key1.getName()+" "+map1.get(key1));
}
/**
*
* 不使用自定义键遍历结果;
* 一 陈碧忠 18
* 三 张国荣 18
* 二 张学友 18
* 使用自定义键的遍历结果:
* 18 张学友二
* 18 王大拿一
* 18 张学友4
* 18 陈碧忠一
* 18 陈碧忠三
* 结论:
* 如果使用自定义键但是不重写equals方法和hashCode方法,存入相同的的键,就会保存下来。
*
* */
//重写equals方法和hashcode方法
HashMap<Student02, String> map2=new HashMap<>();
map2.put(new Student02("陈碧忠",18),"一");
map2.put(new Student02("张学友",18),"二");
map2.put(new Student02("陈碧忠",18),"三");
map2.put(new Student02("张学友",18),"4");
map2.put(new Student02("王大拿",18),"一");
System.out.println("使用自定义键的遍历+重写hashcode方法和equals方法");
Set<Map.Entry<Student02, String>> set=map2.entrySet();
Iterator<Map.Entry<Student02, String>> it=set.iterator();
while(it.hasNext()){
Map.Entry<Student02,String> student= it.next();
System.out.println(student.getKey().getAge()+" "+student.getKey().getName()+" "+map2.get(student));
}
/***
* 不使用自定义键遍历
* 一 陈碧忠 18
* 三 张国荣 18
* 二 张学友 18
* 使用自定义键的遍历,但不从写hashCode()和equals()方法
* 18 张学友 二
* 18 王大拿 一
* 18 张学友 4
* 18 陈碧忠 一
* 18 陈碧忠 三
* 使用自定义键的遍历+重写hashcode方法和equals方法,但不从写hashCode()和equals()方法
* 18 王大拿 null
* 18 张学友 null
* 18 陈碧忠 null
*
* 结论:
* 使用自定义键,再加上重写equals方法和hashCode方法,可以保证在存入相同的自定义键时,保证不重复(自动去重)
* 使用自定义键就必须重写方法
*
*/
}
}
2319

被折叠的 条评论
为什么被折叠?



