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 这个实例本身还是可以操作的。

  如下图的单元测试所示:



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

   如以下代码


     2.2使用Google提供的collection框架类的简洁实现

(1) Set

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

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



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

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);



 

 注意,以上对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();


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值