我做了TreeSet与ArrayList插入/性能的基准测试。显然,ArrayList表现更好,但是,拥有一百万条独特记录,完整迭代时间为279毫秒并不是那么糟糕。
如果你的情况是微不足道的,我会坚持TreeSet。否则,在将元素插入到ArrayList之前,您将被迫重新轮询并手动检查重复项。
import java.util.ArrayList;
import java.util.Iterator;
import java.util.TreeSet;
public class TestTreeSetVsArrayList {
public static int ENTRIES = 10000000;
public static void main(String[] args) {
TreeSet<String> treeSet = new TreeSet<String>();
ArrayList<String> arrayList = new ArrayList<String>(10000);
long l = System.currentTimeMillis();
for (int i = 0; i < TestTreeSetVsArrayList.ENTRIES; i++) {
treeSet.add("String"+i);
}
System.out.println("treeset insertion time: "+ (System.currentTimeMillis()-l));
l = System.currentTimeMillis();
for (int i = 0; i < TestTreeSetVsArrayList.ENTRIES; i++) {
treeSet.add("String"+i);
}
System.out.println("arraylist insertion time: "+ (System.currentTimeMillis()-l));
Iterator<String> iter;
iter = treeSet.iterator();
l = System.currentTimeMillis();
while(iter.hasNext()) {
iter.next();
}
System.out.println("treeset iteration time: "+ (System.currentTimeMillis()-l));
iter = arrayList.iterator();
l = System.currentTimeMillis();
while(iter.hasNext()) {
iter.next();
}
System.out.println("arraylist iteration time: "+ (System.currentTimeMillis()-l));
}
}
在我的电脑的结果是:
TreeSet的插入时间:11350
ArrayList中插入时间:3583
TreeSet的迭代次数:279
的ArrayList迭代时间:0
您可以将它们始终放置在“Set”中,这将不允许重复,然后将它们移动到ArrayList中以供后续使用。 – forgivenson