我想说的第一点是,您似乎最好使用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));