jdk1.8 Lambda 最常見用法

import java.util.Arrays;
import java.util.List;

/**
 * 在jdk1.8中對hashMap等map集合的數據結構優化。hashMap數據結構的優化
 * 原來的hashMap採用的數據結構是哈希表(數組+鏈表),hashMap默認大小是16,一個0-15索引的數組,如何往裏面存儲元素,首先調用元素的hashcode
 * 方法,計算出哈希碼值,經過哈希算法算成數組的索引值,如果對應的索引處沒有元素,直接存放,如果有對象在,那麼比較它們的equals方法比較內容
 * 如果內容一樣,後一個value會將前一個value的值覆蓋,如果不一樣,在1.7的時候,後加的放在前面,形成一個鏈表,形成了碰撞,在某些情況下如果鏈表
 * 無限下去,那麼效率極低,碰撞是避免不了的
 * 加載因子:0.75,數組擴容,達到總容量的75%,就進行擴容,但是無法避免碰撞的情況發生
 * 在1.8之後,在數組+鏈表+紅黑樹來實現hashmap,當碰撞的元素個數大於8時 & 總容量大於64,會有紅黑樹的引入
 * 除了添加之後,效率都比鏈表高,1.8之後鏈表新進元素加到末尾
 * ConcurrentHashMap (鎖分段機制),concurrentLevel,jdk1.8採用CAS算法(無鎖算法,不再使用鎖分段),數組+鏈表中也引入了紅黑樹的使用
 */
public class Main {
    /**
     * Lambda 表達式,也可稱爲閉包,它是推動 Java 8 發佈的最重要新特性。
     *Lambda 允許把函數作爲一個方法的參數(函數作爲參數傳遞進方法中)。
     *使用 Lambda 表達式可以使代碼變的更加簡潔緊湊。
     * @param args
     */
    public static void main(String[] args) {
        String[] atp = {"aa", "bb", "cc", "dd","ee","ff"};
        List<String> players =  Arrays.asList(atp);
        //傳統循環
        for(String s : players) {
            System.out.print( s +",");
        }
        System.out.println();

        //jdk 1.8
        players.forEach( (a) -> System.out.print( a +",") );
        System.out.println();

        players.forEach((a) -> {
            if (a.equals("ee")) {
                System.out.println(a);
            }
        });

    }
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章