我已经尝试了好几个小时,这个站点上只有一个问题接近,但是所有答案都被用到了比我所能理解的要复杂得多的概念,因此我无法根据我的代码进行编辑。 / p>
这是地图:
private Map<Integer, Item> inventory;
public Inventory() {
inventory = new HashMap<>();
}
以下是添加的对象:
Inventory inv = new Inventory();
Item obj1 = new Potion("Test", 20, "TESTING");
Item obj2 = new Potion("TES2", 30, "ANOTHER TEST");
Item obj3 = new Potion("TesT 3", 220, "TESTS");
Item sword = new Weapon("TES T 4", 42, "t");
Item weapon3 = new Weapon("dupetest", 100, "test dupes.");
Item waraxe = new Weapon("6th test", 2050, "a test for the inv");
Item bow = new Weapon("7 teST", 12, "test number 7");
Item weapon = new Weapon("dupetest", 100, "test dupes.");
Item weapon2 = new Weapon("dupetest", 100, "test dupes.");
inv.add(obj1, obj2, weapon3, obj3, sword, waraxe, bow, weapon, weapon2);
请注意,所有对象的类型均为Item,请注意,武器3,武器和武器2是完全相同的对象:相同的哈希码,状态和所有内容。
以下是Item的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();
private String name;
private int value;
private String description;
private static Integer key = 0;
private Integer individualKey;
public Item(String name, int value, String description) {
setName(name);
setValue(value);
setDescription(description);
key++;
individualKey = key;
}
还有更多
public Integer getKey() {
return individualKey;
}
答案 0 :(得分:0)
这可能有效,但是我首先要考虑使您的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);