關(guān)于List和數(shù)組轉(zhuǎn)化問(wèn)題

回過(guò)頭來(lái)復(fù)習(xí)Java基礎(chǔ)的時(shí)候匿情,發(fā)現(xiàn)當(dāng)初這一塊有很多細(xì)節(jié)都沒(méi)有掌握到宿接,現(xiàn)在記錄下來(lái)管行,以更好的夯實(shí)基礎(chǔ)

List轉(zhuǎn)數(shù)組

第一種方式是以無(wú)參形式直接返回一個(gè)Object[]類型的數(shù)組业舍,不過(guò)這種方法會(huì)導(dǎo)致丟失類型信息赎懦,故使用較少起胰。

public class Main {

? ? public static void main(String[] args) {

? ? List list=new ArrayList();

? ? list.add(1);

? ? list.add(2);

? ? list.add(3);

? ? list.add(4);

? ? Object[] integer=list.toArray();

? ? System.out.println(integer.getClass());

? ? for (int i=0;i<integer.length;i++){

? ? ? ? System.out.println(i);

? ? }

? ? }

}

輸出結(jié)果

0

1

2

3

class [Ljava.lang.Object;

第二種方式是給toArray(T[])傳入一個(gè)類型相同的Array久又,List內(nèi)部自動(dòng)把元素復(fù)制到傳入的Array中:

public class Main {

? ? public static void main(String[] args) {

? ? List<Integer> list=new ArrayList<>();

? ? list.add(3);

? ? list.add(1);

? ? Integer[] idex=list.toArray(new Integer[3]);

? ? for (Integer i:idex){

? ? ? ? System.out.println(i);

? ? }

? ? }

}

輸出結(jié)果:

3

1

null

這種方式有兩個(gè)注意點(diǎn):

1、傳入數(shù)組大小問(wèn)題效五。當(dāng)傳入的數(shù)組不夠大時(shí)地消,List內(nèi)部會(huì)創(chuàng)建一個(gè)剛好足夠大的數(shù)組,填充后返回畏妖,當(dāng)傳入的數(shù)組比List元素還要多的時(shí)候脉执,填充完元素,剩下的一律為null戒劫。

最好的方法是

Integer[] idex=list.toArray(newInteger[list.size()])

2半夷、傳入類型匹配問(wèn)題。

? ? <T> T[] toArray(T[] a);

toArray中的泛型通配符為T迅细,所以可以傳入其他類型的數(shù)組巫橄。以Number類型為例:

public class Main {

? ? public static void main(String[] args) {

? ? ? ? List<Integer> list=new ArrayList<>();

? ? ? ? list.add(3);

? ? ? ? list.add(1);

? ? ? ? Number[] idex=list.toArray(new Number[3]);

? ? ? ? for (Number i:idex){

? ? ? ? ? ? System.out.println(i);

? ? ? ? }

? ? }

}

輸出結(jié)果

3

1

null

若類型不匹配,則拋出ArrayStoreException異常茵典。

public class Main {

? ? public static void main(String[] args) {

? ? ? ? List<Integer> list=new ArrayList<>();

? ? ? ? list.add(3);

? ? ? ? list.add(1);

? ? ? ? Float[] idex=list.toArray(new Float[3]);

? ? ? ? for (Float i:idex){

? ? ? ? ? ? System.out.println(i);

? ? ? ? }

? ? }

}

Exception in thread "main" java.lang.ArrayStoreException


數(shù)組轉(zhuǎn)List

數(shù)組轉(zhuǎn)換為集合使用的是數(shù)組的工具類Arrays的靜態(tài)方法asList嗦随。查看API文檔可知該方法返回由指定數(shù)組支持的固定大小的列表。

public class Main {

? ? public static void main(String[] args) {

? ? ? ? String[] name=new String[]{"Enoch","Star"};

? ? ? ? List<String> list=Arrays.asList(name);

? ? ? ? System.out.println(list);

? ? }

}

輸出結(jié)果:

[Enoch, Star]

需要注意的是,返回的List不一定就是ArrayList或是LinkedList枚尼,該接口返回的是一個(gè)只讀的List贴浙。

當(dāng)對(duì)其調(diào)用add()、remove()會(huì)拋出UnsupportedOperationException署恍。

因?yàn)檫@個(gè)新集合是由數(shù)組轉(zhuǎn)換過(guò)來(lái)的崎溃,那么該集合就表示原來(lái)的數(shù)組,所以對(duì)集合的操作就是對(duì)數(shù)組的操作盯质。那么添加元素會(huì)導(dǎo)致原數(shù)組擴(kuò)容袁串,那么就不能表示原來(lái)的數(shù)組了。所以不允許向該集合添加新元素了呼巷。

例:

public class Main {

? ? public static void main(String[] args) {

? ? ? ? String[] name=new String[]{"Enoch","Star"};

? ? ? ? List<String> list=Arrays.asList(name);

? ? ? ? System.out.println(list);

? ? ? ? list.set(0,"cool");

? ? ? ? System.out.println(list);

? ? ? ? list.add("cool");

? ? }

}

輸出結(jié)果

[Enoch, Star]

[cool, Star]

Exception in thread "main" java.lang.UnsupportedOperationException

at java.util.AbstractList.add(AbstractList.java:148)

at java.util.AbstractList.add(AbstractList.java:108)

那么如何實(shí)現(xiàn)添加元素這類功能?

我們通過(guò)實(shí)驗(yàn)知道數(shù)組轉(zhuǎn)化為L(zhǎng)ist是不能增刪數(shù)據(jù)的囱修,如果需要增刪,可以利用空集合調(diào)用addAll方法將轉(zhuǎn)化后的集合全部添加新集合就可以進(jìn)行操作了王悍。

