2
コレクションを安全にコピーするにはどうすればよいですか?
以前は、コレクションを安全にコピーすると次のようなことをするように言っていました。 public static void doThing(List<String> strs) { List<String> newStrs = new ArrayList<>(strs); または public static void doThing(NavigableSet<String> strs) { NavigableSet<String> newStrs = new TreeSet<>(strs); しかし、これらの「コピー」コンストラクター、同様の静的作成メソッドおよびストリームは本当に安全で、ルールはどこに指定されていますか?安全とは、Java言語によって提供される基本的なセマンティック整合性の保証と、悪意のある呼び出し元に対して適用されるコレクションSecurityManagerであり、妥当な手段でバックアップされ、欠陥がないことを前提としています。 私はこの方法を投げると幸せConcurrentModificationException、NullPointerException、IllegalArgumentException、ClassCastException、など、またはおそらくハング。 String不変の型引数の例として選択しました。この質問については、私は独自の落とし穴を持つ変更可能な型のコレクションのディープコピーには興味がありません。 (明確にするために、私はOpenJDKのソースコードを見て、とに対して何らかの回答をArrayListしましたTreeSet。)