java代码之美(9)---guava之Lists、Maps

guava之Lists、Maps

谷歌提供了guava包里面有很多的工具类,Lists和Maps集合工具,集合操作做了些优化提升。

1、概述

1、静态工厂方法

  (1)Guava提供了能够推断范型的静态工厂方法

List<Person> list = Lists.newArrayList();
Map<KeyType, Person> map = Maps.newLinkedHashMap();

   (2) 用工厂方法模式,我们可以方便地在初始化时就指定起始元素。

Set<Type> copySet = Sets.newHashSet(elements);
List<String> theseElements = Lists.newArrayList("alpha", "beta", "gamma");

  (3) 通过为工厂方法命名,我们可以提高集合初始化大小的可读性.

List<Type> exactly100 = Lists.newArrayListWithCapacity(100);
List<Type> approx100 = Lists.newArrayListWithExpectedSize(100);
Set<Type> approx100Set = Sets.newHashSetWithExpectedSize(100);

 

二、Lists案例

public class ListsTest {

    public static void main(String args[]){

    List<String> list1 = Lists.newArrayList();
        for (int i = 0; i < 10; i++) {
        list1.add(i + "");
    }
        System.out.println("list1: " + list1);
        //输出:list1: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

   //2、传入多参数
     List<String> list2 = Lists.newArrayList("1", "2", "3");
        System.out.println("list2: " + list2);
        //输出:list2: [1, 2, 3]

   //3、传入数组
     List<String> list3 = Lists.newArrayList(new String[]{"22", "22"});
        System.out.println("list3: " + list3);
        //输出:list3: [22, 22]

   //4、传入集合
     List<String> list4 = Lists.newArrayList(list1);
        System.out.println("list4: " + list4);
        //输出:list4: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

   //5、使用条件:你确定你的容器会装多少个,不确定就用一般形式的
    //说明:这个容器超过10个还是会自动扩容的。不用担心容量不够用。默认是分配一个容量为10的数组,不够将扩容
    //整个来说的优点有:节约内存,节约时间,节约性能。代码质量提高。
    List<String> list = Lists.newArrayListWithExpectedSize(10);
    //这个方法就是直接返回一个10的数组。
    List<String> list_ = Lists.newArrayListWithCapacity(10);
   }
}

 

三、Maps案例

public class MapsTest {
        public static void main(String[] args) {

            //1、Maps.newHashMap()获得HashMap();
            Map<Integer, Integer> map0 = Maps.newHashMap();
            for (int i = 0; i < 10; i++) {
                map0.put(i, i);
            }
            System.out.println("map0:" + map0);
            //输出:map0:{0=0, 1=1, 2=2, 3=3, 4=4, 5=5, 6=6, 7=7, 8=8, 9=9}

            //2、传入map0参数构建map
            Map<Integer, Integer> map1 = Maps.newHashMap(map0);
            map1.put(10, 10);
            System.out.println("map1:" + map1);
            //输出:map1:{0=0, 1=1, 2=2, 3=3, 4=4, 5=5, 6=6, 7=7, 8=8, 9=9, 10=10}


            //3、使用条件:你确定你的容器会装多少个,不确定就用一般形式的
            //说明:这个容器超过3个还是会自动扩容的。不用担心容量不够用。默认是分配一个容量为16的数组,不够将扩容
            Map<Integer, Integer> map2 = Maps.newHashMapWithExpectedSize(3);
            map2.put(1, 1);
            map2.put(2, 2);
            map2.put(3, 3);
            System.out.println("map2:" + map2);
            //输出:map2:{1=1, 2=2, 3=3}

            //4、LinkedHashMap<K, V> 有序map
            //Map<Integer,Integer> map3 = Maps.newLinkedHashMap();
            //Map<Integer,Integer> map3 = Maps.newLinkedHashMapWithExpectedSize(11);
            Map<Integer, Integer> map3 = Maps.newLinkedHashMap(map1);
            map3.put(11, 11);
            System.out.println("map3:" + map3);
            //输出:map3:{0=0, 1=1, 2=2, 3=3, 4=4, 5=5, 6=6, 7=7, 8=8, 9=9, 10=10, 11=11}
            
            outMapKeyValue(map3);
            
        }

        /**
         * 遍历Map的四种方法
         */
        private static void outMapKeyValue(Map<Integer, Integer> map3) {

            //1.通过Map.entrySet遍历key和value
            for (Map.Entry<Integer, Integer> integerEntry : map3.entrySet()) {
                System.out.println("key:" + integerEntry.getKey() + " value:" + integerEntry.getValue());
            }

            //2.通过Map.entrySet使用iterator遍历key和value-----不推荐,直接用上面的for each循环代替此方法
            Iterator<Map.Entry<Integer, Integer>> it = map3.entrySet().iterator();
            while (it.hasNext()) {
                Map.Entry<Integer, Integer> entry = it.next();
                System.out.println("key:" + entry.getKey() + " value:" + entry.getValue());
            }

            //3.通过Map.keySet遍历key;根据key得到value
            for (Integer integer : map3.keySet()) {
                System.out.println("key:" + integer + " value:" + map3.get(integer));
            }

            //4.通过Map.values()遍历所有的value,但不能遍历key
            for (Integer integer : map3.values()) {
                System.out.println("value:" + integer);
            }
        }
}

 

 

 

想太多,做太少,中间的落差就是烦恼。想没有烦恼,要么别想,要么多做。中校【18】

 

 

posted on 2018-08-07 21:44  雨点的名字  阅读(16921)  评论(0编辑  收藏  举报