七、集合处理

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. 关于第一次web前端面试的记录

    最近参加了一场面试,感觉自己题目都懂,但是说起来就是有点说不明白,所以写个博客整理以下吧.答案不少不是面试时回答的答案,只是整理一下可行答案 1. 如图1,使B相对于A垂直居中 图1 <styl ...

  2. mui框架页面每次加载操作

    最近在优化自己用mui开发的app,主要还是针对交互这块儿,这里简单给大家说一下问题点场景,就是我是通过动态添加底部tabBar的方法创建了一个底部可以切换的操作区域,代码如下: mui.init() ...

  3. selenium 显示等待、隐式等待、强制等待

    如今大部分web程序使用Ajax技术,当浏览器加载页面时,页面元素可能不是同时加载完成,如果因为加载某个元素超时导致ElementNotVisibleException的情况出现,自动化脚本的稳定性就 ...

  4. DZY LOVES MATH (莫比乌斯反演)

    OK!开始更新莫比乌斯反演 先看了一下数据范围,嗯,根据\(jiry\)老师的真言,我们一定是可以筛一遍然后用根号或者是\(log\)的算法. 题目思路挺简单,就是把原始的式子化成: \(\sum_{ ...

  5. Apache负载均衡

    Apache负载均衡 Apache也是可以实现负载均衡的.Apache的负载均衡主要是通过mod_proxy_balancer实现的.那么,apache负载均衡的配置方法是什么样的? 在apache的 ...

  6. opencv-图像形态学之开运算、闭运算、形态学梯度、顶帽、黑帽合辑

    转自:https://blog.csdn.net/poem_qianmo/article/details/24599073 1.1 开运算(Opening Operation) 开运算(Opening ...

  7. 拾遗:Git 基础

    http://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000/ 一.参数配置 $ git con ...

  8. solr 启动报错Cannot load analyzer: org.wltea.analyzer.lucene.IKAnalyzer

    schema.xml 配置文件信息: <field name="title" type="text_ik" indexed="true" ...

  9. vue点击跳转拨号界面

    <a :href="'tel:' + VipInfo.HotelPhone" style="text-decoration:none;color:black;opa ...

  10. Java面试(1)

    一.Java基础 什么是字符串常量池? Java中的字符串常量池(String Pool)是存储在Java堆内存中的字符串池: String是java中比较特殊的类,我们可以使用new运算符创建Str ...