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);