Java 如何从hashmap中删除重复的对象?
我已经试了几个小时了,这个网站上只有一个问题很接近,但是所有的答案都用了比我能理解的复杂得多的概念,我无法编辑它们以适应我的代码 这是地图:Java 如何从hashmap中删除重复的对象?,java,hashmap,Java,Hashmap,我已经试了几个小时了,这个网站上只有一个问题很接近,但是所有的答案都用了比我能理解的复杂得多的概念,我无法编辑它们以适应我的代码 这是地图: private Map<Integer, Item> inventory; public Inventory() { inventory = new HashMap<>(); } 注意,所有对象都是Item类型,注意weapon3、weapon3和weapon2是完全相同的对象:相同的hashcode、state和所有内容
private Map<Integer, Item> inventory;
public Inventory() {
inventory = new HashMap<>();
}
注意,所有对象都是Item类型,注意weapon3、weapon3和weapon2是完全相同的对象:相同的hashcode、state和所有内容
下面是项的hashCode()和equals()方法:
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + ((name == null) ? 0 : name.hashCode());
result = prime * result + value;
return result;
}
@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
Item other = (Item) obj;
if (name == null) {
if (other.name != null)
return false;
} else if (!name.equals(other.name))
return false;
if (value != other.value)
return false;
return true;
}
我试了很多次,我最近的朋友只移除了其中一个物体,而不是两个
添加代码:
public void add(Item... objects) {
for(Item obj : objects) {
inventory.put(obj.getKey(), obj);
}
}
下面是getKey()代码>
还有一些
public Integer getKey() {
return individualKey;
}
这可能行得通,但我会首先考虑让add方法阻止它,并找出为什么要使用HashMap而不是其他集合
List<Item> al = new ArrayList<Item>(inv.values());
Set<Item> hs = new LinkedHashSet<>(al);
hs.addAll(al);
al.clear();
al.addAll(hs);
inv.clear()
for (Item i : hs) inv.put(i.getKey(),i);
List al=新的数组列表(inv.values());
Set hs=新的LinkedHashSet(al);
hs.addAll(al);
al.clear();
艾德尔(hs);
存货清零()
对于(项目i:hs)存货投入(i.getKey(),i);
首先对hashmap进行排序,然后循环遍历,检查下一项是否与当前项相同?如果是这种情况,请删除该项目?如果是重复,您的意思是,例如,武器
和武器2
在逻辑上是等效的,那么您必须将代码添加到您的库存#equals
方法来检查这一点,还有你想到的其他情况。删除重复项的代码在哪里?向地图添加任何内容的代码在哪里?我将在中编辑一些代码
public Integer getKey() {
return individualKey;
}
List<Item> al = new ArrayList<Item>(inv.values());
Set<Item> hs = new LinkedHashSet<>(al);
hs.addAll(al);
al.clear();
al.addAll(hs);
inv.clear()
for (Item i : hs) inv.put(i.getKey(),i);