如何找到ArrayList的中间元素?如果大小是偶数还是奇数怎么办?
答案 0 :(得分:2)
如果arraylist是奇数:list.get(list.size()/ 2); 如果说说表是偶数:list.get((list.size()/ 2)-1);
答案 1 :(得分:0)
事实证明,正确的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));
答案 2 :(得分:0)
如果您对不使用arraylist.size()/ arraylist.length()方法有限制;你可以使用两个迭代器。其中一个从数组的开始到结束迭代,另一个从结束到开始迭代。当它们在arraylist上达到相同的索引时,就会找到中间元素。
可能需要一些额外的控件来确保迭代器在下一次迭代之前相互等待,你不应该错过会面点..等等。
迭代时,对于两个迭代器,您可以保留它们读取的元素总数。所以他们应该在一个循环中迭代一个元素。使用 cycle ,我的意思是包含这些操作的过程:
迭代器可能需要读取多个索引才能读取元素。换句话说,你应该在一个循环中跳过一个元素,而不是一个索引。