簡體   English   中英

(數組)列出 Java 中的實現

[英](Array) List implementations in 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收到unsupportedException at line 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

Array.asList 返回一個不能完全修改的集合。 要添加或刪除元素,您可以使用接受 Collection 的 ArrayList 構造函數來包裝由 Arrays.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

當您從數組轉換為集合對象時。 即,基於數組到基於集合的 API 那么它將為您提供固定大小的集合對象,因為 Array 的行為是固定大小的。

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();
    }
}

above Source您可能會觀察到java.util.Arrays.ArrayList類沒有@Override add(index, element), set(index, element), remove(index) 因此,從繼承它執行超類add()函數,該函數拋出UnsupportedOperationException

由於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());

在 ArrayList 的構造函數中傳遞數組。 例如:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM