七、集合处理

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. 13. this关键字

    1.this的概述 this关键字代表是对象的引用.也就是this在指向一个对象,所指向的对象就是调用该函数的对象引用. 2.this实例,初始化成员变 class Employee { privat ...

  2. MongoDB启动时遇到的问题

    问题一:child process failed, exited with error number 100 原因分析:100是锁了 解决办法:#cd  /usr/local/mongodb/data ...

  3. Hbase和Hive在大数据架构中处在不同位置

    先放结论:Hbase和Hive在大数据架构中处在不同位置,Hbase主要解决实时数据查询问题,Hive主要解决数据处理和计算问题,一般是配合使用.一.区别:Hbase: Hadoop database ...

  4. thinkphp 应用模式

    应用模式提供了对核心框架进行改造的机会,可以让你的应用适应更多的环境和不同的要求. 每个应用模式有自己的模式定义文件,用于配置当前模式需要加载的核心文件和配置文件,以及别名定义.行为扩展定义等等.根据 ...

  5. 扫描线+树状数组——cf1191F

    把所有点离散化,虚构一根扫描线从上往下扫,每行的点从左往右算贡献,开一个树状数组维护每个离散化后的x坐标是否已经有点 扫描到一个点时,先把这个点更新到树状数组里,每个点的贡献是它左边的所有点数*到它相 ...

  6. LUOGU P4560 [IOI2014]Wall 砖墙 (线段树)

    传送门 解题思路 线段树打标记,刚开始想复杂了,维护了四个标记.后来才知道只需要维护一个最大值最小值即可,然后更新的时候分类讨论一下. 代码 #include<iostream> #inc ...

  7. C++ 将汉字转换成拼音全拼【转载】

    转载自https://www.cnblogs.com/mzhrd/p/4758105.html #include <string> using std::string; //======= ...

  8. (转)ab(apachebench)测试与loadrunner

    转:http://blog.csdn.net/gzh0222/article/details/7172341 ab的全称是ApacheBench,是 Apache 附带的一个小工具,专门用于 HTTP ...

  9. pip安装时ReadTimeoutError解决办法

    主要是被阻断了,所以可以延长等待时间完美解决问题.  在下载终端先输入如下命令: pip --default-timeout=100 install -U pip 然后输入下载命令:pip insta ...

  10. 高手总结CSS书写技巧

    这个时候我们就需要针对不同的浏览器去写不同的CSS,让它能够同时兼容不同的浏览器,能在不同的浏览器中也能得到我们想要的页面效果.这个针对不同的浏览器写不同的CSS code的过程,就叫CSS hack ...