如何在java类中创建哈希图



这是我的代码。我的目的是创建一个具有 4 个值的哈希图,然后将此类导出为 jar,将其添加到另一个项目中,并在那里使用哈希映射值。

我在所有"hmap.put"中都遇到错误。我无法理解我做错了什么。请帮忙。

    import java.util.HashMap;
    public class MyFirstClass {
    private HashMap<Integer, String> hmap = new HashMap<Integer, String>();
    hmap.put(2, "Jane");
    hmap.put(4, "John");
    hmap.put(3, "Klay");
    hmap.put(1, "Deena");
    public HashMap<Integer, String> gethmap()
   {
        return this.hmap;
   }
    public void sethmap(HashMap hmap)
   {
        this.hmap = hmap;
   }
   }
import java.util.HashMap;
public class MyFirstClass {
    private HashMap<Integer, String> hmap = new HashMap<Integer, String>() {
        {
            hmap.put(4, "John");
            hmap.put(3, "Klay");
            hmap.put(1, "Deena");
        }
    };
    public HashMap<Integer, String> gethmap() {
        return this.hmap;
    }
    public void sethmap(HashMap<Integer, String> hmap) {
        this.hmap = hmap;
    }
}

上面的代码将帮助您获得所需的结果。您还应该注意,您不能直接在类中使用实例变量。 您只能使用该 INSIDE 方法。

Java 不允许执行任何方法、字段初始化或静态块范围之外的任何语句 - 这就是您收到错误的原因。

我想,你的目的是用这四行做一些初始化。Java支持这种初始化 - 它是类构造函数。因此,正确的代码如下所示:

import java.util.HashMap;
public class MyFirstClass {
  private HashMap<Integer, String> hmap = new HashMap<Integer, String>();
  // this is a constructor
  public MyFirstClass() {
    hmap.put(2, "Jane");
    hmap.put(4, "John");
    hmap.put(3, "Klay");
    hmap.put(1, "Deena");
  }
  // here goes your other code
}

这样,您使用 new MyFirstClass()创建的 MyFirstClass 的每个对象都将包含您放入构造函数中的数据。

您可以在官方文档中阅读有关 Java 构造函数的更多信息:https://docs.oracle.com/javase/tutorial/java/javaOO/constructors.html

有多种方法可以做到这一点。最简单的方法是在 put 语句中添加括号:

import java.util.HashMap;
public class MyFirstClass {
    private HashMap<Integer, String> hmap = new HashMap<Integer, String>();
    {
        hmap.put(2, "Jane");
        hmap.put(4, "John");
        hmap.put(3, "Klay");
        hmap.put(1, "Deena");
    }
    public HashMap<Integer, String> gethmap() {
        return this.hmap;
    }
    public void sethmap(HashMap hmap) {
        this.hmap = hmap;
    }
}

你应该向你的类添加一个构造函数:

public MyFirstClass() {
    this.hmap = new HashMap<Integer,String>();
    // you can do .put here if you wish
}

并将hmap字段更改为:

private HashMap<Integer, String> hmap;

您正在使用方法之外的方法。您不能在类内调用 Hashmap.put ,而是在方法外部调用 - 如前所述,您希望在类的构造函数中执行此操作

public class MyFirstClass {
    public MyFirstClass() { //put it here }
}

你可以把它放在一个静态块中,就像:

private static final Map<Integer, String> NAME_MAP = new HashMap<Integer, String>() {
    private static final long serialVersionUID = 1L;
    {
        NAME_MAP.put(2, "Jane");
        NAME_MAP.put(4, "John");
        NAME_MAP.put(3, "Klay");
        NAME_MAP.put(1, "Deena");
    }
};

最新更新