为什么要为每个实例创建静态哈希图?

问题描述 投票:-2回答:1

我有一门课程,只有一个Hashmap。我正在尝试使用不同的对象向地图添加值。映射对于所有对象都是通用的,因此我将其标记为“静态”,但它仍显示出奇怪的行为。我有以下代码-

class Course
{
    static HashMap<Integer,List<String>> map;
    Course()
    {
        map = new HashMap<>();
    }
    public boolean add(int id,String Course)
    {
        if(!map.containsKey(id))
        {
            map.put(id,new ArrayList<>());
        }
        try 
        {
            List<String> temp = map.get(id);
            temp.add(Course);
            return true;        
        } catch (Exception e) 
        {   
            return false;
        }        
    }
    public void get()
    {
        System.out.println(map);
    }

    public static void main(String[] args)
    {
        Course c = new Course();
        c.add(1, "abs");
        c.add(2,"xyx");
        c.add(1,"new");
        c.add(3,"tye");
        c.get();
        Course c2  = new Course();
        c2.add(1,"GP");
        c2.add(2, "PT");
        c2.get();

    }   
}

我已经将Hashmap定义为静态的,因为它对于所有对象都是通用的。但是,仍然为每个实例创建新的Hashmap

输出

{1=[abs, new], 2=[xyx], 3=[tye]}
{1=[GP], 2=[PT]}
java static hashmap
1个回答
2
投票

因为您在构造函数中对其进行了初始化。

不要。只需在字段上初始化它即可:

static HashMap<Integer,List<String>> map = new HashMap<>();

(并删除构造函数)。

如果您不想重新分配它,请考虑将其设为final。这样可以确保1)您实际上没有重新分配它; 2)您实际上确实分配了一次。

© www.soinside.com 2019 - 2024. All rights reserved.