java - 关于为什么 ArrayList 在这里不起作用但 Hashset 起作用的问题
问题描述
所以,我理解这个算法是如何工作的,但我想知道为什么这个算法不接受 ArrayList 作为解决方案并返回一个异常:
"Exception in thread "main" java.lang.IndexOutOfBoundsException: Index 112 out of bounds for length 2
at java.base/jdk.internal.util.Preconditions.outOfBounds(Preconditions.java:64)
at java.base/jdk.internal.util.Preconditions.outOfBoundsCheckIndex(Preconditions.java:70)
at java.base/jdk.internal.util.Preconditions.checkIndex(Preconditions.java:248)"
代码是:
public static int longestSubstring2(String word){
int pointerA = 0, pointerB = 0, max = 0;
List<Character> list = new ArrayList<>();
while(pointerB<word.length()){
if(!list.contains(word.charAt(pointerB))){
list.add(word.charAt(pointerB));
pointerB++;
max = Math.max(max,list.size());
}else{
list.remove(word.charAt(pointerA));
pointerA++;
}
}
return max;
}
如果我使用 HashSet 它工作得很好。我知道它不接受重复,但是 arraylist 如何产生长度为 2 的索引 112?为什么数组列表不能与此一起使用?这意味着如果我List<Character> list = new ArrayList<>();
用 HashSet 替换,它就可以工作。有人可以解释为什么 Hashset 有效而 ArrayList 无效吗?
编辑:答案是该用户提出的另一个问题:Removing a character from an ArrayList of characters
基本上只是这样做“list.remove(Character.valueOf(word.charAt(pointerA)));”
解决方案
推荐阅读
- entity-framework - 实体框架在 SaveChanges 之前检查 DbUpdateException
- javascript - Recharts - 在左侧对齐轴标签
- maven - 谷歌 BigTable 访问错误
- java - 使用 RxJava 进行意外的类型推断
- javascript - 如何将一个对象数组插入另一个数组?
- python - requests.exceptions.ReadTImeout 未捕获
- javascript - Sails.js - 带有正则表达式的航行路线
- mysql - MariaDb timediff 函数正在计算错误的小时数
- angular - Angular 自定义表单组件和 clearValidators
- python - 为什么删除和重新创建模型后,keras 中的层号不是从 1 开始?