【发布时间】:2019-09-09 12:21:57
【问题描述】:
我发现 EnumMap T[] toArray(T[] var2) 有这个实现:
public <T> T[] toArray(T[] var1) {
int var2 = this.size();
if (var1.length < var2) {
var1 = (Object[])((Object[])Array.newInstance(var1.getClass().getComponentType(), var2));
}
if (var1.length > var2) {
var1[var2] = null;
}
return (Object[])this.fillEntryArray(var1);
}
我不明白它的真正含义:
if (var1.length > var2) {
var1[var2] = null;
}
如果我们的数组例如 String[5] 并且我们尝试:
enum myKeys{ONE, TWO, THREE};
EnumMap myEnum = new EnumMap<myKeys, String>(myKeys.class);
myEnum.put(myKeys.ONE, "1");
myEnum.put(myKeys.TWO, "2");
myEnum.put(myKeys.THREE, "3");
final Object[] objects = myEnum.entrySet().toArray(new Object[8]);
for (Object o: objects) {
System.out.println(o);
}
输出是:
ONE=1
TWO=2
THREE=3
null
null
null
null
null
1) 设计EnumMap T[] toArray(T[] a)而不是toArray()的目的是什么?
2) 为什么使用
if (var1.length > var2) {
var1[var2] = null;
}
是不是因为标记N+1元素对于迭代器为空?
【问题讨论】:
-
1) 我的猜测:避免创建不必要的数组。 2)我认为空值是一个“终结者”。它表示“这是枚举映射内容的结尾”。