【发布时间】:2015-01-14 06:45:56
【问题描述】:
如何找到 ArrayList 的中间元素?如果大小是偶数或奇数怎么办?
【问题讨论】:
标签: arraylist collections
如何找到 ArrayList 的中间元素?如果大小是偶数或奇数怎么办?
【问题讨论】:
标签: arraylist collections
事实证明,正确的 ArrayList 对象(在 Java 中)保持其大小作为对象的属性,因此对 arrayList.size() 的调用只访问一个内部整数。很简单。
/**
* Returns the number of elements in this list.
*
* @return the number of elements in this list
*/
public int size() {
return size;
}
它是可用的最短(就字符而言)和最快(就执行速度而言)的方法。
所以,假设您想要“中间”元素(即 5 项列表中的第 3 项 - 两边各 2 项),它会是这样的:
Object item = arrayList.get((arrayList.size()/2)+1);
现在,如果您正在考虑一个偶数大小的数组,它会变得有点棘手,因为不存在精确的中间。在 4 个元素的数组中,一侧有一个项目,另一侧有两个项目。
如果您接受“中间”将偏向于数组末尾,则上述逻辑也适用。否则,您必须检测元素的大小何时是均匀的并相应地表现。给你的螺旋桨帽朋友上弦...
Object item = arrayList.get((arrayList.size()/2) + (arrayList.size() % 2));
【讨论】:
如果数组列表是奇数:list.get(list.size() / 2); 如果 arratlist 是偶数:list.get((list.size() / 2) -1);
【讨论】:
如果你有不使用 arraylist.size() / arraylist.length() 方法的限制;您可以使用两个迭代器。其中一个从数组的开头迭代到结尾,另一个从结尾迭代到开头。当它们在 arraylist 上达到相同的索引时,您会找到中间元素。
可能需要一些额外的控制来确保迭代器在下一次迭代之前互相等待,你不应该错过会面点……等等。
在迭代时,对于这两个迭代器,您都会保留它们读取的元素总数。所以他们应该在一个循环中迭代一个元素。 cycle,我的意思是一个包含这些操作的过程:
迭代器可能需要读取多个索引才能读取一个元素。换句话说,您应该在一个循环中跳过一个元素,而不是一个索引。
【讨论】: