Arrays.asList
List<Integer> statusList = Arrays.asList(1,2); //底層源碼返回的ArrayList,并不是java.util包下的
System.out.println(statusList);//[1,2]
System.out.println(statusList.contains(1));//true
System.out.println(statusList.contains(3));//false
/**
添加元素到集合中,并沒有返回true,而是報異常
因為此處的Arrays.asList(1,2)返回的ArrayList卻是Arrays類的內(nèi)部類
也繼承了AbstractList類,重寫了很多方法,比如上面使用的contains方法,但是卻沒有重寫add方法,
*/
statusList.add(3);
System.out.println(statusList.contains(3));//java.lang.UnsupportedOperationException
總結(jié):
使用工具類 Arrays.asList()把數(shù)組轉(zhuǎn)換成集合時,不能使用其修改集合相關(guān)的方法,它的 add/remove/clear 方法會拋出 UnsupportedOperationException 異常。
ArrayList.subList
List<String> bookList = new ArrayList<>();
bookList.add("遙遠的救世主");
bookList.add("背叛");
bookList.add("天幕紅塵");
bookList.add("人生");
bookList.add("平凡的世界");
List<String> luyaoBookList = bookList.subList(3, 5);
System.out.println(bookList);
//subList返回的是bookList中索引從fromIndex(包含)到toIndex(不包含)的元素集合
System.out.println(luyaoBookList);//[人生,平凡的世界]
注意:
- 修改原集合元素的值,會影響子集合
- 修改原集合的結(jié)構(gòu),會引起ConcurrentModificationException異常
- 修改子集合元素的值,會影響原集合
- 修改子集合的結(jié)構(gòu),會影響原集合
// 修改原集合的值,影響到了子集合
bookList.set(3,"路遙-人生");
System.out.println(bookList);
System.out.println(luyaoBookList);
// 往原集合中添加元素,在遍歷子集合時,發(fā)生了ConcurrentModificationException異常
bookList.add("早晨從中午開始");
System.out.println(bookList);
System.out.println(luyaoBookList);
以上異常并不是在添加元素時發(fā)生的,而是在添加元素后,遍歷子集合時發(fā)生的
// 修改子集合的值,影響到了原集合
luyaoBookList.set(1,"路遙-平凡的世界");
System.out.println(bookList);
System.out.println(luyaoBookList);
// 往子集合中添加元素,影響到了原集合bookList。
luyaoBookList.add("早晨從中午開始");
System.out.println(bookList);
System.out.println(luyaoBookList);
總結(jié):文章來源:http://www.zghlxwxcb.cn/news/detail-814960.html
SubList類是ArrayList的內(nèi)部類,該構(gòu)造函數(shù)中也并沒有重新創(chuàng)建一個新的ArrayList,所以修改原集合或者子集合的元素的值,是會相互影響的。
ArrayList的subList方法,返回的是原集合的一個子集合(視圖),非結(jié)構(gòu)性修改任意一個集合的元素的值,都會彼此影響,結(jié)構(gòu)性修改原集合時,會報ConcurrentModificationException異常,結(jié)構(gòu)性修改子集合時,會影響原集合,所以使用時要注意,避免程序錯誤或者異常。文章來源地址http://www.zghlxwxcb.cn/news/detail-814960.html
到了這里,關(guān)于Arrays.asList和ArrayList.subList,集合添加/修改遇到的問題的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!