我了解这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;
}
}
该地图拥有唯一键。当您put
使用映射中存在的键进行调用时,该键下的对象将被新对象替换。因此大小为1。
两者之间的区别应该很明显:
Map
您存储键值对Set
您只存储密钥实际上,a
HashSet
具有一个HashMap
字段,并且每当add(obj)
被调用时,该put
方法就会在基础地图上被调用map.put(obj, DUMMY)
-其中的伪对象是a private static final Object DUMMY = new Object()
。因此,将使用对象作为键填充地图,并且该值无用。
问题内容: 我可以想到以下几个原因,为什么带有整数键的s 比s 要好得多: 的Android文档说:“通常比传统的要慢”。 如果您使用s而不是s 编写代码,那么您的代码将与Map的其他实现一起使用,并且将能够使用所有为Maps设计的Java API。 如果您使用而不是s 编写代码,则您的代码将在非Android项目中运行。 地图会覆盖,而不会覆盖。 但是,每当我尝试在Android项目中使用带有整
问题内容: 我有一个Java类,将servlet属性设置为HashMap对象: 其中是HttpServletRequest对象,并返回HashMap对象。 有没有一种方法可以使用c:foreach或其他JSTL标签浏览HashMap集合? 我刚在想: 或者,如果无法完成,那么如何制作自定义标签来处理呢? 在我的JSP页面中诉诸Java代码是我的最后选择,我想知道JSTL是否可以实现。 谢谢,乔纳斯
在C语言中,假设每个算法被赋予完全相同的一组进程,那么先到先得、最短作业优先和循环之间的周转时间是否相等?还是调度算法不同?
问题内容: 我想知道Java HashMap与JSONObject的性能。 似乎JSONObject使用HashMap在内部存储数据。但是与HashMap相比,JSONObject可能会有额外的开销。 有没有人知道Java JSONObject与HashMap相比的性能? 谢谢! 问题答案: 就像您说的那样,它由支持。 因此,性能几乎相同。 添加一个空检查,如果找不到密钥,将引发异常。 只是打电话
问题内容: 为了为 HTML5 Doctype 定义字符集,我应该使用哪种表示法? 短: 长: 问题答案: 在HTML5中,它们是等效的。使用较短的一个,更容易记住和键入。浏览器支持很好,因为它是为向后兼容而设计的。
连接的多个输入都相当于Yes的时候才会输出Yes。 用法 Your browser does not support the video tag. 案例:小闹钟 功能:今天15:10:00,响起猫叫声小闹钟 工作原理 当所有的输入都是Yes的时候,与节点才输出Yes。