集合的意义(collection)
list叫列表
当我们想操作一批相同的对象时,我们在方法中传递,总不能一个个传递,就比如我要给你10个篮球,我家距离你家500米,我一定是找个袋子,或者篮子,或者xxxx把篮球装起来,一起给你送过去
-
用数组不可以吗?
数组当然可以,但是数组有个问题就是一旦申请空间,大小就固定了,我不见得每次都给你送固定个数的篮球,万一是100个呢,要是100000个呢,数组还有个问题就是空间需连续,我没有这么大的一整块的空间呀
而集合,可变 -
集合的方法
各个集合类的区别
- List
- ArrayList: 数组实现,线程不安全,查询速度快
- LinkedList: 链表结构,增删速度快
- Set
- HashSet:线程不安全,存取速度快。那么其唯一性是如何保证的?
- TreeSet:线程不安全,可以对Set集合中的 元素进行排序。如何保证的顺序?
- Vector:线程安全,但速度慢,已被 ArrayList替代,不在建议使用
ArrayList和HashSet在封装数据&集合操作用的多
guava,引入包
build.gradle
//compile group: 'com.google.guava', name: 'guava', version: '29.0-jre'
compile ('com.google.guava:guava:29.0-jre')
guava操作都加一个s,Sets等
- 集合的并集
Set<String> set1 = new HashSet<>();
set1.add("a");
set1.add("b");
set1.add("c");
set1.add("d");
Set<String> set2 = new HashSet<>();
set2.add("a");
set2.add("b");
set2.add("x");
set2.add("y");
//集合的并集
Sets.SetView<String> setView = Sets.union(set1, set2);
ImmutableSet<String> unionSet = setView.immutableCopy();
System.out.println("unionSet = " + unionSet);
- 集合的差集
Set<String> set1 = new HashSet<>();
set1.add("a");
set1.add("b");
set1.add("c");
set1.add("d");
Set<String> set2 = new HashSet<>();
set2.add("a");
set2.add("b");
set2.add("x");
set2.add("y");
//集合的差集
Sets.SetView<String> difference = Sets.difference(set1, set2);
ImmutableSet<String> strings = difference.immutableCopy();
System.out.println("strings = " + strings);
- 集合的交集
Set<String> set1 = new HashSet<>();
set1.add("a");
set1.add("b");
set1.add("c");
set1.add("d");
Set<String> set2 = new HashSet<>();
set2.add("a");
set2.add("b");
set2.add("x");
set2.add("y");
//集合的交集
Sets.SetView<String> intersection = Sets.intersection(set1, set2);
ImmutableSet<String> strings1 = intersection.immutableCopy();
System.out.println("strings1 = " + strings1);
ps:承载数据用ArrayList;有特殊要求,防重,用HashSet;集合本身做交并处理,用guava提供的类库,操作。