Java,如何在main之外创建哈希映射,但在main或其他方法中引用它 import java.util。*;
import java.util.Map.Entry;
// Create a hash map
HashMap<String, Double> hm = new HashMap<String, Double>();
// Put elements into the map
hm.put("John Doe", new Double(3434.34));
hm.put("Tom Smith", new Double(123.22));
hm.put("Jane Baker", new Double(1378.00));
hm.put("Todd Hall", new Double(99.22));
hm.put("Ralph Smith", new Double(-19.08));
class HashMapDemo
{
public static void main(String args[])
{
// Get a set of the entries
Set<Entry< String, Double> > set = hm.entrySet();
// Get an iterator
Iterator<Entry< String, Double> > i = set.iterator();
// Display elements
while(i.hasNext())
{
Entry< String, Double > me = i.next();
System.out.print( me.getKey() + ": " );
System.out.println( me.getValue() );
}
System.out.println();
// Deposit 1000 into John Doe's account
double balance = hm.get( "John Doe" ).doubleValue();
hm.put( "John Doe", new Double(balance + 1000) );
System.out.println( "John Doe's new balance: " + hm.get("John Doe"));
}
}
答案 0 :(得分:6)
问题是您正在尝试从静态main访问实例值。要解决此问题,只需将HashMap设置为静态。
static HashMap<String, Double> hm = new HashMap<String, Double>();
static {
hm.put("John Doe", new Double(3434.34));
hm.put("Tom Smith", new Double(123.22));
hm.put("Jane Baker", new Double(1378.00));
hm.put("Todd Hall", new Double(99.22));
hm.put("Ralph Smith", new Double(-19.08));
}
现在这一行可以访问hm
Set<Entry< String, Double> > set = hm.entrySet();
答案 1 :(得分:1)
我同意Glitch但你也可以创建一个设置哈希映射的类,它有一个返回它的函数getHM()
。然后在你的主要你需要创建:
该类的一个对象,例如
Test test = new Test();
新的HashMap并为其指定getHM()的值,例如
HashMap<String, Double> hm = test.getHM();
这将是你的课程测试
public class Test {
HashMap<String, Double> hm;
public Test() {
hm = new HashMap<String, Double>();
hm.put("John Doe", new Double(3434.34));
hm.put("Tom Smith", new Double(123.22));
hm.put("Jane Baker", new Double(1378.00));
hm.put("Todd Hall", new Double(99.22));
hm.put("Ralph Smith", new Double(-19.08));
}
public HashMap<String, Double> getHM() {
return hm;
}
}
我会说解决方案的选择取决于您的要求,但如果这是您唯一的问题,那么毛刺给出的解决方案可能是最简单/最好的。
使用static关键字可以检索HashMap,而无需创建任何对象的实例。我相信这在内存使用方面更好(但我不是优化方面的专家......)。