我发现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元素对于迭代器为null?
最佳答案
这里有两个问题:
设计EnumMap T[] toArray(T[] a)
而不是toArray()
的目的是什么?
为列表添加了相同的实现。如果将T[] toArray(T[] a)
与方法toArray()
进行比较,则toArray()
作为对象数组(如Object [])返回,而它是用于类型安全的通用实现。它告诉方法需要创建和返回哪种类型的Array,而不是总是创建Object []。
为什么使用var1[var2] = null;
该方法的文档说:
如果此集合适合指定的数组并有剩余空间(即,数组中的元素多于此集合),则紧接该集合结尾的数组中的元素将设置为null。 (仅当调用者知道此集合不包含任何null元素时,此方法才可用于确定此集合的长度。)