我想说的第一点是,您似乎最好使用Set它,因为它不允许重复元素。换句话说,做:
Set<Long> ids = new HashSet<Long>();
ids.add(Long.valueOf(1));
ids.add(Long.valueOf(1));
System.out.println(ids.size());
会打印1,不像2会打印List。
我不确定您要查找的确切操作,但您需要三种可能的操作:并集、交集和相对补集。有关它们的正式定义和维恩图,请参阅Set 页面上的此 Wikipedia 部分。
联盟
结果:所有元素都在A并且B将在C.
要执行此操作:
Set<Long> a = ... ;
Set<Long> b = ... ;
Set<Long> c = new HashSet<Long>(a);
c.addAll(b);
路口
结果:只有两者中的元素A和B将在C.
要执行此操作:
Set<Long> a = ... ;
Set<Long> b = ... ;
Set<Long> c = new HashSet<Long>(a);
c.retainAll(b);
相对补
结果:C将包含除中的元素A之外的所有元素B
要执行此操作:
Set<Long> a = ... ;
Set<Long> b = ... ;
Set<Long> c = new HashSet<Long>(a);
c.removeAll(b);
此外,要将 a 转换List为 a Set:
List<Long> idsAsList = ... ;
Set<Long> idsAsSet = new HashSet<Long>(idsAsList);
要将数组转换为 a Set,您必须根据是否有 along[]或 a来做不同的事情Long[](注意大写)。对于long[],您必须手动复制:
long[] idsAsArray = ... ;
Set<Long> idsAsSet = new HashSet<Long>();
for (long l : idsAsArray) {
idsAsSet.add(Long.valueOf(l));
}
如果是Long[],您可以使用Arrays.asList:
Long[] idsAsArray = ... ;
Set<Long> ids = new HashSet<Long>(Arrays.asList(idsAsArray));