首页 > 解决方案 > 关于为什么 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)));”

标签: javaalgorithmarraylisthashset

解决方案


推荐阅读