私が作りたい最初のポイントは、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ます。
あなたが探している正確な操作はわかりませんが、必要な操作は 3 つあります。結合、交差、相対補数です。それらの正式な定義とベン図については、このウィキペディアのセット ページのセクションを参照してください。
連合
結果: と のすべての要素が に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すべての要素が含まれますAB
この操作を実行するには:
Set<Long> a = ... ;
Set<Long> b = ... ;
Set<Long> c = new HashSet<Long>(a);
c.removeAll(b);
さらに、 a を aに変換するListにはSet:
List<Long> idsAsList = ... ;
Set<Long> idsAsSet = new HashSet<Long>(idsAsList);
配列を に変換するには、 があるか があるかSetによって、異なる処理を行う必要があります(大文字に注意してください)。の場合、手動でコピーする必要があります。long[]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));