List遍歴方法及び効率

3191 ワード

iterator遍歴では、ループ実行中にデータロックが行われ、性能がやや悪いと同時に、歓楽中に要素を削除したい場合はitしか呼び出せません.removeメソッドはlistを使用できません.removeメソッド、そうでないと必ず同時アクセスのエラーが発生します.ForEachは遍歴していて、内部で最初のものを呼び出して、スープを交換して薬を交換しないので、Iteratorより遅いので、この循環方式には他の制限があり、使用することをお勧めしません.sizeは内部を巡回してロックされず、最も効率的であるが、マルチスレッドを書くときは同時操作の問題を考慮しなければならない.
以下に、遍歴テストの結果を示します.
package com.··.··;
import java.util.*;

/**
 * java --list 
 *  
 * Created by zhaojy on 2016/12/5.
 */
public class compare {
    public static void main(String args[]){
        compare();
    }

    public static void compare() {
        List list = new ArrayList<>();
        Set set = new HashSet<>();
        for(int i=0;i<100000;i++) {
            list.add("a"+i);
        }
        long t1,t2;
        t1 = System.currentTimeMillis();
        for(String s : list) {
            set.add(s);
        }
        t2 = System.currentTimeMillis();
        System.out.println("forEach :"+(t2-t1)+"mm");
        ////two
        t1 = System.currentTimeMillis();
        for(int i=0; iset.add(list.get(i));
        }
        t2 = System.currentTimeMillis();
        System.out.println("size :"+(t2-t1)+"mm");
        ////three
        t1 = System.currentTimeMillis();
        Iterator iterator = list.iterator();
        while(iterator.hasNext()) {
            set.add(iterator.next());
        }
        t2 = System.currentTimeMillis();
        System.out.println("iterator :"+(t2-t1)+"mm");
    }
}

結果:
forEach :36mm
size :13mm
iterator :9mm