gpt4 book ai didi

Java ListIterator 说明

转载 作者:行者123 更新时间:2023-11-30 06:55:29 25 4
gpt4 key购买 nike

我正在努力实现一种检查 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com