public class Main {

? ? public static void main(String[] args) {

? ? ? ? String[] name=new String[]{"Enoch","Star"};

? ? ? ? List<String> list=Arrays.asList(name);

? ? ? ? List<String> newList=new ArrayList<>();

? ? ? ? newList.addAll(list);

? ? ? ? System.out.println(newList);

? ? ? ? newList.add("cool");

? ? ? ? System.out.println(newList);

? ? }

}

public class Main {

? ? public static void main(String[] args) {

? ? ? ? String[] name=new String[]{"Enoch","Star"};

? ? ? ? List<String> list=Arrays.asList(name);

? ? ? ? List<String> newList=new ArrayList<>(list);

? ? ? ? System.out.println(newList);

? ? ? ? newList.add("cool");

? ? ? ? System.out.println(newList);

? ? }

}

輸出結(jié)果

[Enoch, Star]

[Enoch, Star, cool]

以上內(nèi)容都是我自己的一些感想破镰,分享出來(lái)歡迎大家指正,順便求一波關(guān)注压储,有想法的伙伴可以評(píng)論或者私信我哦~


作者:不二鑫

出處:https://juejin.im/post/5e58cf52518825490f722d2d

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末鲜漩,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子集惋,更是在濱河造成了極大的恐慌孕似,老刑警劉巖,帶你破解...
    沈念sama閱讀 222,252評(píng)論 6 516
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件刮刑,死亡現(xiàn)場(chǎng)離奇詭異喉祭,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)雷绢,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,886評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門泛烙,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人习寸,你說(shuō)我怎么就攤上這事∩倒ぃ” “怎么了霞溪?”我有些...
    開(kāi)封第一講書人閱讀 168,814評(píng)論 0 361
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)中捆。 經(jīng)常有香客問(wèn)我鸯匹,道長(zhǎng),這世上最難降的妖魔是什么泄伪? 我笑而不...
    開(kāi)封第一講書人閱讀 59,869評(píng)論 1 299
  • 正文 為了忘掉前任殴蓬,我火速辦了婚禮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘染厅。我一直安慰自己痘绎,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,888評(píng)論 6 398
  • 文/花漫 我一把揭開(kāi)白布肖粮。 她就那樣靜靜地躺著孤页,像睡著了一般。 火紅的嫁衣襯著肌膚如雪涩馆。 梳的紋絲不亂的頭發(fā)上行施,一...
    開(kāi)封第一講書人閱讀 52,475評(píng)論 1 312
  • 那天,我揣著相機(jī)與錄音魂那,去河邊找鬼蛾号。 笑死,一個(gè)胖子當(dāng)著我的面吹牛涯雅,可吹牛的內(nèi)容都是我干的鲜结。 我是一名探鬼主播,決...
    沈念sama閱讀 41,010評(píng)論 3 422
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼斩芭,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼轻腺!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起划乖,我...
    開(kāi)封第一講書人閱讀 39,924評(píng)論 0 277
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤贬养,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后琴庵,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體误算,經(jīng)...
    沈念sama閱讀 46,469評(píng)論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,552評(píng)論 3 342
  • 正文 我和宋清朗相戀三年迷殿,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了儿礼。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,680評(píng)論 1 353
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡庆寺,死狀恐怖蚊夫,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情懦尝,我是刑警寧澤知纷,帶...
    沈念sama閱讀 36,362評(píng)論 5 351
  • 正文 年R本政府宣布,位于F島的核電站陵霉,受9級(jí)特大地震影響琅轧,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜踊挠,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,037評(píng)論 3 335
  • 文/蒙蒙 一乍桂、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦睹酌、人聲如沸权谁。這莊子的主人今日做“春日...
    開(kāi)封第一講書人閱讀 32,519評(píng)論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)闯传。三九已至,卻和暖如春卤妒,著一層夾襖步出監(jiān)牢的瞬間甥绿,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書人閱讀 33,621評(píng)論 1 274
  • 我被黑心中介騙來(lái)泰國(guó)打工则披, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留共缕,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 49,099評(píng)論 3 378
  • 正文 我出身青樓士复,卻偏偏與公主長(zhǎng)得像图谷,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子阱洪,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,691評(píng)論 2 361

推薦閱讀更多精彩內(nèi)容

  • mean to add the formatted="false" attribute?.[ 46% 47325/...
    ProZoom閱讀 2,701評(píng)論 0 3
  • 一便贵、為什么會(huì)出現(xiàn)集合類 1.集合是一個(gè)容器,為了方便的對(duì)多個(gè)對(duì)象進(jìn)行操作冗荸。 2.集合容器同數(shù)組容器的...
    大禹編程扛把子閱讀 582評(píng)論 0 0
  • 第四天 數(shù)組【悟空教程】 第04天 Java基礎(chǔ) 第1章數(shù)組 1.1數(shù)組概念 軟件的基本功能是處理數(shù)據(jù)承璃,而在處理數(shù)...
    Java幫幫閱讀 1,603評(píng)論 0 9
  • /*【程序21】 * 作者 南楓題目:求1+2!+3!+...+20!的和 1. 程序分析:此程序只是把累加變成了...
    HUC南楓閱讀 441評(píng)論 0 0
  • 50道經(jīng)典Java編程練習(xí)題,將數(shù)學(xué)思維運(yùn)用到編程中來(lái)蚌本。抱歉哈找不到文章的原貼了盔粹,有冒犯的麻煩知會(huì)聲哈~ 1.指數(shù)...
    OSET我要編程閱讀 6,966評(píng)論 0 9