如何正确使用HashMap?

She*_*lam 12 java hashmap map key-value data-structures

HashMap savedStuff = new HashMap();
savedStuff.put("symbol", this.symbol); //this is a string
savedStuff.put("index", this.index); //this is an int
Run Code Online (Sandbox Code Playgroud)

给我警告:

HashMap is a raw type. References to generic type HashMap<K,V> should be parameterized  
Run Code Online (Sandbox Code Playgroud)

Mat*_*hen 7

HashMap<String, Object> savedStuff = new HashMap<String, Object>();
Run Code Online (Sandbox Code Playgroud)

当然,在提取元素时,您仍需要小心使用正确的类型.


fas*_*ava 7

您需要使用泛型,如下所示:

Map<String, Object> savedStuff = new HashMap<String, Object>();
Run Code Online (Sandbox Code Playgroud)


Jav*_*mae 4

我不确定您要做什么,但由于您提供的示例使用硬编码字符串来索引数据,因此您似乎知道要将哪些数据分组在一起。如果是这样的话,那么 Map 可能不是一个好的选择。更好的方法是从通常分组的数据中创建一个类:

public class SavedStuff {
  private int index;
  private String symbol;

  public SavedStuff(int index, String symbol) {
    this.index = index;
    this.symbol = symbol;
  }

  public int getIndex() {
    return index;
  }

  public String getSymbol() {
    return symbol;
  }
}
Run Code Online (Sandbox Code Playgroud)

这允许您的客户端代码执行以下操作:

SavedStuff savedStuff = ...
String symbol = savedStuff.getSymbol();
Run Code Online (Sandbox Code Playgroud)

而不是这个:

Map<String, Object> savedStuff = ...
String symbol = savedStuff.get("symbol");
Run Code Online (Sandbox Code Playgroud)

前一个示例不那么脆弱,因为您没有使用字符串常量索引数据。它还为您提供了在分组数据之上添加行为的位置,这使您的代码更加面向对象。