我有一门课程,只有一个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]}
因为您在构造函数中对其进行了初始化。
不要。只需在字段上初始化它即可:
static HashMap<Integer,List<String>> map = new HashMap<>();
(并删除构造函数)。
如果您不想重新分配它,请考虑将其设为final
。这样可以确保1)您实际上没有重新分配它; 2)您实际上确实分配了一次。