回答:
私はsepp2kに同意しますが、重要な他の詳細がいくつかあります。
new HashSet<Foo>(myList);
重複がないソートされていないセットを提供します。この場合、重複はオブジェクトの.equals()メソッドを使用して識別されます。これは.hashCode()メソッドと組み合わせて行われます。(平等の詳細についてはこちらをご覧ください)
ソートされたセットを提供する別の方法は次のとおりです。
new TreeSet<Foo>(myList);
これは、FooがComparableを実装している場合に機能します。そうでない場合は、コンパレータを使用できます。
Set<Foo> lSet = new TreeSet<Foo>(someComparator);
lSet.addAll(myList);
これは、一意性を保証するために、compareTo()(比較可能なインターフェースから)またはcompare()(コンパレータから)に依存します。したがって、一意性を重視する場合は、HashSetを使用してください。並べ替え後の場合は、TreeSetを検討してください。(注意:後で最適化してください!)時間効率が重要な場合はHashSetを使用し、スペース効率が重要な場合はTreeSetを確認してください。SetとMapのより効率的な実装は、Trove(およびその他の場所)から利用できることに注意してください。
Guavaライブラリを使用する場合:
Set<Foo> set = Sets.newHashSet(list);
または、より良い:
Set<Foo> set = ImmutableSet.copyOf(list);
ImmutableSet.of()
、たとえばのように、要素として言及されていないことに少し驚いていますが。編集:すべてのオーバーロードが不要なので、それは要因ではないかもしれません。
java 8を使用すると、ストリームを使用できます。
List<Integer> mylist = Arrays.asList(100, 101, 102);
Set<Integer> myset = mylist.stream().collect(Collectors.toSet()));
Set<E> alphaSet = new HashSet<E>(<your List>);
または完全な例
import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
public class ListToSet
{
public static void main(String[] args)
{
List<String> alphaList = new ArrayList<String>();
alphaList.add("A");
alphaList.add("B");
alphaList.add("C");
alphaList.add("A");
alphaList.add("B");
System.out.println("List values .....");
for (String alpha : alphaList)
{
System.out.println(alpha);
}
Set<String> alphaSet = new HashSet<String>(alphaList);
System.out.println("\nSet values .....");
for (String alpha : alphaSet)
{
System.out.println(alpha);
}
}
}
セットに変換する前にNullチェックを実行します。
if(myList != null){
Set<Foo> foo = new HashSet<Foo>(myList);
}
Set<Foo> foo = myList == null ? Collections.emptySet() : new HashSet<Foo>(myList);
Java 8の場合は非常に簡単です。
List < UserEntity > vList= new ArrayList<>();
vList= service(...);
Set<UserEntity> vSet= vList.stream().collect(Collectors.toSet());
new ArrayList<>()
;-) を使用することになります
Java - addAll
set.addAll(aList);
Javaの - 新しいオブジェクト
new HashSet(list)
Java-8
list.stream().collect(Collectors.toSet());
Guvaの使用
Sets.newHashSet(list)
Apache Commons
CollectionUtils.addAll(targetSet, sourceList);
Java 10
var set = Set.copyOf(list);
Set
as を取得するにはさまざまな方法があります。
List<Integer> sourceList = new ArrayList();
sourceList.add(1);
sourceList.add(2);
sourceList.add(3);
sourceList.add(4);
// Using Core Java
Set<Integer> set1 = new HashSet<>(sourceList); //needs null-check if sourceList can be null.
// Java 8
Set<Integer> set2 = sourceList.stream().collect(Collectors.toSet());
Set<Integer> set3 = sourceList.stream().collect(Collectors.toCollection(HashSet::new));
//Guava
Set<Integer> set4 = Sets.newHashSet(sourceList);
// Apache commons
Set<Integer> set5 = new HashSet<>(4);
CollectionUtils.addAll(set5, sourceList);
使用するCollectors.toSet()
と、セットとドキュメントごとに返されます:There are no guarantees on the type, mutability, serializability, or thread-safety of the Set returned
。を取得したい場合はHashSet
、他の代替手段を使用してセットを取得できます(チェックset3
)。
Java 10では、を使用Set#copyOf
しList<E>
て、を変更不可能な形式に簡単に変換できるようになりましたSet<E>
。
例:
var set = Set.copyOf(list);
これは順不同の操作であり、をスローするため、null
要素は許可されないことに注意してくださいNullPointerException
。
変更可能にする場合は、コンストラクタにSet
実装を渡します。
Eclipseコレクションを使用する場合:
MutableSet<Integer> mSet = Lists.mutable.with(1, 2, 3).toSet();
MutableIntSet mIntSet = IntLists.mutable.with(1, 2, 3).toSet();
MutableSet
インタフェースは延びjava.util.Set
、一方MutableIntSet
インタフェースがありません。あなたはまた、任意に変換することができますIterable
にSet
使用するSets
ファクトリクラス。
Set<Integer> set = Sets.mutable.withAll(List.of(1, 2, 3));
Eclipseコレクションで利用可能な可変ファクトリーの詳細については、こちらをご覧ください。
必要に応じてImmutableSet
からのList
、あなたは使用することができSets
、次のように工場を:
ImmutableSet<Integer> immutableSet = Sets.immutable.withAll(List.of(1, 2, 3))
注:私はEclipseコレクションのコミッターです
ListからSetに変換すると、コレクションから重複が削除されます。Listは重複をサポートしていますが、SetはJavaでの重複をサポートしていないためです。
直接変換:リストをセットに変換する最も一般的で簡単な方法
// Creating a list of strings
List<String> list = Arrays.asList("One", "Two", "Three", "Four");
// Converting a list to set
Set<String> set = new HashSet<>(list);
Apache Commons Collections: Commons Collections APIを使用してリストをセットに変換することもできます:-
// Creating a list of strings
List<String> list = Arrays.asList("One", "Two", "Three", "Four");
// Creating a set with the same number of members in the list
Set<String> set = new HashSet<>(4);
// Adds all of the elements in the list to the target set
CollectionUtils.addAll(set, list);
ストリームの使用:別の方法は、指定されたリストをストリームに変換し、次にストリームを設定することです:-
// Creating a list of strings
List<String> list = Arrays.asList("One", "Two", "Three", "Four");
// Converting to set using stream
Set<String> set = list.stream().collect(Collectors.toSet());
Set
とMap
1が使用しています。ここでHashSet
は想定されています。