Java集合List與Array的相互轉(zhuǎn)換
List 轉(zhuǎn) Array
使用集合轉(zhuǎn)數(shù)組的方法,必須使用集合的 toArray(T[] array),傳入的是類型完全一樣的數(shù)組,大小就是 list.size()。
反例:直接使用 toArray 無(wú)參方法存在問(wèn)題,此方法返回值只能是 Object[] 類,若強(qiáng)轉(zhuǎn)其它類型數(shù)組將出現(xiàn) ClassCastException 錯(cuò)誤。
反例:
public static void main(String[] args) throws Exception { List<String> list = new ArrayList<String>(); list.add("A"); list.add("B"); list.add("C"); String[] array = (String[])list.toArray(); }
異常:
Exception in thread "main" java.lang.ClassCastException: [Ljava.lang.Object; cannot be cast to [Ljava.lang.String;
正例:
public static void main(String[] args) throws Exception { List<String> list = new ArrayList<String>(); list.add("A"); list.add("B"); list.add("C"); // 使用泛型,無(wú)需顯式類型轉(zhuǎn)換 String[] array = list.toArray(new String[list.size()]); System.out.println(array[0]); }
Array 轉(zhuǎn) List
使用工具類 Arrays.asList() 把數(shù)組轉(zhuǎn)換成集合時(shí),不能使用其修改集合相關(guān)的方法,它的 add/remove/clear 方法會(huì)拋出 UnsupportedOperationException 異常。
說(shuō)明:asList 的返回對(duì)象是一個(gè) Arrays 內(nèi)部類,并沒有實(shí)現(xiàn)集合的修改方法。Arrays.asList體現(xiàn)的是適配器模式,只是轉(zhuǎn)換接口,后臺(tái)的數(shù)據(jù)仍是數(shù)組。
String[] str = new String[] { "a", "b" }; List list = Arrays.asList(str);
第一種情況:list.add("c"); 運(yùn)行時(shí)異常。
Exception in thread "main" java.lang.UnsupportedOperationException
第二種情況:list[0]= "gujin"; 那么 list.get(0) 也會(huì)隨之修改。
說(shuō)明:
@SafeVarargs @SuppressWarnings("varargs") public static <T> List<T> asList(T... a) { return new ArrayList<>(a); }
這個(gè) ArrayList 并不是 java.util 中的 ArrayList,而是一個(gè)內(nèi)部的 ArrayList,不提供 add 等修改操作。
private static class ArrayList<E> extends AbstractList<E> implements RandomAccess, java.io.Serializable { private static final long serialVersionUID = -2764017481108945198L; private final E[] a;
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- JAVA ArrayList詳細(xì)介紹(示例)
- java的arraylist排序示例(arraylist用法)
- java中ArrayList 、LinkList的區(qū)別分析
- Java ArrayList 數(shù)組之間相互轉(zhuǎn)換
- 淺析java中ArrayList與Vector的區(qū)別以及HashMap與Hashtable的區(qū)別
- java ArrayList集合中的某個(gè)對(duì)象屬性進(jìn)行排序的實(shí)現(xiàn)代碼
- 2種Java刪除ArrayList中的重復(fù)元素的方法
- java使用ArrayList遍歷及效率比較實(shí)例分析
- java arrayList遍歷的四種方法及Java中ArrayList類的用法
- java教程之二個(gè)arraylist排序的示例分享
相關(guān)文章
Java synchronized輕量級(jí)鎖的核心原理詳解
這篇文章主要為大家詳細(xì)介紹了Java synchronized輕量級(jí)鎖的核心原理,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來(lái)幫助2022-03-03java實(shí)現(xiàn)簡(jiǎn)易貪吃蛇游戲
這篇文章主要為大家詳細(xì)介紹了java實(shí)現(xiàn)簡(jiǎn)易貪吃蛇游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2020-12-12Java實(shí)現(xiàn)AES算法的實(shí)例代碼
高級(jí)加密標(biāo)準(zhǔn)(AES,Advanced?Encryption?Standard)為最常見的對(duì)稱加密算法(微信小程序加密傳輸就是用這個(gè)加密算法的),本文重點(diǎn)給大家介紹Java實(shí)現(xiàn)AES算法的實(shí)例代碼,感興趣的朋友一起看看吧2022-02-02SpringBoot整合MD5加密完成注冊(cè)和登錄方式
MD5(MessageDigestAlgorithm5)是一種常見的哈希算法,用于生成固定長(zhǎng)度(128位)的哈希值,主要應(yīng)用于數(shù)據(jù)完整性校驗(yàn)和密碼存儲(chǔ),MD5具有快速計(jì)算、不可逆性和抗碰撞性等特點(diǎn),盡管存在碰撞漏洞,MD5仍廣泛應(yīng)用于文件下載校驗(yàn)和數(shù)字簽名等場(chǎng)景2024-10-10Java中實(shí)現(xiàn)線程間通信的實(shí)例教程
線程通信的目標(biāo)是使線程間能夠互相發(fā)送信號(hào),另一方面線程通信使線程能夠等待其他線程的信號(hào),這篇文章主要給大家介紹了關(guān)于Java中實(shí)現(xiàn)線程間通信的相關(guān)資料,本文通過(guò)示例代碼介紹的非常詳細(xì),需要的朋友可以參考下2021-09-09