美文网首页
Java Set的初始化方法

Java Set的初始化方法

作者: 幽澜先生 | 来源:发表于2020-03-10 14:40 被阅读0次

    定义了一个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(",")));

    相关文章

      网友评论

          本文标题:Java Set的初始化方法

          本文链接:https://www.haomeiwen.com/subject/gomwdhtx.html