Java 初始化

1. Java 中集合类的初始化的方法与小技巧

 1.1数组的初始化

如下所示,字符数组可以通过以下方式进行初始化。

 String[] names = new String[] {“john”,”eric”}; 

1.2 List 的初始化

  可以使用Arrays.asList 将数组转换对应的List

       List<String> list =Arrays.asList("hu","zun","li");

       List<Integer> list2 = Arrays.asList(1,2,4); 

1.3  Set的初始化

(1)最普通的方式

 Arrays 中没有可以将数组转换为Set的方法。

  但Set 的实现类地构造器中可以将实现Collection接口(如List)的实例转换为Set 实例。

  所以,可以如下所示,使用数组对Set 进行初始化

   Set<String> set1 = newHashSet<String>(Arrays.asList(newString[]{"hu","zunli","li"}));

(2)也可以使用普通的方法

 Set<Integer> list = new HashSet<Integer>();

  {

           list.add(1);//首页原型id

           list.add(2);//宝贝详情页原型id

           list.add(3);//宝贝列表页原型id

           list.add(101);//文章列表页原型id

           list.add(102);//文章详情页原型id

           list.add(103);//帮助中心文章列表页原型id

           list.add(104);//帮助中心文章详情页原型id

   }

  实际上就是先使用new 创建对象,然后正常使用add 方法插入记录,但用{} 括起来称谓一个语句块,看起来就比较舒服。

 (3) 还是基于Java中原始的API,但使用匿名类。

 如下图所示   

@Test

     public void testListInitUsingNestedClass() {

         List<String> list = new ArrayList<String>() {

            {

                add("hu");

                add("zunli");

            }

         };

     }

 

 上面实际上就是用匿名类加实例化块来实现的简洁写法。

2. 集合框架类对象初始化(插入值)以后,希望该对象中的值不允许再修改。

以上方法是对数组,List, Set,Map 进行初始化。这样初始化的集合类实例是可以修改的。在一个项目中,有时候需要建立一些类似常量的集合框架类实例,即初始化数据以后,这个集合框架类实例不希望再被修改。

2.1 使用传统的Java中的API实现(即使用Collections.unmodifiableXXX();)

 如一个不可变的Set

 Set<String> set = new HashSet<String>(Arrays.asList(new String[]{"RED", "GREEN"})); 

 Set<String> unmodifiableSet =Collections.unmodifiableSet(set); 

    如果使用以上代码获得unmodifiableSet,虽然该实例本身是不可再添加或者删除数据。但set 这个实例本身还是可以操作的。

  如下图的单元测试所示:

Java 初始化_第1张图片

   如果使用Collections.unmodifiableSet(xxx)这样的传统方法处理,应该使用匿名类。

   如以下代码

Java 初始化_第2张图片
     2.2使用Google提供的collection框架类的简洁实现

(1) Set

 以上代码,过于繁琐。Google提供的Collection包guava 提供的类有更简洁的实现。

ImmutableSet<String> immutableSet =ImmutableSet.of("RED", "GREEN"); 

Java 初始化_第3张图片

如果不需要初始化,而是需要把某个外界传入的集合框架类的实例,可以这样做。

Set<String> set = newHashSet<String>(Arrays.asList("hu", "zun","li"));

       set.add("silver");

       assertThat(set.contains("silver"), is(true));

       Set<String> immutableSet = ImmutableSet.copyOf(set);

Java 初始化_第4张图片

 

 注意,以上对set 实例转换得到另一个immutableSet,immutableSet在使用不可被修改,但set本身还是可以修改的。

  

   除了使用ImmutableSet.of(T...object),ImmutableSet.copyOf(Collection collection)以外,

 

 还可以使用Builder 模式来构造一个集合,

 Builder<String>  builder = ImmutableSet.builder(); 

 ImmutableSet<String> immutableSet = builder.add("RED").addAll(set).build(); 

   以上代码可以进行链式编程:

 ImmutableSet<String> immutableSet = ImmutableSet.builder().add(“red”).addAll(set).build();

Java 初始化_第5张图片

你可能感兴趣的:(java,框架,list,String,单元测试,Arrays)