android Collections.addAll()的使用
今天,簡(jiǎn)單講講
android Collections.addAll()的使用。
我們?cè)诰幋a時(shí)經(jīng)常需要將一些元素添加到一個(gè)List中,此時(shí)我們一般有兩種選擇:Collections.addAll()或者是ArrayList.addAll()。在需添加元素比較少的情況下,并在List的size在萬級(jí)以上時(shí),一般建議Collections.addAll(),但當(dāng)List的size較小時(shí),兩種方法沒有什么區(qū)別,甚至ArrayList.addAll()更好。
當(dāng)我們將一個(gè)數(shù)組添加到一個(gè)List中時(shí),Collections.addAll()和ArrayList.addAll()沒有什么性能差異。
但當(dāng)我們將一個(gè)List添加到一個(gè)List中時(shí),建議使用ArrayList.addAll()。
添加數(shù)組和列表,要比添加元素快。
HashMap和HashSet有類似用法。
下面簡(jiǎn)單介紹Collections.addAll()的使用代碼
public class CollectionsTest {public static void main(String[] args) {List<String> l = new ArrayList<String>();CollectionsTest.add(l);String[] s = {"s1","s2"};Collections.addAll(l, s);Collections.addAll(l, "a1","a2");UtilTools.printCollection(l);}public static void add(Collection<String> c){for(char i='a';i<'g';i++){c.add(String.valueOf(i));}}}
這里需要注意一點(diǎn),使用Collections.addAll還是Arrays.asList生成List,當(dāng)修改原始數(shù)據(jù)時(shí),均會(huì)影響到List里的數(shù)據(jù)?? 。
Collections.addAll方法的源碼如下所示:
@SafeVarargs public static <T> boolean addAll(Collection<? super T> c, T... elements) {boolean result = false;for (T element : elements)result |= c.add(element);return result; }
Arrays.asList方法相關(guān)源碼如下所示:
@SafeVarargs @SuppressWarnings("varargs") public static <T> List<T> asList(T... a) {return new ArrayList<>(a);// 內(nèi)部私有類 }ArrayList(E[] array) {a = Objects.requireNonNull(array); }public static <T> T requireNonNull(T obj) {if (obj == null)throw new NullPointerException();return obj; }
從源碼來看,不管是Collections.addAll,還是Arrays.asList,均是引用傳遞,修改source object會(huì)影響到list里的target object。下面是我測(cè)試的代碼:
public static void main(String[] args) {User user_1 = new User();user_1.put("name", "user_1");user_1.put("value", "v_1");User user_2 = new User();user_2.put("name", "user_2");user_2.put("value", "v_2");List<User> asList = Arrays.asList(user_1, user_2);List<User> arraylist = new ArrayList<>();Collections.addAll(arraylist, user_1, user_2);user_1.put("value", "v_a_1");user_2.put("value", "v_a_2");System.out.println("-------- asList --------");System.out.println(JsonKit.toJson(asList));System.out.println("\n-------- arraylist --------");System.out.println(JsonKit.toJson(arraylist)); }
運(yùn)行結(jié)果
-------- asList -------- [{"name":"user_1","value":"v_a_1"},{"name":"user_2","value":"v_a_2"}]-------- arraylist -------- [{"name":"user_1","value":"v_a_1"},{"name":"user_2","value":"v_a_2"}]
結(jié)論,不管是Collections.addAll還是Arrays.asList,修改原始數(shù)據(jù)時(shí),均會(huì)影響到List里的數(shù)據(jù)
android Collections.addAll()的使用就講完了。
就這么簡(jiǎn)單。
總結(jié)
以上是生活随笔為你收集整理的android Collections.addAll()的使用的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: android Arrays.fill(
- 下一篇: android Lint优化代码