【发布时间】:2011-04-16 20:48:42
【问题描述】:
我了解HashSet 基于HashMap 实现,但在您需要一组独特的元素时使用。那么为什么在下一个代码中将相同的对象放入地图并设置我们两个集合的大小都等于 1?地图大小不应该是2吗?因为如果两个集合的大小相等,我看不出使用这两个集合有什么区别。
Set testSet = new HashSet<SimpleObject>();
Map testMap = new HashMap<Integer, SimpleObject>();
SimpleObject simpleObject1 = new SimpleObject("Igor", 1);
SimpleObject simplObject2 = new SimpleObject("Igor", 1);
testSet.add(simpleObject1);
testSet.add(simplObject2);
Integer key = new Integer(10);
testMap.put(key, simpleObject1);
testMap.put(key, simplObject2);
System.out.println(testSet.size());
System.out.println(testMap.size());
输出是1和1。
SimpleObject code
public class SimpleObject {
private String dataField1;
private int dataField2;
public SimpleObject(){}
public SimpleObject(String data1, int data2){
this.dataField1 = data1;
this.dataField2 = data2;
}
public String getDataField1() {
return dataField1;
}
public int getDataField2() {
return dataField2;
}
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result
+ ((dataField1 == null) ? 0 : dataField1.hashCode());
result = prime * result + dataField2;
return result;
}
@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
SimpleObject other = (SimpleObject) obj;
if (dataField1 == null) {
if (other.dataField1 != null)
return false;
} else if (!dataField1.equals(other.dataField1))
return false;
if (dataField2 != other.dataField2)
return false;
return true;
}
}
【问题讨论】:
-
只是好奇,为什么第一个前缀是
simple,第二个前缀是simpl? :) -
我明白为什么map size是1,但是不知道为什么set size也是1?我们把 2 个对象放在集合中,为什么它的大小是 1?
标签: java collections