android Collections.addAll()的使用



今天,简单讲讲


android Collections.addAll()的使用。



我们在编码时经常需要将一些元素添加到一个List中,此时我们一般有两种选择:Collections.addAll()或者是ArrayList.addAll()。在需添加元素比较少的情况下,并在List的size在万级以上时,一般建议Collections.addAll(),但当List的size较小时,两种方法没有什么区别,甚至ArrayList.addAll()更好。


当我们将一个数组添加到一个List中时,Collections.addAll()和ArrayList.addAll()没有什么性能差异。

但当我们将一个List添加到一个List中时,建议使用ArrayList.addAll()。

添加数组和列表,要比添加元素快。

HashMap和HashSet有类似用法。


下面简单介绍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));
         }
     }
 }


这里需要注意一点,使用Collections.addAll还是Arrays.asList生成List,当修改原始数据时,均会影响到List里的数据   。


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方法相关源码如下所示:

@SafeVarargs
@SuppressWarnings("varargs")
public static <T> List<T> asList(T... a) {
    return new ArrayList<>(a);// 内部私有类
}

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会影响到list里的target object。下面是我测试的代码:

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));
}


运行结果

-------- 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"}]


结论,不管是Collections.addAll还是Arrays.asList,修改原始数据时,均会影响到List里的数据


android Collections.addAll()的使用就讲完了。


就这么简单。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值