- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在努力实现一种检查 ArrayList 中连续相等元素的最大数量的方法:
public class ArrayReader<E> {
public int getMaxConsecutiveEqualElements(ArrayList<E> array){
if (array == null){
throw new IllegalArgumentException("Array is null");
}
if (array.size() == 0){
throw new IllegalArgumentException("Array has 0 elements");
}
int max = 1;
int currentMax = 0;
int index = 0;
ListIterator<E> listIterator = array.listIterator(0);
while (listIterator.hasNext()){
E currentItem = array.get(index);
E nextItem = listIterator.next();
System.out.println("Current item: "
+ "index (" + listIterator.previousIndex() + ") "
+ currentItem.toString() + " Next item: "
+ "index (" + (listIterator.previousIndex() + 1) + ") "
+ nextItem.toString());
if (currentItem.equals(nextItem)){
currentMax++;
if (currentMax > max){
max = currentMax;
}
} else {
currentMax = 1;
}
index++;
}
return max;
}
}
public static void main(String[] args){
ArrayList<Integer> array = new ArrayList<>();
array.add(2);
array.add(2);
array.add(2);
array.add(5);
array.add(5);
array.add(5);
array.add(5);
ArrayReader<Integer> intArrayReader = new ArrayReader<>();
System.out.println(intArrayReader.getMaxConsecutiveEqualElements(array));
}
但是,我得到的输出表明它并没有真正将当前元素与下一个元素进行比较:
Current item: index (0) 2 Next item: index (1) 2
Current item: index (1) 2 Next item: index (2) 2
Current item: index (2) 2 Next item: index (3) 2
Current item: index (3) 5 Next item: index (4) 5
Current item: index (4) 5 Next item: index (5) 5
Current item: index (5) 5 Next item: index (6) 5
Current item: index (6) 5 Next item: index (7) 5
7
这个实现有什么问题?
最佳答案
However, the output I am getting indicates that it isn't truly comparing the current element to the next
实际上,在每种情况下,它都会将一项与自身进行比较。
毕竟,您从 index = 0
开始,并在第一次迭代中使用 array.get(index)
和 listIterator.next()
,两者都会返回第一个元素。
更好的方法 (IMO) 是完全摆脱 index
部分,甚至删除 ListIterator
位。只需使用:
Iterator<E> iterator = array.iterator();
if (!iterator.hasNext()) {
return 0;
}
E current = iterator.next();
while (iterator.hasNext()) {
E next = iterator.next();
// Do comparisons here
current = next;
}
然后您可以将方法更改为更通用:
public int getMaxConsecutiveEqualElements(Iterable<E> sequence)
当然,您现在无法计数 - 但如果您愿意,如果第一次调用 hasNext()
返回 false,您可以抛出异常而不是返回 0。
关于Java ListIterator 说明,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35311111/
有人可以告诉我,如果 (ListIterator it = listIterator(); it.hasNext(); )部分代码应写为 for (ListIterator it = list.lis
我在替换数组列表中的项目时遇到问题。我搜索了 soultion,发现它是由 listIterator 完成的。所以我想实现它,但不知何故迭代器的“set”方法不可用。为什么?整个事情都发生在我的 sp
我有两个 ArrayList,每个都包含一定大小的块:blockList、eraseList。块是具有两个字段的对象:开始和结束。我需要从另一组块中减去一组块。 我必须遍历删除器列表并从它们重叠的块列
我有一个自定义的、通用的、单独的 LinkedList,它是我自己构建的。我可以在列表中添加、删除等。我想在我的类中实现 Java ListIterator。我将如何开始这个?我需要将哪些方法添加到我
我正在努力实现一种检查 ArrayList 中连续相等元素的最大数量的方法: public class ArrayReader { public int getMaxConsecutiveEq
我有一个简单的 Java LinkedList,它有 10 个元素。在这种状态下,我得到一个普通的 ListIterator,比如 .listIterator(3)。如果我随后将其他元素插入/删除到列
我正在读一篇thread这里介绍一下java ArrayList和LinkedList的性能。有来自Mr Kevin Brock的答复内容如下。 "Linked list add is not alw
我有一个引用类型的数组。我想使用 hasPrevious() 和 hasNext() 方法。我想使用ListIterator。将数组转换为 ListIterator 的正确方法吗? 最佳答案 我发现执
我有一个简短的问题,关于 ListIterators(我想,通常是 Iterators)在 Java 中的表现。例如,对于一个链表(Java 的标准链表),如果我为其获取一个 ListIterator
我需要在ListIterator“nodeListIterator”中交换node和node.getNext(),并且我已经尝试了几个小时 if (node instanceof LdcInsnNo
所以我的问题是,是否可以通过使用带有列表名称(foodList、foodAmount 等)的数组来简化这段代码,而不是用列表名称(来自所述数组)进行某种循环来替换迭代器中的占位符? 这是代码: pub
package wrap; import java.util.*; public class ArrayListDemo { public static void main(String []
我目前正在尝试学习如何实现我自己的 ListIterators。除了我对 previous() 方法感到困惑外,我已经实现了其中的大部分并准备就绪。按照标准惯例,我可以解释一下 previous()
我有如下所示的代码片段: ArrayList a = new ArrayList(); ListIterator p = a.listIterator(); 但是,我注意到您实际上不需要为 Li
代码: Random Picker = new Random(); List list = new ArrayList(); list.add("card1"); list.add("ca
关于Java中迭代的问题。我(在某种程度上)熟悉 Iterator、ListIterator 和 Iterable 接口(interface),即我了解它们背后的想法。但这也是我的问题所在。 如果
我有两个类:ParentClass 和 SubClass。子类继承自父类。我有以下代码:(在类内) List lstSub; //some initialization public ListIter
我编写了以下使用列表迭代器函数的代码,为什么没有打印出结果,谁能告诉我出了什么问题?谢谢。 import java.util.ArrayList; import java.util.ListItera
如何从 ListIterator 中删除所有元素,然后添加新元素。我在最后一行添加到迭代器时遇到 ConcurrentModificationException 。 public static voi
我正在使用 Java 进行编程,我创建了一个类来获取一个迭代器,因为我在此代码中仅使用一个列表 public ListIterator iterateur() { ListIterator i
我是一名优秀的程序员,十分优秀!