用自定义的对象作为Map的key
来源:互联网 发布:一个c语言的执行是从 编辑:程序博客网 时间:2024/05/20 04:09
用自定义的对象作为Map的key时,如果要让Map根据你自己定义的方式来判断它的key是否是唯一的,那么自定义的对象必须同时重写equals和hashCode方法。
Map判断key是否重复,就是通过equals和hashCode两个方法来判断的。
class MyList extends ArrayList {@Overridepublic boolean equals(Object o) { //只有当List中的所有字符串都相等时才返回trueList list = (List)o;boolean flag = false;for(int i = 0; i < list.size(); i ++) {String str = (String)list.get(i);flag = false;for(int j = 0; j < this.size(); j ++) {String str2 = (String)this.get(j);if(str.equals(str2)) {flag = true;}}if(!flag) {break;}}return flag;}@Overridepublic int hashCode() {int n = 0;for(int i = 0; i < this.size(); i ++) {String str = (String)this.get(i);char val[] = str.toCharArray();//字符串是用字符数组表示的.int len = str.length();//字符串长度for (int j = 0; j < len; j++) {n = 31*n + val[j++];}n = n + len; }return n;}@Override public String toString() { StringBuilder sb = new StringBuilder("["); for(int i = 0; i < this.size(); i ++) { String str = (String)this.get(i); sb.append(str); if(i != this.size() - 1) { sb.append(", "); } else { sb.append("]"); } } return sb.toString(); }}
public class TestMyList {public static void main(String[] args) {List l = new ArrayList();l.add("jar001");l.add("jar002");l.add("jar003");List l2 = new ArrayList();l2.add("jar003");l2.add("jar001");l2.add("jar002");System.out.println("l.equals(l2): " + l.equals(l2)); //输出falseSystem.out.println("l==l2: " + (l==l2)); //输出falseMyList list = new MyList();list.add("jar001");list.add("jar002");list.add("jar003");MyList list2 = new MyList();list2.add("jar003");list2.add("jar001");list2.add("jar002");System.out.println("list.equals(list2): " + list.equals(list2)); //输出trueSystem.out.println("list == list2: " + (list == list2)); //输出falseMap map = new HashMap();map.put(list, "aaaaaaa");map.put(list2, "bbbbbbb"); /* map.get(list), 输出bbbbbbb, 而不是aaaaaaa, 原因是:list2与list的equals方法和hashCode方法相同, Map就认为他两是同一个key,所以添加list2时,"bbbbbbb"就将"aaaaaaa"覆盖了*/System.out.println(map.get(list)); //输出bbbbbbbSystem.out.println(map.get(list2)); //输出bbbbbbb}}
- 用自定义的对象作为Map的key
- 自定义结构作为map的key,比较函数写法
- 使用用户自定义类型作为std::map的key
- 【C++】自定义结构体作为map的key
- 自定义结构作为map的key,比较函数写法
- Range作为map的Key
- struct作为map的key
- Java 将自定义的对象作为HashMap的key
- 用仿函数实现以std::string作为key的map自定义排序
- 自定义对象作为NSDictionary key的一些问题
- python--用户自定义类对象作为dict的key
- byte[]作为Map key的问题
- 使用自定义的类作为Map接口key的参数时
- Java用自定义的类作为HashMap的key值
- Java用自定义的类型作为HashMap的key
- Java 自定义类作为HashMap的key
- QMap使用类的对象作为key
- HashCode 和 Equals 的使用 - 使用自定义对象作为HashMap的Key例子
- GCC编译过程浅析
- Tomcat性能
- C++状态机实现V1.0
- 设计模式(三)建造者模式Builder(创建型)
- android知识点(好)
- 用自定义的对象作为Map的key
- c/c++ redefinition的解决方法
- 杂项
- 停止忧虑
- 为何不能在INPUT链上进行SNAT呢
- Alchemy安装配置 FLASH AS3炼金术
- struts2 文件上传下载
- 输出环境变量
- 浅谈Java反射机制(二)