Java之HashMap get方法

来源:互联网 发布:回收二手网络机柜 编辑:程序博客网 时间:2024/05/16 16:16

HashMap 非线程安全


通过下图可以看出HashMap的get方法的实现,其判断标准是通过hashCode和equals方法。



故可以通过重写类的hashCode和equals方法实现自定义Object的相等标准,完整代码如下

Book.java

package com.shc.map;public class Book {private String title;public Book(String title) {super();this.title = title;}public String getTitle() {return title;}public void setTitle(String title) {this.title = title;}@Overridepublic int hashCode() {return title.hashCode();}@Overridepublic boolean equals(Object obj) {boolean flag = false;if(obj instanceof Book){Book book = (Book)obj;flag = this.title.equals(book.title);}return flag;}}

HashMapTest.java

package com.shc.map;import java.util.HashMap;import java.util.Map;import org.junit.Test;public class HashMapTest {@Testpublic void testHashMap1(){Map map = new HashMap();String sss = "aaa";String yyy = "bbb";Book aaa = new Book(sss);Book bbb = new Book(yyy);map.put(aaa, "aaaaaaaaaaaaaaaaaa");map.put(bbb, "bbbbbbbbbbbbbbbbbb");Object content = map.get(aaa);//输出aaaaaaaaaaaaaaaaaaSystem.out.println(content);//改变对象的属性,其hashCode不变,对象内存地址不变aaa.setTitle("xwegwear");content = map.get(aaa);//输出aaaaaaaaaaaaaaaaaaSystem.out.println(content);//hashCode不同Book ccc = new Book(yyy);content = map.get(ccc);//输出nullSystem.out.println(content);}/** * 重写了book的hashCode和equals方法之后 */@Testpublic void testHashMap2(){Map map = new HashMap();String sss = "aaa";String yyy = "bbb";Book aaa = new Book(sss);Book bbb = new Book(yyy);map.put(aaa, "aaaaaaaaaaaaaaaaaa");map.put(bbb, "bbbbbbbbbbbbbbbbbb");Object content = map.get(aaa);//输出aaaaaaaaaaaaaaaaaaSystem.out.println(content);//改变对象的属性aaa.setTitle("xwegwear");//map.get时,获取到的aaa的hashCode已经改变,已经取不到aaacontent = map.get(aaa);//输出nullSystem.out.println(content);//hashCode相同Book ccc = new Book(yyy);content = map.get(ccc);//输出bbbbbbbbbbbbbbbbbbSystem.out.println(content);//字符串"bbb" 和 变量yyy 的hashCode相同Book ttt = new Book("bbb");content = map.get(ttt);//输出bbbbbbbbbbbbbbbbbbSystem.out.println(content);}}




原创粉丝点击