zoukankan      html  css  js  c++  java
  • java编程规约三

    七、集合处理

    1、尽量使用String对象做Map的key

    2、list转数组,用list的toArray(T[] array),传入的参数array是类型完全一样的数组,大小是list.size()

    示例:(无参的toArray返回的是Object[]类)

    List<String> list = new ArrayList<String>(2);
    list.add("guan");
    list.add("bao");
    String[] array = new String[list.size()];
    array = list.toArray(array);

    3、数组转集合

      (1)对基本数据类型的数组支持不友好

      (2)Arrays.asList()返回的是Arrays类的一个内部类ArrayList,该内部类并未实现集合的修改方法(add/remove),因此不能使用这个转换后的集合

    调用add/remove方法

      (3)当使用该方法转换时,数组和列表将链接在一起,更新其中之一,另一个随之更新 

    依次给出3个示例:

    static void example2(){
    //第一个例子
       
    int[] arr = {1, 2};//基本类型的数组 List list = Arrays.asList(arr); list.forEach(i->System.out.println(i));//打印出来的不是1,2,而是[I@2d98a335,这是一个对象的内存地址 System.out.println(list.size());//打印的是1而不是2,事实是list的元素类型变成了int[],而不是期望的int或Integer //第二个例子 String[] arr1 = {"a","b","c"}; List list1 = Arrays.asList(arr1); list1.add("d");//调用add报错java.lang.UnsupportedOperationException list1.remove("a");//调用remove报错java.lang.UnsupportedOperationException //第三个例子 list1.forEach(s->System.out.println(s));//打印结果是a,b,c arr1[0] = "d";//现在修改原数组的第一个元素为d System.out.println(list1.get(0));//转换后的list的第一个元素跟着变为d list1.set(0,"e");//现在修改转换后的list的第一个元素为e System.out.println(arr1[0]);//原数组的第一个元素跟着变为e }

    4、for-each循环优先于传统的for循环,为了简洁性和预防bug,并且性能不会丢失

    List<String> list = Arrays.asList("aa","bb","cc");
    //增强的for循环
    for (String s:list) { System.out.println(s); } list.forEach(s->System.out.println(s));

    foreach内不要进行元素的修改(add/remove)操作,用Iterator

    List<String> list3 = new ArrayList<>();
    list3.add("aa");
    list3.add("bb");
    list3.add("cc");
    list3.add("aa");
    list3.add("dd");
    list3.add("aa");
    list3.add("ee");
    Iterator<String> it = list3.iterator();
    while(it.hasNext()){
          if("aa".equals(it.next())){
               it.remove();
          }
    }
     list3.forEach(s->System.out.println(s));//bb,cc,dd,ee

    5、集合初始化时指定集合大小

    ArrayList:初始容量10,扩容倍数:1.5倍

    HashMap 初始容量1<<4=16,扩容倍数:2倍

    HashSet:基于HashMap实现,和HashMap相同

    6、遍历HashMap用java8的foreach或entrySet

    Map<String, Integer> map= new HashMap<>();
    map.put("A", 10);
    map.put("B", 20);
    map.put("C", 30);
    
    map.forEach((k,v)->System.out.println( k + "= " + v));
    map.forEach((k,v)->{
        System.out.println( k + " = " + v);
        if("A".equals(k)){
            System.out.println("Hello A");
        }
    });
  • 相关阅读:
    mysql source 乱码
    php5.6.11 openssl安装
    python threading模块的Lock和RLock区别
    python多线程一些知识点梳理
    多核处理器中进程和线程是如何一起工作的?
    IO是否会一直占用CPU?(转)
    Python TypeError: __init__() got multiple values for argument 'master'(转)
    Jquery中.bind()、.live()、.delegate()和.on()之间的区别详解(转)
    浏览器环境下JavaScript脚本加载与执行探析之代码执行顺序(转)
    为什么有的网页右击没有出现审查元素
  • 原文地址:https://www.cnblogs.com/yb38156/p/9862600.html
Copyright © 2011-2022 走看看