List<String> a = new ArrayList<>();
a.add("AAA");
List<String> b = a.subList(0,a.size());
b.add("BBB");
List<String> c = new ArrayList<>(a.subList(0,a.size()));
b.add("CCC");
System.out.println(a);
System.out.println(b);
System.out.println(c);
/*
* [AAA, BBB]
* [AAA, BBB]
* [AAA, CCC]
*/
普通に subList -> シャローコピー
subList したものをコンストラクタに渡す -> ディープコピー(もどき)
subListは指定範囲の見かけを返すだけで、切り出してコピーしたりするわけじゃない。
(追って更新します)
(@yoshi さんコメントでのご指摘ありがとうございます!)