七、集合处理

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. 43. 守护线程 和 join方法

    1.守护线程(后台线程):            我们在使用一款软件的时候,有的软件会让我们在不知道的情况下下载一些东西,那么这个就是后台线程.            一般用于提高软件的下载量(也就是 ...

  2. 【NOI2019模拟2019.7.4】朝夕相处 (动态规划+BM)

    Description: 题解: 这种东西肯定是burnside引理: \(\sum置换后不动点数 \over |置换数|\) 一般来说,是枚举置换\(i\),则\(对所有x,满足a[x+i]=a[i ...

  3. 记录下工作中用到的Linux命令

    ---恢复内容开始--- 常用的Linux命令以下命令在博主的开发中经常使用,因此在此做一记录,以做备忘! 1.查看java进程ps -ef|grep javaps aux|grep java lso ...

  4. .net 项目如何添加log4net日志记录

    1.在项目根目录新建文件log4net.config,此文件中的节点解释还请自动百度. 文件实例: <?xml version="1.0"?><configura ...

  5. NX二次开发-UF_MODL_create_bplane创建有界平面

    这里要注意一点,有界平面是body,不是face,以前我刚开始做项目的时候一直以为有界平面是face,后来发现不对.是body NX9+VS2012 #include <uf.h> #in ...

  6. MySQL查询语句详解,排序、分组、聚合函数、约束

    create database day20; 查询的时候from前面的字段是需要显示出来的内容,后面是条件use day20;create table phones(id int,pinpai var ...

  7. 【洛谷】P1962

    题目链接:https://www.luogu.org/problemnew/show/P1962 题意:求fib数列的第n项,很大.mod 1e9+7. 题解:BM直接推. 代码: #include ...

  8. Springboot整合dubbo搭建基本的消费、提供和负载均衡

    文章目录 1.确定接口 2.创建提供者 2.1 pom配置 2.2dubbo配置文件 2.3 application.properties 2.4 mybatis相关 2.4.1 配置UserMapp ...

  9. SqlMapClient operation; bad SQL grammar []; nested exception is com.ibatis.common.jdbc.exception.NestedSQLException: InlineParameterMap

    <select id="getResByName" resultClass="Resources" parameterClass="java.l ...

  10. 常见PID里面的像素大小

    因为tensorflow/models里faster R-cnn目前识别的好像是按照像素比上图片大小来识别的,所以在这里统计一下各个元件的像素大小的范围 DCS:70~200