如何找到 ArrayList 的中间元素?
How do I find the middle element of an ArrayList?
如何找到 ArrayList 的中间元素?如果大小是偶数或奇数呢?
事实证明,适当的 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;
}
它是可用的最短(就字符而言)和最快(就执行速度而言)的方法。
因此,假设您想要 "middle" 元素(即 5 项列表中的第 3 项 -- 两边各有 2 项),它是这样的:
Object item = arrayList.get((arrayList.size()/2)+1);
现在,如果您正在考虑大小均匀的数组,它会变得有点棘手,因为不存在精确的中间。在 4 个元素的数组中,一侧有一个项目,另一侧有两个项目。
如果您接受 "middle" 将偏向数组的末尾,则上述逻辑也有效。否则,您将必须检测元素的大小何时为偶数并做出相应的行为。给你的螺旋桨无檐小便帽朋友们上链...
Object item = arrayList.get((arrayList.size()/2) + (arrayList.size() % 2));
如果您有不使用 arraylist.size() / arraylist.length() 方法的限制;您可以使用 两个迭代器 。其中一个从数组的开头迭代到末尾,另一个从末尾迭代到开头。当它们到达 arraylist 上的相同索引时,您就会找到中间元素。
可能需要一些额外的控制来确保迭代器在下一次迭代之前相互等待,你不应该错过汇合点..等等
在迭代时,对于两个迭代器,您都保留它们读取的元素总数。所以他们应该在一个循环中迭代一个元素。使用 cycle,我的意思是包含这些操作的过程:
- iteratorA 从头读取一个元素
- iteratorB从末尾读取一个元素
迭代器可能需要读取多个索引才能读取一个元素。换句话说,你应该在一个循环中跳过一个元素,而不是一个索引。
如果数组列表是奇数:list.get(list.size() / 2);
如果数组列表是偶数:list.get((list.size() / 2) -1);
如何找到 ArrayList 的中间元素?如果大小是偶数或奇数呢?
事实证明,适当的 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;
}
它是可用的最短(就字符而言)和最快(就执行速度而言)的方法。
因此,假设您想要 "middle" 元素(即 5 项列表中的第 3 项 -- 两边各有 2 项),它是这样的:
Object item = arrayList.get((arrayList.size()/2)+1);
现在,如果您正在考虑大小均匀的数组,它会变得有点棘手,因为不存在精确的中间。在 4 个元素的数组中,一侧有一个项目,另一侧有两个项目。
如果您接受 "middle" 将偏向数组的末尾,则上述逻辑也有效。否则,您将必须检测元素的大小何时为偶数并做出相应的行为。给你的螺旋桨无檐小便帽朋友们上链...
Object item = arrayList.get((arrayList.size()/2) + (arrayList.size() % 2));
如果您有不使用 arraylist.size() / arraylist.length() 方法的限制;您可以使用 两个迭代器 。其中一个从数组的开头迭代到末尾,另一个从末尾迭代到开头。当它们到达 arraylist 上的相同索引时,您就会找到中间元素。
可能需要一些额外的控制来确保迭代器在下一次迭代之前相互等待,你不应该错过汇合点..等等
在迭代时,对于两个迭代器,您都保留它们读取的元素总数。所以他们应该在一个循环中迭代一个元素。使用 cycle,我的意思是包含这些操作的过程:
- iteratorA 从头读取一个元素
- iteratorB从末尾读取一个元素
迭代器可能需要读取多个索引才能读取一个元素。换句话说,你应该在一个循环中跳过一个元素,而不是一个索引。
如果数组列表是奇数:list.get(list.size() / 2); 如果数组列表是偶数:list.get((list.size() / 2) -1);