有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

(数组)列出Java中的实现

数组列表实现的问题:

我的代码

List<Integer> arrayList=new ArrayList<Integer>(3);
arrayList=Arrays.asList(10,20);
System.out.println(arrayList.size());
//arrayList.add(30);
System.out.println(arrayList.size());

我得到unsupportedException at line 4

问题是什么


共 (4) 个答案

  1. # 1 楼答案

    从数组转换为集合Obejct时。i、 例如,从基于数组到基于集合的API,然后它将为您提供固定大小的集合对象,因为数组的行为是固定大小的

    java.util.Arrays.asList( T... a )

    收集样品进行确认。

    public class Arrays {
        public static <T> List<T> asList(T... a) {
            return new java.util.Arrays.ArrayList.ArrayList<>(a); // Arrays Inner Class ArrayList
        }
        //...
        private static class ArrayList<E> extends AbstractList<E> implements RandomAccess, java.io.Serializable {
            //...
        }
    }
    public abstract class AbstractList<E> extends AbstractCollection<E> implements List<E> {
        public void add(int index, E element) {
            throw new UnsupportedOperationException();
        }
        public E set(int index, E element) {
            throw new UnsupportedOperationException();
        }
        public E remove(int index) {
            throw new UnsupportedOperationException();
        }
    }
    

    ^{}中可以看到java.util.Arrays.ArrayList类不@Override add(index, element), set(index, element), remove(index)。因此,从继承开始,它执行超类add()函数,该函数抛出^{}

    因为AbstractList<E>是一个抽象类,所以它提供了iterator() and listIterator()的实现,以便我们可以在列表对象上迭代

    List<String> list_of_Arrays = Arrays.asList(new String[] { "a", "b" ,"c"});
    
    try {
        list_of_Arrays.add("Yashwanth.M");
    } catch(java.lang.UnsupportedOperationException e) {
        System.out.println("List Interface executes AbstractList add() fucntion which throws UnsupportedOperationException.");
    }
    System.out.println("Arrays → List : " + list_of_Arrays);
    
    Iterator<String> iterator = list_of_Arrays.iterator();
    while (iterator.hasNext()) System.out.println("Iteration : " + iterator.next() );
    
    ListIterator<String> listIterator = list_of_Arrays.listIterator();
    while (listIterator.hasNext())    System.out.println("Forward  iteration : " + listIterator.next() );
    while(listIterator.hasPrevious()) System.out.println("Backward iteration : " + listIterator.previous());
    
  2. # 2 楼答案

    Pass the array in the ArrayList's constructor. For Example:

    List<Integer> arrayList=new ArrayList<Integer>(Arrays.asList(10,20));
    System.out.println(arrayList.size());
    arrayList.add(30);
    System.out.println(arrayList.size()); 
    
  3. # 3 楼答案

    阵列。asList返回一个不可完全修改的集合。要添加或删除元素,可以使用接受集合的ArrayList构造函数包装数组返回的集合。asList

    List<Integer> arrayList = new ArrayList(Arrays.asList(10,20));
    System.out.println(arrayList.size()); //2
    arrayList.add(30);
    System.out.println(arrayList.size()); //3
    
  4. # 4 楼答案

    Arrays.asList返回固定大小的数组,它是AbstractList的一个直接子类,显然不支持addremove函数

    如果您打算稍后执行addremove函数,可以尝试ArrayList而不是Arrays.asList;它们都是List的类型,但有不同的实现

    List<Integer> arrayList = new ArrayList<Integer>(3);
    Collections.addAll(arrayList, 10, 20);
    System.out.println(arrayList.size()); // size = 2
    arrayList.add(30); // OK
    System.out.println(arrayList.size()); // size = 3