集合轉(zhuǎn)數(shù)組和數(shù)組轉(zhuǎn)集合
- 使用集合轉(zhuǎn)數(shù)組的方法蜘渣,必須使用集合的 toArray(T[] array)嫌褪,傳入的是類型完全 一樣的數(shù)組器一,大小就是 list.size()
說明:使用 toArray 帶參方法障涯,入?yún)⒎峙涞臄?shù)組空間不夠大時宪躯,toArray 方法內(nèi)部將重新分配 內(nèi)存空間乔宿,并返回新數(shù)組地址;
如果數(shù)組元素大于實(shí)際所需访雪,下標(biāo)為[ list.size() ]的數(shù)組 元素將被置為 null详瑞,其它數(shù)組元素保持原值囤官,因此最好將方法入?yún)?shù)組大小定義與集合元素 個數(shù)一致。
如果直接使用 toArray 無參方法存在問題蛤虐,此方法返回值只能是 Object[]類党饮,若強(qiáng)轉(zhuǎn)其它 類型數(shù)組將出現(xiàn) ClassCastException 錯誤
List<String> list = new ArrayList<String>(2);
list.add("guan");
list.add("bao");
String[] array = new String[list.size()];
array = list.toArray(array);
- 使用工具類 Arrays.asList()把數(shù)組轉(zhuǎn)換成集合時,不能使用其修改集合相關(guān)的方 法驳庭,它的 add/remove/clear 方法會拋出 UnsupportedOperationException 異常刑顺。
asList 的返回對象是一個 Arrays 內(nèi)部類,并沒有實(shí)現(xiàn)集合的修改方法饲常。Arrays.asList 體現(xiàn)的是適配器模式蹲堂,只是轉(zhuǎn)換接口,后臺的數(shù)據(jù)仍是數(shù)組贝淤。
String[] str = new String[] { "you", "wu" };
List list = Arrays.asList(str);
第一種情況:list.add("yangguanbao"); 運(yùn)行時異常柒竞。
第二種情況:str[0] = "gujin"; 那么 list.get(0)也會隨之修改。
集合
創(chuàng)建集合時指定集合大小播聪,無法確認(rèn)容量時就設(shè)置為16朽基。
遍歷MAP集合使用entrySet 而不是keySet
說明:keySet 其實(shí)是遍歷了 2 次,一次是轉(zhuǎn)為 Iterator 對象离陶,另一次是從 hashMap 中取出 key 所對應(yīng)的 value稼虎。
而 entrySet 只是遍歷了一次就把 key 和 value 都放到了 entry 中,效 率更高招刨。如果是 JDK8霎俩,使用 Map.foreach 方法。
正例:values()返回的是 V 值集合沉眶,是一個 list 集合對象打却;
keySet()返回的是 K 值集合,是 一個 Set 集合對象谎倔;
entrySet()返回的是 K-V 值組合集合柳击。