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()的使用就讲完了。

 

就这么简单。

人已赞赏
Android文章

android Arrays.fill()的使用

2020-3-13 20:21:19

Android文章

android 键盘的隐藏与显示

2020-3-13 20:23:32

个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
有新消息 消息中心
搜索