我需要使用自定義比較器來訂購一個集合而不在內存中複製它。在JAVA中訂購一個沒有重複的集合
天真的實現將是:
Set<MyClass> newSet = new TreeSet<>(myComparator);
newSet.addAll(oldSet);
但是這將意味着,即使在有限的時間,我有兩套內存:oldSet(無序)和newSet(有序)。由於它們會非常大,我想避免這種情況。
我想這樣的事情進行:
oldSet = new TreeSet<>(oldSet, myComparator);
這實際上是不可能的,因爲沒有構造函數TreeSet中採用這種結構形式。
難道這是一個解決方案?
Iterator<MyClass> it = oldSet.iterator();
Set<MyClass> newSet = new TreeSet<>(myComparator);
while(it.hasNext())
{
newSet.add(it.next());
it.remove();
}
更好的建議?
謝謝
@kai沒有'it.remove()'OP將一次在內存中有兩個全集,這是他的問題所在。 –