七、集合处理

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

java编程规约三的更多相关文章

  1. 斐波那契数列-java编程:三种方法实现斐波那契数列

    题目要求:编写程序在控制台输出斐波那契数列前20项,每输出5个数换行 斐波那契数列指的是这样一个数列:1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, … 这个数列 ...

  2. java编程规约二

    四.OOP规约(Object Oriented Programming,面向对象设计) 1.静态变量和静态方法直接用类名访问,不要再new 对象去访问 2.方法覆盖必须加@Override注解 3.尽 ...

  3. Python和Java编程题(三)

    1.题目:判断101到200之间有多少个素数,并输出所有素数 题目分析:判断一个数是否为素数,只需要判断这个数有没有除1和它自身外的其他因数.因此,判断这个数能否被2-它的平方根中的任意一个数整除即可 ...

  4. JAVA 编程思想三

    1:JAVA可变参数? 参数个数不确定,但是类型确定: 可变参数位于最后一项,只支持一个可变参数: public void funciton1(int a, String ...args) { for ...

  5. java编程规约一

    提高开发效率,比较重视代码规范,尤其是可扩展性和可维护性,以及可读性.如果你是一个刚进公司的开发者,最好先问问前辈是否有 内部的开发规范,花点时间过一遍.即使提交代码没有review的步骤,自己心里应 ...

  6. java基础- Java编程规范与注释

    一 前言 java编程规约是指在java代码编写过程中通俗的约定:通常我们是要遵守这些规范:这好比我们在生活中要遵守的道德准则,如果你做的事情超出了道德的底线,那就有可能会受到社会抨击:在java编程 ...

  7. Java编程思想(四) —— 复用类

    看了老罗罗升阳的专訪,不由自主地佩服,非常年轻,我之前以为和罗永浩一个级别的年龄.也是见过的不是初高中编程的一位大牛之中的一个,专訪之后.发现老罗也是一步一个脚印的人. 别说什么难做,做不了.你根本就 ...

  8. 点评阿里JAVA手册之编程规约(OOP 规约 、集合处理 、并发处理 、其他)

    下载原版阿里JAVA开发手册  [阿里巴巴Java开发手册v1.2.0] 本文主要是对照阿里开发手册,注释自己在工作中运用情况. 本文难度系数为三星(★★★) 本文为第二篇 第一篇 点评阿里JAVA手 ...

  9. 点评阿里JAVA手册之编程规约(命名风格、常量定义、代码风格、控制语句、注释规约)

    下载原版阿里JAVA开发手册  [阿里巴巴Java开发手册v1.2.0] 本文主要是对照阿里开发手册,注释自己在工作中运用情况. 本文难度系数为一星(★) 码出高效.码出质量. 代码的字里行间流淌的是 ...

随机推荐

  1. jq-在线引入

    <script src="http://libs.baidu.com/jquery/2.0.0/jquery.min.js"></script><sc ...

  2. NX二次开发-NXOPEN创建工程图表格Annotations::TableSectionBuilder *tableSectionBuilder1;

    NX9+VS2012 #include <uf.h> #include <uf_tabnot.h> #include <NXOpen/Part.hxx> #incl ...

  3. 高效率使用google,国外搜索引擎,国内顺利使用Google的另类技巧,可用谷歌镜像, 可用google学术, 如何使用robots不让百度和google收录

    Google良好的搜索和易用性已经得到了广大网友的欢迎,但是除了我们经常使用的Google网站.图像和新闻搜索之外,它还有很多其他搜索功能和搜索技巧.如果我们也能充分利用,必将带来更大的便利.这里我介 ...

  4. 剑指offer——15剪绳子

    题目描述 给你一根长度为n的绳子,请把绳子剪成m段(m.n都是整数,n>1并且m>1),每段绳子的长度记为k[0],k[1],...,k[m].请问k[0]xk[1]x...xk[m]可能 ...

  5. Beanutils工具类,封装数据的三种方式,单例模式

    org.apache.commons.beanutils.Beanutils; Beanutils setProperty(Object obj,String name,Object value) O ...

  6. FIR和IIR设计指标

  7. scala容器对象(转载)

    1Array 数组 Scala的数组是这个样子: val arr = new Array[String](3) 程序员们基本都看得懂,new 一个Array对象,它的类型是String,长度为3.对元 ...

  8. vue多文件上传进度条 进度不更新问题

    转自 hhttp://www.cnblogs.com/muge10/p/6767493.html 感谢这位兄弟的文章,之前因为这个问题 ,我连续在sgmentflow上提问过多次,完全没人能回答.谢谢 ...

  9. 大道浮屠诀---cwRsync同步工具的使用

    目的: 在日常生活中,我们有时候会遇到这样类似的问题 ---需要把一台服务器上的某个重要的文件进行备份(拷贝另外的服务器上) ---需要同步系统上的配置文件到其他系统 利用此cwRsync软件可以解决 ...

  10. 3-Ubuntu下python3安装pymysql模块(1)

    命令:sudo pip3 install pymysql