java普通for循環和for-each迭代循環的區別


PO實體類User:

package aA;


public class User {
    private String name;
    
    private int many;
    private int id;
    public int getId() {
        return id;
    }
    public void setId(int id) {
        this.id = id;
    }
    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getMany() {
        return many;
    }

    public void setMany(int i) {
        this.many = i;
    }
    public User(int many,int id){
        this.many = many;
        this.id  =id;
    }
    public User(){
        
    }
}

PO實體類Cumster:

package aA;

public class Cumster {
    private String name;
    private int id;
    public int getId() {
        return id;
    }
    public void setId(int id) {
        this.id = id;
    }
    private int many;
    private int age;
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public int getMany() {
        return many;
    }
    public void setMany(int many) {
        this.many = many;
    }
    public int getAge() {
        return age;
    }
    public void setAge(int age) {
        this.age = age;
    }
    public Cumster(String name,int id){
        this.name = name;
        this.id = id;
    }
    public Cumster(){
        
    }
}

隨機產生字符串(模擬list數據添加):

package aA;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.Random;

/**
 * 字符隨機生成類
 */
public class RandomDemo {
    /**
     * 隨機產生類型枚舉
     */
    public static enum TYPE {
        /**小字符型*/
        LETTER,
        /**大寫字符型*/
        CAPITAL,
        /**數字型*/
        NUMBER,
        /**大+小字符 型*/
        LETTER_CAPITAL,
        /**小字符+數字 型*/
        LETTER_NUMBER,
        /**大寫字符+數字*/
        CAPITAL_NUMBER,
        /**大+小字符+數字 型*/
        LETTER_CAPITAL_NUMBER,
    }
    private static String[] lowercase = { "a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o",
            "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z" };

    private static String[] capital = { "A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P",
            "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z" };

    private static String[] number = { "1", "2", "3", "4", "5", "6", "7", "8", "9", "0" };

    /**
     * 靜態隨機數
     */
    private static Random random = new Random();

    /**
     * 獲取隨機組合碼
     * @param num 位數
     * @param type 類型
     * @type 
     * <br>小寫字符型 LETTER,
     * <br>大寫字符型 CAPITAL,
     * <br>數字型 NUMBER,
     * <br>大+小字符型 LETTER_CAPITAL,
     * <br>小字符+數字 型 LETTER_NUMBER,
     * <br>大字符+數字 型 CAPITAL_NUMBER,
     * <br>大+小字符+數字 型 LETTER_CAPITAL_NUMBER,
     */
    public static String getRandom(int num, TYPE type) {
        ArrayList<String> temp = new ArrayList<String>();
        StringBuffer code = new StringBuffer();
        switch (type) {
        case LETTER:
            temp.addAll(Arrays.asList(lowercase));
            break;
        case CAPITAL:
            temp.addAll(Arrays.asList(capital));
            break;
        case NUMBER:
            temp.addAll(Arrays.asList(number));
            break;
        case LETTER_CAPITAL:
            temp.addAll(Arrays.asList(lowercase));
            temp.addAll(Arrays.asList(capital));
            break;
        case LETTER_NUMBER:
            temp.addAll(Arrays.asList(lowercase));
            temp.addAll(Arrays.asList(number));
            break;
        case CAPITAL_NUMBER:
            temp.addAll(Arrays.asList(capital));
            temp.addAll(Arrays.asList(number));
            break;
        case LETTER_CAPITAL_NUMBER:
            temp.addAll(Arrays.asList(lowercase));
            temp.addAll(Arrays.asList(capital));
            temp.addAll(Arrays.asList(number));
            break;
        }
        for (int i = 0; i < num; i++) {
            code.append(temp.get(random.nextInt(temp.size())));
        }
        return code.toString();
    }
//    public static void main(String[] args) {
//        System.out.println(RandomDemo.getRandom(10, RandomDemo.TYPE.LETTER_CAPITAL));
//    }
}

測試類:

package aA;

import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
import java.util.Random;

public class AA {

    public static void main(String[] args) {
        List<User> userList = new ArrayList<User>();  
        Random random = new Random();
        for(int i = 0;i<100000;i++){
            int age = random.nextInt(100);
            userList.add(new User(age,i));
        }
        List<Cumster> cList = new ArrayList<Cumster>();
        for(int i = 0;i<100000;i++){
            cList.add(new Cumster(RandomDemo.getRandom(10,RandomDemo.TYPE.LETTER_CAPITAL),i));
        }
        //使用普通for循環遍歷
//        long start = System.currentTimeMillis();
//        for (int i = 0; i < cList.size(); i ++) {
//            User user = userList.get(i);
//            for(int j=0;j<userList.size();j++){
//                Cumster cumster = cList.get(j);
//                if(user.getId() == cumster.getId()){
//                    user.setName(cumster.getName());
//                }
//            }
//        }
//        long end = System.currentTimeMillis();

        //使用for-each迭代循環遍歷
        List<User> strList = new ArrayList<User>();
        long start = System.currentTimeMillis();
        for (Cumster cumster : cList) {
            for (User user : userList) {
                if(cumster.getId() == user.getId()){
                    user.setName(cumster.getName());
                    strList.add(user);
                }
            }
        }
        long end = System.currentTimeMillis();
        
        for (int i = 0; i < userList.size(); i ++) {
            System.out.print(userList.get(i).getName()+",");
        }
//        Collections.sort(userList, Comparator.comparing(User::getId));
        Collections.sort(userList, new Comparator<User>(){
            /*
             * int compare(RateInfo R1, RateInfo R2) 返回一個基本類型的整型,
             * 返回負數表示:R1 小於R2,
             * 返回0 表示:R1和R2相等,
             * 返回正數表示:R1大於R2
             */
            public int compare(User R1, User R2) {
                //按照RateCode的年齡進行升序排列
                if(R1.getId() > R2.getId()){
                    return 1;
                }
                if(R1.getId() == R2.getId()){
                    return 0;
                }
                return -1;
            }
        });
        System.out.println();
        for (User user : userList) {
            System.out.println(user.getId()+":"+user.getMany()+","+user.getName());
        }
        System.out.println(strList.toString());
        System.out.println("運行時間:"+(end-start));
    }
}

結果:

  1.使用for-each循環10萬個數據進行循環運行時間:

  

  2.使用普通for循環10萬個數據進行循環運行時間:

  

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM