2015-09-23 43 views
-1
class A{ 
private static Map<String,String> map=new HashMap<String,String>(); 
public A() 
{ 
    map.put("micky","hello"); 
    map.put("micky","hey"); 
} 
public int size() 
{ 
    return map.size(); 
} 
public static void main(String[] args) 
{ 
    System.out.println(map.size()); 
} 

//为什么它给出0作为答案。有人能解释我吗? }收集框架中的HashMap

+3

你认为,为什么它不应该是0? – Seelenvirtuose

回答

2

您正在将构造函数中的元素添加到地图中。但是你永远不会调用构造函数。这就是原因。

当您安装类A时,调用构造函数,您可以看到更改的大小。

public static void main(String[] args) 
{ 
    A a = new A(); //invokes constructor. 
    System.out.println(map.size()); // now prints size 
} 
+0

它不在其他包中工作,是吗? – Andrew

+0

@AndrewTobilko这是另一回事。 Main与现在属于同一班级。 –

1

您正在将类A的构造函数中的元素添加到地图HashMap中。

您从不调用构造函数,因此您的地图HashMap的大小为0,因为它必须是因为地图有0个元素。

这是相当奇怪的,你在做什么有,但如果你想在HashMap中2项必须实例类A的元素

public static void main(String[] args) 
{ 
    // METHOD 1 
    var smth = new A(); 
    System.out.println(map.size()); // You will see the difference 

    // METHOD 2 
    System.out.println(new A().size()); //call constructor, add items, call the size method of class A 
} 
0

你应该调用类的构造函数添加任何地图的价值之前打印的内容

0

您必须通过CLASSA refrence访问size()方法:

System.out.println(A.map.size());

0

您没有初始化默认构造函数,所以HashMap也没有初始化。尝试下面的代码,它工作正常

import java.util.*; 
class A 
{ 
    private static Map<String,String> map=new HashMap<String,String>(); 
    public A() 
    { 
     map.put("micky","hello"); 
      map.put("micky","hey"); 
    } 
    public int size() 
    { 
      return map.size(); 
    } 


    public static void main(String[] args) 
    { 
     A a = new A(); 
     System.out.println(map.size()); 
    } 
}