二叉搜索树的众数,直接使用list报错,转换成数组后正确,到底怎么回事啊

力扣题,我先用中序遍历得到一个有序的arraylist集合,然后遍历该集合得到数组,但是结果报错。但是我将arraylist转换成数组后在进行一样的操作却没有报错,这是怎么回事啊?
报错代码:public class FindMode {

List<Integer> list = new ArrayList<> ();
public int[] findMode(TreeNode root) {
    List<Integer> ans = new ArrayList<> ();
    int max = Integer.MIN_VALUE;
    inorder ( root );
    int i =0;
    while (isize ()){
        int size = 1;
        while (isize ()-1&&list.get ( i )==list.get ( i+1 )){
            size++;
            i++;
        }
        if(size>max){
            while (ans.size ()!=0){
                ans.remove ( ans.size ()-1 );
            }
            ans.add ( list.get ( i ) );
            max = size;
        }else if(size==max) ans.add ( list.get ( i ) );
        i++;
    }
    return ans.stream ().mapToInt ( Integer::intValue ).toArray ();
}

public void inorder(TreeNode root){
    if(root==null) return;
    inorder ( root.left );
    list.add ( root.val );
    inorder ( root.right );
}

}
正确代码:
List list = new ArrayList<> ();
public int[] findMode(TreeNode root) {
List ans = new ArrayList<> ();
int max = Integer.MIN_VALUE;
inorder ( root );
int[] ints = list.stream ().mapToInt ( Integer::intValue ).toArray ();

    int i =0;
    while (ilength){
        int size = 1;
        while (ilength-1&&ints[i]==ints[i+1]){
            size++;
            i++;
        }
        if(size>max){
            while (ans.size ()!=0){
                ans.remove ( ans.size ()-1 );
            }
            ans.add ( ints[i] );
            max = size;
        }else if(size==max) ans.add ( ints[i] );
        i++;
    }
    return ans.stream ().mapToInt ( Integer::intValue ).toArray ();
}

public void inorder(TreeNode root){
    if(root==null) return;
    inorder ( root.left );
    list.add ( root.val );
    inorder ( root.right );
}

报了什么错