- 浏览: 211316 次
- 性别:
- 来自: 哈尔滨
文章分类
- 全部博客 (267)
- java.lang (8)
- 问题汇总 (21)
- 异常记录 (20)
- 功能实现 (19)
- 面试总结 (25)
- 技巧总结 (8)
- 常用代码 (4)
- 编程习惯 (3)
- 编码规则 (3)
- java.util (10)
- java.io (1)
- JavaWeb (9)
- MySQL (16)
- SVN (3)
- MyBatis (11)
- Velocity (7)
- 其他知识 (10)
- 人生哲理 (1)
- 人生故事 (1)
- 自我感悟 (1)
- shiro (3)
- 基础知识 (0)
- 问题总结 (1)
- Spring 标签 (1)
- Spring (3)
- 点滴生活 (1)
- DOS (1)
- CAS (4)
- Linux (9)
- Storm (6)
- Shell (1)
- regex (1)
- Collection (4)
- poi (1)
- 经典语句 (1)
- NIO (5)
- concurrent (14)
- RPC (1)
- zookeeper (3)
- 待整理 (2)
- Hadoop (9)
- RabbitMq (2)
- flume (1)
- hive (7)
- hbase (4)
- kafka (1)
- scala (1)
- GC (0)
- java.util.concurrent.atomic (1)
- java.lang.ref (6)
- JVM (2)
- algorithm (1)
- conception (1)
- java key word (1)
- sun.misc (1)
最新评论
常犯错误总结(一)
一、Arrays.asList 与 java.util.ArrayList
1.常用代码:
// 将数组转化为集合 int [] intArray = new int[]{1,2,3,4}; List<int[]> asList = Arrays.asList(intArray);
此时 Arrays.asList 转化过程中使用到了一个ArrayList 但此ArrayList 非 java.util.ArrayList 而是 Arrays 内部的一个静态类
2.java.util.Arrays.ArrayList(Arrays的私有内部静态类)
源码分析
// Arrays类中的asList方法 public static <T> List<T> asList(T... a) { return new ArrayList<T>(a); } // 上面的ArrayList 是Arrays 的内部定义的静态类,而非java.util.ArrayList private static class ArrayList<E> extends AbstractList<E> implements RandomAccess, java.io.Serializable { private static final long serialVersionUID = -2764017481108945198L; private final E[] a; ArrayList(E[] array) { if (array==null) throw new NullPointerException(); a = array; } } // 此ArrayList 继承 AbstractList // 而AbstractList 实现 List // 所以 asList 方法可以将 ArrayList 返回给 List public abstract class AbstractList<E> extends AbstractCollection<E> implements List<E> { /** * Sole constructor. (For invocation by subclass constructors, typically * implicit.) */ protected AbstractList() { } }
常用方法
// 定义的私有内部静态类支持常用的方法调用,基本等同于java.util.ArrayList private static class ArrayList<E> extends AbstractList<E> implements RandomAccess, java.io.Serializable { private static final long serialVersionUID = -2764017481108945198L; private final E[] a; ArrayList(E[] array) { if (array==null) throw new NullPointerException(); a = array; } // 注意此处的size是数组的个数,而不是数组中元素的格式 // int [] intArray = new int[]{1,2,3,4}; // List<int[]> asList = Arrays.asList(intArray); // System.out.println(asList.size()); // 输出结果是1而不是4 public int size() { return a.length; } public Object[] toArray() { return a.clone(); } public <T> T[] toArray(T[] a) { int size = size(); if (a.length < size) return Arrays.copyOf(this.a, size, (Class<? extends T[]>) a.getClass()); System.arraycopy(this.a, 0, a, 0, size); if (a.length > size) a[size] = null; return a; } public E get(int index) { return a[index]; } public E set(int index, E element) { E oldValue = a[index]; a[index] = element; return oldValue; } public int indexOf(Object o) { if (o==null) { for (int i=0; i<a.length; i++) if (a[i]==null) return i; } else { for (int i=0; i<a.length; i++) if (o.equals(a[i])) return i; } return -1; } public boolean contains(Object o) { return indexOf(o) != -1; } }
3.与 java.util.ArrayList 的转化
List<Integer> arrayList = new ArrayList<Integer>(Arrays.asList(integerArray));
4.java.util.Arrays.ArrayList.size()方法
// asList 的参数是 T 泛型,int 是基本数据类型, // 但 int [] 数组是泛型 int [] intArray = new int[]{1,2,3,4}; List<int[]> asList = Arrays.asList(intArray); System.out.println(asList.size()); // 1 // asList 的参数是 T ... a ,多个泛型 T // 而Integer 是引用数据类型,此处被解析为传入了多个参数 Integer [] integerArray = new Integer[]{1,2,3,4}; List<Integer> asList2 = Arrays.asList(integerArray); System.out.println(asList2);// 4
二、判断集合中是否包含某个元素
1.常用代码
Set<String> set = new HashSet<String>(Arrays.asList(arr)); return set.contains(targetValue);
可以改为:
// 因为 java.util.Arrays.ArrayList 有 contain 方法,无需再转为Set Arrays.asList(arr).contains(targetValue);
或
for(String s: arr){ if(s.equals(targetValue)) // Objects.equals(s,targetValue) return true; } return false;
三、删除List中的元素
1.三种想法
List<String> listString = new ArrayList<String>(Arrays.asList("a","b","c","d")); // 删除元素后不会出现异常,但要注意删除元素后原来元素的索引会有变化,比如删除a后,此时b的位置要变为0;此时再想删除b已经不可能了,因为index 已经变为1了。即:删除一个特定元素可以 for(int index = 0 ; index < listString.size() ; index ++){ if("a".equals(listString.get(index))){ listString.remove(index); } } for(String str : listString){ if("a".equals(str)){ listString.remove(str); } } // 使用此方式进行删除 Iterator<String> iterator = listString.iterator(); while(iterator.hasNext()){ if("a".equals(iterator.next())){ iterator.remove(); } }
博文参考:
JAVA中循环删除list中元素的方法总结
四、hashMap 与 hashtable
Hashtable
hashMap 线程不安全
hashtable 线程安全
五、使用原始类型的集合
集合与集合泛型
即 List 与 List<?> 的区别
在使用过程中,如果未指定具体的泛型实现,在对集合进行增删改操作时会因为类型的
1.代码样例
public class ListMainTest { public static void add(List list, Object o) { list.add(o); } public static void main(String[] args) { List<String> list = new ArrayList<String>(); add(list, 10); String s = list.get(0); } }
会抛出异常:
Exception in thread "main" java.lang.ClassCastException: java.lang.Integer cannot be cast to java.lang.String
2.异常分析
对 list.get(0) 来说,此时的结果为 Object ,而此时的Object 是通过Integer 类型进行复制的,而接受值的类型却定义为 String ,类型对应错误;
3.总结问题
使用Set<?> 方式在操作时可以起到类型校验的作用,从而避免上述的问题
六、访问权限
编程习惯,通常定义接口或service 时顺手直接public;
按照编码规范,应该限制用户的访问权限,直接默认即可
七、ArrayList vs. LinkedList
数组;链表
便于查找,而不利于增删改;后者相反;
ArrayList 实现 RandomAccess ,大量数据遍历时使用 for,随机访问;后者,实现 Deque 双向链表,遍历时 使用 Iterator
博文转载:
十个JAVA程序员容易犯的错误
发表评论
-
问题整理(一)
2018-01-21 09:58 400分页实现 jr-MyBatis PageBean PageB ... -
2017年问题汇总-待整理
2017-12-31 12:27 2236查询时应注意的事项 1. ... -
为什么tinyint(1)映射po类中属性时的字段类型为Boolean
2017-11-29 20:42 1455问题描述: 建表,字段类型 tinyint 长度 1 ,映射 ... -
删除<!DOCTYPE html> 后页面样式错误
2017-11-24 21:42 1599问题描述: 根据前端同事提供的HTML页面嵌套JSP页面 删除 ... -
检索指定时间范围内的数据与预期不一致
2017-10-30 20:38 572问题背景: 在不同日期内进行不同的业务逻辑,在测试环境进行模拟 ... -
为什么切换root用户失败
2017-10-16 20:54 1333问题背景: 需要申请服务器root权限以便于维护部署在服务器 ... -
为什么没有查询到日志输出
2017-10-15 18:13 704问题背景: 项目中某个功能发送队列,造成队列积压,系统功能预警 ... -
为什么项目调用进入JAR包而没有进入本地的项目中
2017-10-02 18:16 843问题场景: 公司项目采用模块化的形式,即按照业务模块构建多个 ... -
为什么运行接口无返回值
2017-10-02 18:08 788问题场景: 与同事共同开发一个项目,调用其开发的接口,未接收 ... -
为什么当天的时间格式化后却变为昨天的时间
2017-10-02 16:50 1322问题场景: 生产环境程序运行过程中,统计数据不正确,查看日志 ... -
为什么新安装的Eclipse不能打开
2017-10-01 22:33 1428问题描述: 同事遇到的问题,在公司的已有的公用的笔记本上安装 ... -
为什么修改后的JS CSS 发布后不生效
2017-09-27 22:25 1541问题场景: 本地修改后的JS CSS ,发布到测试环境后,并未 ... -
为什么Map中Date类型数据接收时变为Long类型数据
2017-03-26 22:11 2038问题描述 接口调试过程中,发现调用同一个SQL的两个不同的Se ... -
为什么JS没有收到返回值
2016-05-24 22:44 611问题:登录优化,POST提交登录信息,回传登录结果信息给JS展 ... -
为什么路径正确却访问不到页面
2016-05-24 22:32 931问题:ACTION中,跳转页面时报错,CAN NOT FOUN ... -
为什么启动SERVICE服务失败
2016-05-15 09:10 1543问题: 基于服务化开发,启动服务SERVIICE API中 ... -
为什么一个服务化工程引用不到另一个服务化工程
2015-08-12 20:04 546问题一:java中一个服务工程引用另一个工程引用够不到 描述 ... -
为什么服务版本或持久化类属性对应不上
2015-05-26 15:54 724问题描述: 基于服务化框架开发, 开发过程中,WEB项目在调 ... -
为什么列表中分页查询报错
2015-05-11 20:44 392问题:Action中进行列表页面操作报错,跟踪后发现是Page ... -
为什么Action中的接口执行了两次
2015-05-04 15:06 917问题场景: 程序中的方法莫名其妙的执行了两次,导致结果与预期的 ...
相关推荐
### Java编码常犯错误 #### 一、字符串拼装SQL **问题描述**:在Java开发过程中,直接使用字符串拼接的方式构造SQL语句是一种常见的做法。然而这种方式存在明显的安全隐患和性能问题。 - **安全漏洞**:直接拼接...
C语言高手总结的新手容易犯的错误 C语言是一门经典的编程语言,对于新手来说,易犯的一些错误是非常普遍的。这些错误不仅影响代码的正确性,也会浪费大量的时间和精力。因此,了解和避免这些错误是非常重要的。 1....
### CSS初学者常犯错误汇总 #### 一、概述 对于初学者而言,在学习和使用CSS(层叠样式表)的过程中经常会遇到各种各样的问题。这些问题不仅会降低工作效率,还可能导致网页布局出现意料之外的结果。本文将针对CSS...
本文将对C语言编程中常见的易犯错误进行分析,旨在为初学者提供一份参考,帮助他们少走弯路,提高编程技能。 首先,C语言是一种区分大小写的编程语言。这意味着,在书写标识符时,如变量名、函数名和宏定义等,必须...
【职业经理人常犯错误的培训】是针对企业管理者常见问题的一个专题培训,旨在帮助职业经理人提升管理效能,避免常见的管理误区。以下是对这些错误的详细解释: 1. **拒绝承担责任**:优秀的管理者应该勇于承担工作...
以下总结了AngularJS开发者最常犯的十个错误,帮助大家避免这些陷阱,提升开发效率。 1. MVC目录结构不清晰: 开发者通常按照文件类型(如模板、控制器、指令、服务和过滤器)来组织代码,但这可能导致随着项目...
基于对超过200篇由中国工程学研究生撰写的英文技术论文的研究,本文总结了以下几种常见的写作习惯和错误: 1. **词汇选择不当**: - **例子**:“This paper introduces a new algorithm which is used to solve ...
例如,代码优化、网站静态化、结构设计、美工创意和内容编辑都需要协作完成,形成一个高效的团队。 4. **忽略数据分析与效果追踪**:持续分析网站SEO数据,如排名变化、IP流量、跳出率和转化率,对优化策略调整至关...
Saber是目前电子设计领域当中应用较为广泛的也是功能最为全面的仿真软件之一。但对于新手来说,在Saber软件的使用过程中总会遇到这样或那样的问题,阻碍设计与学习。在本文中,小编特意为大家总结了一些在saber仿真...
【标题】:“犯错误以后...总结来说,这篇“犯错误以后”的故事,通过作者的亲身经历,阐述了犯错、反思、成长以及友谊的价值,提醒我们在生活和成长过程中,应学会理智处理情感,珍视身边的人,并从错误中汲取教训。
【数据库开发者常犯的十大错误】是每个数据库从业者必须警惕的陷阱。首先,选择错误的数据库是常见问题。开发者必须根据实际需求分析数据量和性能要求,选择合适的数据库系统,如Access适合小型任务,SQL Server ...
以下是关于面试官的面试技巧和易犯错误的详细阐述。 首先,行为面试法是面试官常用的一种评估方法。这种方法基于行为的连贯性原理,认为一个人过去的行为可以预测未来的行为。面试官应采用开放式问题,让应聘者通过...
### Java中Long与Integer比较易犯错误总结 #### 一、引言 在Java编程过程中,经常需要对数值进行比较操作。对于基本数据类型如`int`和`long`,可以直接使用`==`进行比较。然而,当涉及到它们的包装类`Integer`和`...
的总结,关于数据挖掘中十大易犯错误的深入探讨。 ### 0. 缺乏数据(Lack Data) 数据是数据挖掘的基础,没有足够或高质量的数据,任何分析都将成为无源之水。特别是在分类问题或预测问题中,如欺诈侦测和信用评分...
### C语言易犯错误 C语言作为一门基础且强大的编程语言,在学习过程中,初学者往往会遇到各种常见的陷阱和误区。本文将根据前人的经验和教训,总结出一系列在编写C语言程序时容易出现的问题,并对这些问题进行详细...
### 中国人写英文文章常犯的错误及改进指南 #### 引言 随着全球化的深入发展,越来越多的中国学者、工程师和技术人员需要在国际期刊上发表论文或撰写技术文档,以便与世界各地的专业人士进行交流与合作。然而,在...
程序员在准备面试时,往往会出现一系列的错误,这些错误可能会严重影响到面试的表现和最终结果。以下是对这些常见错误的详细分析: 1. **只在电脑上练习编程**:程序员习惯于在IDE或编译器中编写代码,但在面试中,...
### 中国人写英文文章最常犯的错误 #### 概述 本文主要针对中国研究生群体在撰写英文技术论文时常见的语言习惯与错误进行了系统性的分析与归纳。通过对超过200篇由中国工程专业学生撰写的英语技术论文的研究,作者...