也许这是一个简单的问题。 但是,我想知道为什么我们不能用null值填充数组或集合? 请看这样简单的例子:
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++;
}
}
我很高兴听你的目的。
答案 0 :(得分:4)
对象数组 在实例化时填充null
个值。另一方面,集合在开头是空的,所以首先没有任何东西可以“填充” - 好吧,如果你愿意的话,你可以用null
值填充它们,但是有什么意义呢?那?只需要将按需添加到Collection
,用null
值填充它是没有意义的(并非所有集合都允许它,它取决于类型)。
答案 1 :(得分: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]
答案 2 :(得分:0)
使用泛型时,我认为最佳做法是指定比Object更具体的内容,以便更加类型安全。因此,您可能希望将HashMap更新为:
Map<String, BigDecimal> map = new HashMap<Sting, BigDecimal>();
然后,您可以创建null BigDecimal对象来填充地图。
答案 3 :(得分: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