//無法在覆蓋hashcode後獲取哈希映射中對象的值 //這是我生成基於代碼的項目類在項目名稱無法從哈希表中獲取對象的值,即使它返回相同的哈希碼
public class Item {
private String name;
private Long id;
private double price;
//Constructor
public Item(String name, Long id, double price) {
this.name = name;
this.id = id;
this.price = price;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public double getPrice() {
return price;
}
public void setPrice(double price) {
this.price = price;
}
//Generating hashcode based on name comparing if item id are //same
@Override
public int hashCode() {
return name.hashCode();
}
@Override
public boolean equals(Object obj) {
return ((Item) obj).id ==(id);
}
@Override
public String toString() {
return "Item {" +
" name='" + name + '\'' +
", id=" + id +
", price=" + price +
'}';
}
//Here there are items but when i pass the exact same item with exact //credentials i get null while checking how many items are there using Hashmap.
public class Warehouse {
Map<Item, Integer> itemList = new HashMap<>();
List<Drone> drones = new ArrayList<>();
private Drone drone;
private String sourceAddress;
private Address address;
public Warehouse(Address address) {
this.address = address;
Item item = new Item("PlayStation 4 pro", (long) 100, 42000);
Item item1 = new Item("X box one S", (long) 200, 40000);
Item item2 = new Item("Apple Macbook Pro", (long) 500, 82000);
Item item3 = new Item("Dell Xps Laptop", (long) 1000, 92000);
Item item4 = new Item("iPhone 7 plus", (long) 2000, 72000);
itemList.put(item, 10);
itemList.put(item1, 20);
itemList.put(item2, 40);
itemList.put(item3, 50);
itemList.put(item4, 20);
}
public Drone getDrone() {
return new Drone();
}
public void setDrone(Drone drone) {
this.drone = drone;
System.out.println("Drone # " + drone.getDroneID() + " has arrived at the warehouse " + address);
}
public Address getAddress() {
return address;
}
public ArrayList<Item> getItemList() {
return (ArrayList<Item>) itemList;
}
//Setting the item
public void setItem(Item item) {
Integer num = itemList.get(item);
if (num == null) {
num = 0;
}
this.itemList.put(item, ++num);
}
//這是我面臨的問題,如果我查詢的HashMap它返回我空同一個項目,項目甚至返回相同的哈希碼
public Item removeItem(Item item) {
Integer num = itemList.get(item);
//## Issue is i get null in num
if(null!= num||num!=0 ){
itemList.put(item,num-1);
}
System.out.println(item);
return item;
}
}
請把它降低到[mcve] - 那裏有很多不相關的代碼。 (然後格式化它更容易。)最終,問題是'equals'和'hashCode'之間的不一致... –
我不確定這裏是否真的需要mcve。唯一缺少的是有人願意查找適當的重複問題。 – GhostCat
@Eugene但我仍然不相信,因爲每個解釋。如果我有兩件物品。一個在Warehouse hashmap和I中; m在removeItem方法中獲取item2。商品item1 =新商品(「X box one S」,(長)200,40000);項目item2 =新項目(「X box one S」,(長)200,40000); ,然後如果我生成名稱的散列碼,Hashmap將檢查兩個項目名稱的散列碼是否相同?所以對於item1和item2,只要名稱相同,我們就可以得到相同的哈希碼。如果我們將平等中的id比較,那不應該是個問題吧? –