我想把HASKMAP的KEY放为一个对象,
OBJECT中有region, location, department属性,
如果两个region和location,department都相同, 它们是不是对应同一个VALUE呢?Class Employee {
String region;
String location;
String department;
}Employee employee1;
Employee employee2;
这两个对象不是同一个引用, 但它们里面的属性的值是相同的,是否能做到这两个对象在HASHMAP中的KEY也是相同的
OBJECT中有region, location, department属性,
如果两个region和location,department都相同, 它们是不是对应同一个VALUE呢?Class Employee {
String region;
String location;
String department;
}Employee employee1;
Employee employee2;
这两个对象不是同一个引用, 但它们里面的属性的值是相同的,是否能做到这两个对象在HASHMAP中的KEY也是相同的
解决方案 »
- 两颗星以下的菜鸟们不要瞎起哄,一定要三星以上的老鸟,最好是四星级的古灰级鸟回答。JAVA中的引用和C++中的引用一样吗?
- JAVA访问pcom
- 保存CSV文件的时候,怎么样指定特定内容为文本格式?如:指定“2004-07-20 04:09:09 PM”为文本格式,而不要自动调节?
- 一个jpg的文件得到他的bytes[].......
- 想做一个下载图片的程序。
- 删除目录的怪事!!
- 求各位大侠写一段Java代码!!
- jTextField怎样设成不可编辑状态?
- 谁能告诉我哪里有Borland Optimizeit Profiler V4.11? 急需!
- 我在客户端有一个输入规则校验文件,applet如何访问它呢?
- 浮点数转换
- 请高手指导下javaScript java 还jsp 有什么本质区别啊
注意一个原则:equals成立的话,hashCode必须相等。
hashCode相等的话,equals未必成立。
对于两个实体是否相等,它的判断就是,主键值是否相等。跟你这个意思是一样的。但是hashCode代码是和有讲究的,你可以参考一下。
两个对象属性值都相同,虽然相同,但是他们也两个,至于对应是不是一个VALUE,看你往VALUE里面放什么东西了。
String region;
String location;
String department;
这三个属性, List array = new ArrayList()
array.add(region)
array.add(location)
array.add(department)再放入map当中, 这样也可以吗?
import java.util.Map;public class TestRegex extends Object { /**
* @param args
*/
public static void main(String[] args) { Map map = new HashMap();
map.put(new Employee("a", "shanghai", "zhengfu"), null);
map.put(new Employee("a", "shanghai", "zhengfu"), null);
System.out.println(map.size());
}
}class Employee {
String region;
String location;
String department; public Employee(String _region, String _location, String _department) { this.region = _region;
this.location = _location;
this.department = _department; } public boolean equals(Object obj) {
if (!(obj instanceof Employee)) {
return false;
}
Employee p = (Employee) obj;
return p.region.equalsIgnoreCase(region)
&& p.location.equalsIgnoreCase(location)
&& p.department.equalsIgnoreCase(department); }
@Override
public int hashCode()
{
return region.hashCode() + location.hashCode() + department.hashCode();
}
}
这样 似乎 不太好。 还不如 弄 个 数组弄 存入 三个 元素 。呵呵 String[] temp = new String[3]
temp[0] = ;
temp[1] = ;
temp[2] = ;
Map map = new HashMap();
String[] temp = new String[3];
temp[0] = "1";
temp[1] = "2";
temp[2] = "3";
map.put(temp, "1");
String[] temp2 = new String[3];
temp2[0] = "1";
temp2[1] = "2";
temp2[2] = "3";
map.put(temp2, "1");
System.out.println(map.size());
}输出是2,
Map的javadoc里提到
注:将可变对象用作映射键时必须格外小心。当对象是映射中某个键时,如果以影响 equals 比较的方式更改了对象的值,则映射的行为将是不确定的。此项禁止的一种特殊情况是不允许某个映射将自身作为一个键包含。虽然允许某个映射将自身作为值包含,但请格外小心:在这样的映射上 equals 和 hashCode 方法的定义将不再是明确的。
@Override
public int hashCode()
{
return 7 * region.hashCode() + 9 * location.hashCode() + 13 * department.hashCode();
}