subList()がsubSet()メソッドとして動作せず、 ConcurrentModificationExceptionをスローするのに subSetがスローされない理由を誰でも説明できますか。どちらのメソッドも Backed Collection を作成したため、おそらくsubList() メソッドの設計者は、変更不可能な元のリストに依存してこのメソッドを作成しましたが、すべての Backed Collection が同じ動作 ( subSet()など) を持っている場合は良くないでしょうか?
// コード
public class ConcurrentModificationException {
public static void main(String[] args) {
String[] array = {"Java","Python","Pearl","Ada","Javascript","Go","Clojure"};
subListEx(array);
subSetEx(array);
}
private static void subListEx(String[] array) {
List<String> l = new ArrayList<String>(Arrays.asList(array));
List<String> l2 = l.subList(2, 4);
System.out.println(l.getClass().getName());
// l.add("Ruby"); // ConcurrentModificationException
// l.remove(2); // ConcurrentModificationException
l2.remove("Ada"); // OK
for (String s:l) { System.out.print(s+", "); }
System.out.println();
for (String s:l2) { System.out.print(s+", "); }
}
private static void subSetEx(String[] array) {
SortedSet<String> s1 = new TreeSet<String>(Arrays.asList(array));
SortedSet<String> s2 = s1.subSet("Java", "Python");
s1.remove("Ada");
for (String s:s1) { System.out.print(s+", "); }
System.out.println();
for (String s:s2) { System.out.print(s+", "); }
}}
前もって感謝します!