Java Set的初始化方法

定義了一個Set后,我想把它初始化一下.

方法一. 利用了add函數, 如下:

public static void main(String[] args) {

    Set<String> testSet = new HashSet<String>();
    testSet.add("Monday");
    testSet.add("Sunday");
    System.out.println(testSet);
}

但是總覺得這樣是不是有點麻煩,其實我也就使用一次,還新建了一個對象,于是可以用下面的方法二

方法二.

System.out.println(new HashSet<String>() {{
add("morning");
add("afternoon");
}});

這種初始化的方法,比第一種要簡單一些,利用的有兩個Java知識點,一個是匿名內部類,一個是實例初始化塊。

所謂匿名內部類也就是沒有名字的內部類,一般只使用一次,并且必須要繼承一個父類或者實現一個接口。而匿名內部類的實現方式也就是當新創建一個父類對象時,后邊加一個大括號,即:

new HashMap(){};

當定義一個類的時候,一般會定義構造函數,有時候還會定義靜態函數和實例初始化塊,比如:

public class TestAnnoInnerClass {

TestAnnoInnerClass(){
    System.out.println("i am a constructor");
}

static {
    System.out.println("i am a static method");
}

{
    System.out.println("i am a object ini block");
}

}

新建一個對象,運行一下,會發現執行順序為
i am a static method
i am a object ini block
i am a constructor

那么既然之前我們定義了一個匿名內部類,那么它和正常的類一樣,也會執行響應的初始化操作(匿名內部類沒有構造函數),這也就是我們初始化Set中的第二個大括號,這個大括號定義了實例初始化塊,所以在創建對象的時候就會被執行。

System.out.println(new HashSet<String>() { ---這個括號用來創建內部匿名類

{ -----這個括號表示是內部匿名類的實例初始化塊
add("morning");
add("afternoon");
}

});

補充:對于這樣的匿名類,是無法獲取它的對象的。

方法三:

如果是利用數組初始化,還可以這樣:

String s = "a,b,c,d,e,f";

Set<String >actionSet = new HashSet<>(Arrays.asList(s.split(",")));

?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • 1.import static是Java 5增加的功能,就是將Import類中的靜態方法,可以作為本類的靜態方法來...
    XLsn0w閱讀 1,261評論 0 2
  • 面向對象主要針對面向過程。 面向過程的基本單元是函數。 什么是對象:EVERYTHING IS OBJECT(萬物...
    sinpi閱讀 1,087評論 0 4
  • 一:java概述:1,JDK:Java Development Kit,java的開發和運行環境,java的開發工...
    ZaneInTheSun閱讀 2,686評論 0 11
  • java筆記第一天 == 和 equals ==比較的比較的是兩個變量的值是否相等,對于引用型變量表示的是兩個變量...
    jmychou閱讀 1,516評論 0 3
  • 做了10分鐘扭腰,做了開合跳30個,還做了一組瑜伽動作,繼續堅持
    茉莉19閱讀 77評論 0 2