gpt4 book ai didi

java - HashMap 方法不理解它们是如何被调用的

转载 作者:行者123 更新时间:2023-11-30 08:37:15 26 4
gpt4 key购买 nike

我真的不明白下面的代码是如何调用 get() 方法、set() 方法和 toString() 的。谁能给我解释一下?

这里的重点是在看到输出后我不明白如何调用 tostring 方法。我没有看到任何明确的调用。

public class MyDuplicateKeyEx {

public static void main(String a[]){

HashMap<Price, String> hm = new HashMap<Price, String>();
hm.put(new Price("Banana", 20), "Banana");
hm.put(new Price("Orange", 30), "Orange");
printMap(hm);
Price key = new Price("Banana", 20);
System.out.println("Adding duplicate key...");
hm.put(key, "Grape");
System.out.println("After adding dulicate key:");
printMap(hm);
}

public static void printMap(HashMap<Price, String> map){

Set<Price> keys = map.keySet();
for(Price p:keys){
System.out.println(p+"==>"+map.get(p));
}
}
}

class Price{

private String item;
private int price;

public Price(String itm, int pr){
this.item = itm;
this.price = pr;
}

public int hashCode(){
int hashcode = 0;
hashcode = price*20;
hashcode += item.hashCode();
return hashcode;
}

public boolean equals(Object obj){
if (obj instanceof Price) {
Price pp = (Price) obj;
return (pp.item.equals(this.item) && pp.price == this.price);
} else {
return false;
}
}

public String getItem() {
return item;
}
public void setItem(String item) {
this.item = item;
}
public int getPrice() {
return price;
}
public void setPrice(int price) {
this.price = price;
}

public String toString(){
return "item: "+item+" price: "+price;
}
}

输出:

item: Apple  price: 40==>Apple
item: Orange price: 30==>Orange
item: Banana price: 20==>Banana
Adding duplicate key...
After adding dulicate key:
item: Apple price: 40==>Apple
item: Orange price: 30==>Orange
item: Banana price: 20==>Grape

谢谢!!

最佳答案

你是对的,没有显式调用toString。但在幕后,这就是 Java 正在做的事情。当看到p+"==>"+map.get(p)时,Java正在做p.toString()+"==>"+map.get(p).toString( )。这就是为什么您可以毫无问题地连接字符串和对象的原因。

此外,一种遍历 Map 的键/值的更好方法是:

public static void printMap(HashMap<Price, String> map) {
for (Map.Entry<Price, String> entry : map.entrySet()) {
System.out.println(entry.getKey() + "==>" + entry.getValue())
}
}

当使用以用户定义的对象作为键的 HashMap 时,您必须非常小心不要永远不要修改用于计算hashCode<的字段 如果它们存在于 map 中。这就是为什么您会经常看到应该使用 final 字段来计算它。对于大型程序,这可以避免很多不必要的错误。

关于java - HashMap 方法不理解它们是如何被调用的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37347994/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com