2

也许这是个简单的问题。但是,我想知道为什么我们不能用空值填充数组或集合?请看这样简单的例子:

public static void main(String[] args) {

   Map<String, Object> map = new HashMap<>();
   map.put("first",null);
   map.put("first1",new BigDecimal(1.5));
   map.put("first2",new BigDecimal(2.5));
   map.put("first3",new BigDecimal(3.5));


   String[]array1 = new String[map.values().size()];
   Object[]array2 = new Object[map.values().size()];

   int counter = 0;

   for(Map.Entry<String,Object> entry: map.entrySet()){

       String header = entry.getKey();
       Object value = entry.getValue();

       array1[counter] = header;
       array2[counter] = value;

       counter++;

   }
}

我很乐意倾听你的目的。

4

4 回答 4

4

对象数组在实例化时填充null值。另一方面,集合一开始是空的,所以一开始就没有什么可以“填充”的东西——好吧,null如果你愿意,你可以用值填充它们,但那有什么意义呢?仅根据需要向 a添加元素Collection,用值填充它是没有意义的null(并非所有集合都允许它,这取决于类型)。

于 2013-09-30T16:43:45.150 回答
1

您可以使用Arrays.fill值填充数组,例如:

String[] arr = new String[5]; 
System.out.println(Arrays.deepToString(arr));
Arrays.fill(arr,"initial value");
System.out.println(Arrays.deepToString(arr));
Arrays.fill(arr,null);
System.out.println(Arrays.deepToString(arr));

输出:

[null, null, null, null, null]
[initial value, initial value, initial value, initial value, initial value]
[null, null, null, null, null]
于 2013-09-30T16:46:19.147 回答
0

使用泛型时,我认为最好的做法是指定比 Object 更具体的东西,以便更安全。因此,您可能希望将 HashMap 更新为:

Map<String, BigDecimal> map = new HashMap<Sting, BigDecimal>();

然后您可以创建空 BigDecimal 对象来填充您的地图。

于 2013-09-30T16:47:26.483 回答
0

在您的 for 循环下添加以下代码,您会看到不仅大小等于地图的大小,元素也相同。

System.out.println("counter = " + counter);
System.out.println("array1.length = " + array1.length);
for(int i=0; i<array1.length; i++) {
   System.out.printf("- array1[%d] = %s\n", i, array1[i]);
}
System.out.println("array2.length = " + array2.length);
for(int i=0; i<array2.length; i++) {
   System.out.printf("- array2[%d] = %s\n", i, array2[i]);
}

该顺序可能与您输入值的顺序不同,但这是由于 HashMap 的性质所致。我的输出是:

counter = 4
array1.length = 4
- array1[0] = first3
- array1[1] = first2
- array1[2] = first
- array1[3] = first1
array2.length = 4
- array2[0] = 3.5
- array2[1] = 2.5
- array2[2] = null
- array2[3] = 1.5
于 2013-09-30T16:55:35.407 回答