日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Collections Arrays你会用么?

發(fā)布時間:2025/6/16 编程问答 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Collections Arrays你会用么? 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

title: Collections Arrays你會用么? tags:

  • Collections
  • Arrays
  • toArray
  • asList
  • jcf categories: jcf date: 2017-12-08 13:20:26

背景

JDK給我們提供了一些工具類 用來操作集合等。

通常來說命名規(guī)則就是XXXXs 比如Collections 比如Arrays

看到部分同學(xué)使用如下

遍歷時這樣

測試

public class CollectionsTest {@Test(expected = UnsupportedOperationException.class)public void testEmptyCollections() {List<TbUser> userList = Collections.emptyList();userList.add(new TbUser());}@Testpublic void testToArray() {List<String> list = Lists.newArrayList("1", "2", "3");Object[] objects = list.toArray();}@Testpublic void testToArray2() {List<String> list = Lists.newArrayList("1", "2", "3");String[] strings = list.toArray(new String[list.size()]);} 復(fù)制代碼

解讀EmptyList是無法add會拋出

UnsupportedOperationException 復(fù)制代碼

因?yàn)閑mptyList如下

private static class EmptyList<E>extends AbstractList<E>implements RandomAccess, Serializable {private static final long serialVersionUID = 8842843931221139166L;public Iterator<E> iterator() {return emptyIterator();}public ListIterator<E> listIterator() {return emptyListIterator();}public int size() {return 0;}public boolean isEmpty() {return true;}public boolean contains(Object obj) {return false;}public boolean containsAll(Collection<?> c) { return c.isEmpty(); }public Object[] toArray() { return new Object[0]; }public <T> T[] toArray(T[] a) {if (a.length > 0)a[0] = null;return a;}public E get(int index) {throw new IndexOutOfBoundsException("Index: "+index);}public boolean equals(Object o) {return (o instanceof List) && ((List<?>)o).isEmpty();}public int hashCode() { return 1; }@Overridepublic boolean removeIf(Predicate<? super E> filter) {Objects.requireNonNull(filter);return false;}@Overridepublic void replaceAll(UnaryOperator<E> operator) {Objects.requireNonNull(operator);}@Overridepublic void sort(Comparator<? super E> c) {}// Override default methods in Collection@Overridepublic void forEach(Consumer<? super E> action) {Objects.requireNonNull(action);}@Overridepublic Spliterator<E> spliterator() { return Spliterators.emptySpliterator(); }// Preserves singleton propertyprivate Object readResolve() {return EMPTY_LIST;}} 復(fù)制代碼

當(dāng)使用toArray時需要最好傳入指定類型的數(shù)組【否則類型不對】

public class ArraysTest {@Testpublic void testAsList0() {Set<String> set = Sets.newSet("a", "b", "c");List strList = Arrays.asList(set);}@Testpublic void testAsList1() {Set<String> set = Sets.newSet("a", "b", "c");List<Set<String>> strSetList = Arrays.asList(set);}@Testpublic void testAsList2() {String[] strs;strs = new String[]{"a", "b", "c"};List strings = Arrays.asList(strs);Assert.assertEquals(strings.size(), 3);}@Testpublic void testAsList3() {Object strs;strs = new String[]{"a", "b", "c"};List strings = Arrays.asList(strs);Assert.assertEquals(strings.size(), 1);}@Test(expected = UnsupportedOperationException.class)public void testAsList4() {List<String> list = Arrays.asList("1", "2", "3");list.add("4");}@Test(expected = ClassCastException.class)public void testAsList5() {List<Integer> list = new ArrayList<>();list.add(1);List list2 = list;list2.add("1223");for (Integer integer : list) {System.out.println(integer);}}@Testpublic void testAsList6() {Object strs;strs = new String[]{"a", "b", "c"};List strings = Arrays.asList((String[])strs);Assert.assertEquals(strings.size(), 3);}} 復(fù)制代碼

解讀

指的注意的是asList接受可變參數(shù) 【及其容易引起問題】

比如testAsList2 testAsList3 testAsList6

主要在于聲明等不同就會造成最終list的size完全不同!慎用可變參數(shù)!

Arrays.asList返回ArrayList

/*** Returns a fixed-size list backed by the specified array. (Changes to* the returned list "write through" to the array.) This method acts* as bridge between array-based and collection-based APIs, in* combination with {@link Collection#toArray}. The returned list is* serializable and implements {@link RandomAccess}.** <p>This method also provides a convenient way to create a fixed-size* list initialized to contain several elements:* <pre>* List<String> stooges = Arrays.asList("Larry", "Moe", "Curly");* </pre>** @param <T> the class of the objects in the array* @param a the array by which the list will be backed* @return a list view of the specified array*/@SafeVarargs@SuppressWarnings("varargs")public static <T> List<T> asList(T... a) {return new ArrayList<>(a);} 復(fù)制代碼

稍不注意就會踩到大坑!這個ArrayList是李鬼 全稱是java.util.Arrays.ArrayList

該'arrayList' 不支持正常的add操作會拋出UnsupportedOperationException 【見testAsList4】

List的泛型完全支持用戶想在Integer的List中放入String 【多么變態(tài)的需求】一個朋友圈泛型問題引發(fā)的“案子”?不過真的這么做了 在取的時候就容易踩到巨坑!

還是別了吧!

總結(jié)

以上是生活随笔為你收集整理的Collections Arrays你会用么?的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。