激情久久久_欧美视频区_成人av免费_不卡视频一二三区_欧美精品在欧美一区二区少妇_欧美一区二区三区的

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

香港云服务器
服務器之家 - 編程語言 - Java教程 - 數組與List之間相互轉換的方法詳解

數組與List之間相互轉換的方法詳解

2019-10-16 10:29java之家 Java教程

本文是對數組與List之間相互轉換的方法進行了詳細的分析介紹,需要的朋友可以過來參考下。希望對大家有所幫助

1.List轉換成為數組。(這里的List是實體是ArrayList) 
調用ArrayList的toArray方法。

toArray

public T[] toArray(T[] a)返回一個按照正確的順序包含此列表中所有元素的數組;返回數組的運行時類型就是指定數組的運行時類型。如果列表能放入指定的數組,則返回放入此列表元素的數組。否則,將根據指定數組的運行時類型和此列表的大小分配一個新的數組。

如果指定的數組能容納列表并有剩余空間(即數組的元素比列表的多),那么會將數組中緊跟在集合末尾的元素設置為 null。這對確定列表的長度很有用,但只 在調用方知道列表中不包含任何 null 元素時才有用。

指定者:

接口 Collection 中的 toArray

指定者:

接口 List 中的 toArray

覆蓋:

類 AbstractCollection 中的 toArray

參數:

a - 要存儲列表元素的數組,如果它足夠大的話;否則,它是一個為存儲列表元素而分配的、具有相同運行時類型的新數組。

返回:

包含列表元素的數組。

拋出:

ArrayStoreException - 如果 a 的運行時類型不是此列表中每個元素的運行時類型的超類型。 
具體用法: 

復制代碼代碼如下:


List list = new ArrayList();

 

list.add("1");

list.add("2");

final int size = list.size();

String[] arr = (String[])list.toArray(new String[size]);


2.數組轉換成為List
調用Arrays的asList方法.

 

JDK 1.4對java.util.Arrays.asList的定義,函數參數是Object[]。所以,在1.4中asList()并不支持基本類型的數組作參數。

JDK 1.5中,java.util.Arrays.asList的定義,函數參數是Varargs, 采用了泛型實現。同時由于autoboxing的支持,使得可以支持對象數組以及基本類型數組。

不過在使用時,當傳入基本數據類型的數組時,會出現小問題,會把傳入的數組整個當作返回的List中的第一個元素,例如:

復制代碼代碼如下:

public static void main(String[] args){
    int[] a1 = new int[]{1,2,3};
    String[] a2 = new String[]{"a","b","c"};

    System.out.println(Arrays.asList(a1));
    System.out.println(Arrays.asList(a2));
}


1.打印結果如下:

復制代碼代碼如下:

1
2 [[I@dc8569]
[a, b, c] 


下面說說Arrays.asList()的返回值:

 

JDK文檔是這么說的:
public static <T> List<T> asList(T... a) 返回一個受指定數組支持的固定大小的列表。(對返回列表的更改會“直接寫”到數組。)此方法同 Collection.toArray() 一起,充當了基于數組的 API 與基于 collection 的 API 之間的橋梁。返回的列表是可序列化的,并且實現了 RandomAccess。此方法還提供了一個創建固定長度的列表的便捷方法,該列

復制代碼代碼如下:

/**
 * @serial include
 */
 private static class ArrayList<E>extends AbstractList<E>implements RandomAccess, java.io.Serializable {
     private static final long serialVersionUID = -2764017481108945198L;
     private final E[] a;

     ArrayList(E[] array) {
         if (array == null)
         throw new NullPointerException();
         a = array;
     }

     public int size() {
        return a.length;
     }

     public Object[] toArray() {
        return a.clone();
     }

     public <T> T[] toArray(T[] a) {
         int size = size();
         if (a.length < size)
            return Arrays.copyOf(this.a, size, (Class<? extends T[]>) a.getClass());
         System.arraycopy(this.a,0, a, 0, size);
         if (a.length > size)
            a[size] = null;
         return a;
     }

     public E get(int index) {
        return a[index];
     }

     public E set(int index, E element) {
         E oldValue = a[index];
         a[index] = element;
         return oldValue;
     }

     public int indexOf(Object o) {
         if (o == null) {
             for (int i = 0; i < a.length; i++)
             if (a[i] == null)
             return i;
         }else {
             for (int i = 0; i < a.length; i++)
             if (o.equals(a[i]))
             return i;
         }
         return -1;
     }

     public boolean contains(Object o) {
        return indexOf(o) != -1;
     }
}


表被初始化為包含多個元素: List<String> stooges = Arrays.asList("Larry", "Moe", "Curly");
我們都知道,List的一個典型的特性就是其長度是可變的,我們可以很方便地對它進行插入和刪除元素的操作,這是它與數組所存在的一個很大的區別,后者的長度是固定的,而且我們不能從數組中刪除元素,只能修改元素的值。利用Arrays.asList(array)將返回一個List,然而這個返回的List并不支持add和remove的操作。

 

這是什么原因呢?

Arrays.asList源碼:

復制代碼代碼如下:

1
2
3 public static <T> List<T> asList(T... a) {
   return new ArrayList<T>(a);


這里的ArrayList并不是java.util.ArrayList,而是Arrays的內部類:

 

我們可以看到該內部類繼承的是AbstractList,下面是AbstractList的add和remove方法源碼:

復制代碼代碼如下:

public boolean add(E e) {
    add(size(), e);
    return true;
}

public void add(int index, E element) {
    throw new UnsupportedOperationException();
}

public E remove(int index) {
    throw new UnsupportedOperationException();
}


所以,當我們對Arrays.asList返回的List進行添加或刪除時將會報 java.lang.UnsupportedOperationException 異常。

延伸 · 閱讀

精彩推薦
423
Weibo Article 1 Weibo Article 2 Weibo Article 3 Weibo Article 4 Weibo Article 5 Weibo Article 6 Weibo Article 7 Weibo Article 8 Weibo Article 9 Weibo Article 10 Weibo Article 11 Weibo Article 12 Weibo Article 13 Weibo Article 14 Weibo Article 15 Weibo Article 16 Weibo Article 17 Weibo Article 18 Weibo Article 19 Weibo Article 20 Weibo Article 21 Weibo Article 22 Weibo Article 23 Weibo Article 24 Weibo Article 25
主站蜘蛛池模板: 午夜精品成人 | 免费一级欧美 | 成人午夜一区二区 | 成人福利在线免费观看 | 91美女视频在线观看 | 91色琪琪电影亚洲精品久久 | 欧美黑人一级 | 午夜影院操 | 日韩剧情片 | 国产成人强伦免费视频网站 | 黄色三级网站 | 亚洲视频高清 | 成人毛片免费播放 | 亚洲精品在线观看网站 | 奶子吧naiziba.cc免费午夜片在线观看 | 中国3xxxx| 性片久久| 日韩激情一区 | 黄色免费入口 | 国产刺激高潮av | 国产成人av一区 | 91精品国 | 精品免费国产一区二区三区 | 亚洲午夜久久久精品一区二区三区 | 麻豆蜜桃在线观看 | 美女黄色毛片免费看 | av在线免费看片 | 国产精品免费大片 | 撅高 自己扒开 调教 | 成人福利在线看 | 黄色片在线免费播放 | 一区二区三区四区高清视频 | 午夜视频亚洲 | 亚洲天堂第一页 | 激情亚洲一区二区三区 | 亚洲福利在线观看视频 | 久久久噜噜噜久久熟有声小说 | 久久色网站 | 久草在线综合 | 欧美视频国产 | 久久成人午夜视频 |