如何找到ArrayList的中间元素?

时间:2015-01-14 06:45:56

标签: arraylist collections

如何找到ArrayList的中间元素?如果大小是偶数还是奇数怎么办?

3 个答案:

答案 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;
}

它是最短的(在字符方面)和最快的(在执行速度方面)方法。

http://grepcode.com/file/repository.grepcode.com/java/root/jdk/openjdk/6-b14/java/util/ArrayList.java#ArrayList.0size

所以,假设你想要“中间”元素(即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 ,我的意思是包含这些操作的过程:

  • iteratorA从头开始读取一个元素
  • iteratorB从末尾读取一个元素

迭代器可能需要读取多个索引才能读取元素。换句话说,你应该在一个循环中跳过一个元素,而不是一个索引。