Java硬编码开关vs hashmap

Mon*_*ded 14 java performance hashmap

一些Message类能够根据标签号返回一个标签名称

由于这个类多次实例化,我有点不愿意为每个实例创建一个HashMap:

public class Message {
  private HashMap<Integer,String> tagMap;

  public Message() {
    this.tagMap = new HashMap<Integer,String>();
    this.tagMap.put( 1, "tag1Name");
    this.tagMap.put( 2, "tag2Name");
    this.tagMap.put( 3, "tag3Name");
  }

  public String getTagName( int tagNumber) {
    return this.tagMap.get( tagNumber);
  }
}
Run Code Online (Sandbox Code Playgroud)

支持硬编码:

public class Message {
  public Message() {
  }

  public String getTagName( int tagNumber) {
    switch( tagNumber) {
      case 1: return "tag1Name";
      case 2: return "tag2Name";
      case 3: return "tag3Name";
      default return null;
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

当你把所有内容都放在混合中时(Memory,Performance,GC,......)

有没有理由坚持使用HashMap?

Byt*_*ter 6

MAP在静态块中初始化.

因为你将创建Message的许多对象.你应该编写这样的代码

public class Message {

  private static HashMap tagMap;

  static {
     tagMap = new HashMap();
     tagMap.put( 1, "tag1Name");
     tagMap.put( 2, "tag2Name");
     tagMap.put( 3, "tag3Name");
  }

  public Message() {

  }

  public String getTagName( int tagNumber) {
    return tagMap.get( tagNumber);
  }
}
Run Code Online (Sandbox Code Playgroud)