• 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】

     

     

  • 相关阅读:
    android 模拟器手机如何添加文件到sd卡?
    Asp.Net 前台和后台交互的一些问题
    Cannot get WiFi AP state 错误
    MediaPlayer.getCurrentPosition IllegalStateException错误
    SQL Compare 错误 给定关键字不在字典中
    java.net.SocketException: Connection timed out的一种情况
    System services not available to Activities before onCreate()
    java.net.SocketException: Connection reset by peer
    卸载Microsoft Virtual WiFi Miniport Adapter 方法
    java 跳出 if
  • 原文地址:https://www.cnblogs.com/qdhxhz/p/9429769.html
Copyright © 2020-2023  润新知