平时写代码常常会混淆一些东西,在这里写这篇博客,是希望将容易混淆但经常用到的方法、属性、工具类总结出来,并将大牛的博客整理贴出来以供大家参考。希望自己能不断添加新的,一直更新下去吧。
1. length、length()、size()区别
- length不是方法,是属性,数组的属性
- length()是字符串String的一个方法
- size()方法,是List集合的一个方法
详细参考CSDN博主「张小烦一点都不烦」的原创文章:传送门
2. 判断数组/集合为空的工具类
-
判断集合是否为空:collection == null || collection.isEmpty();
-
判断Map是否为空:map == null || map.isEmpty();
-
判断数组是否为空:array == null || array.length == 0;
-
判断List是否为空 :list == null || list.size() == 0;
详细参考博客园博主ONEDIR的原创文章:传送门
3. java Queue中 remove/poll, add/offer, element/peek区别
offer,add区别:
- add方法向队列中添加元素,返回布尔值,add方法添加失败时会抛异常,不推荐使用
- offer方法向队列中添加元素,返回布尔值
poll,remove区别:
-
remove方法移除首个元素并返回,若队列为空,会抛出异常:NoSuchElementException,不推荐使用
-
poll方法移除队列首个元素并返回,若队列为空,返回null
peek,element区别:
- peek方法返回队列首个元素,但不移除,若队列为空,返回null
- element方法返回队列的头元素,但不移除,若队列为空,会抛出异常:NoSuchElementException,不推荐使用
详细参考博客园博主「迷失之路」的原创文章:传送门
Arraylist和Linkedlist的区别
- Arraylist:底层是基于动态数组,根据下表随机访问数组元素的效率高,向数组尾部添加元素的效率高;但是,删除数组中的数据以及向数组中间添加数据效率低,因为需要移动数组。例如最坏的情况是删除第一个数组元素,则需要将第2至第n个数组元素各向前移动一位。而之所以称为动态数组,是因为Arraylist在数组元素超过其容量大,Arraylist可以进行扩容(针对JDK1.8
数组扩容后的容量是扩容前的1.5倍),Arraylist源码中最大的数组容量是Integer.MAX_VALUE-8,对于空出的8位,目前解释是
:①存储Headerwords;②避免一些机器内存溢出,减少出错几率,所以少分配③最大还是能支持到Integer.MAX_VALUE(当Integer.MAX_VALUE-8依旧无法满足需求时) - Linkedlist基于链表的动态数组,数据添加删除效率高,只需要改变指针指向即可,但是访问数据的平均效率低,需要对链表进行遍历。
- 对于随机访问get和set,ArrayList优于LinkedList,因为LinkedList要移动指针。
对于新增和删除操作add和remove,LinedList比较占优势,因为ArrayList要移动数据。
详细参考CSDN博主「QQ是一枚程序媛」的原创文章:传送门
- Java 定义长度为 0 的数组 / 空数组
int[] array = new array[0]; // 定义一个长度为 0 的数组 / 空数组
长度为 0 的数组 / 空数组 并不是 null
详细参考CSDN博主「QQ是一枚程序媛」的原创文章:传送门
Java list的用法
- list中添加,获取,删除元素;
添加方法是:.add(e);
获取方法是:.get(index);
删除方法是:
按照索引删除;.remove(index);
按照元素内容删除;.remove(Object o); - list中是否包含某个元素; 方法:.contains(Object o); 返回true或者false
- list中根据索引将元素数值改变(替换);
.set(index, element) 对指定的index的元素进行替换
.add(index, element)对指定的index添加,原来的往后移 - list中查看(判断)元素的索引;
方法:
.indexOf() 查看元素索引,若存在多个相同元素,返回第一个元素索引
.lastIndexOf()有多个相同元素,返回相同元素中最后一个元素的索引 - 根据元素索引位置进行的判断;
object.indexOf() ==0 - 利用list中索引位置重新生成一个新的list(截取集合);
方法: .subList(fromIndex, toIndex);注意:不包括toIndex .size() ; 该方法得到list中的元素数的和 - 对比两个list中的所有元素;
两个相等对象的equals方法一定为true, 但两个hashcode相等的对象不一定是相等的对象 - 判断list是否为空;
方法: .isEmpty() 空则返回true,非空则返回false - 返回Iterator集合对象;
.iterator() - 将集合转换为字符串;
.toString() - 将集合转换为数组;
.toArray()
12 集合类型转换;
13 去重复;
详细参考CSDN博主「Barcon」的原创文章:传送门
判断List是否为空的问题
两种方法来进行判断都是可以判断的list集合为空问题
if(list != null && list.isEmpty())
else{ 做其他处理}
if(list != null && list.size()!=0)
else{ 做其他处理}
【Java面试题】Double和double 区别
-
Double是java定义的类,而double是预定义数据类型(8种中的一种)
-
Double就好比是对double类型的封装,内置很多方法可以实现String到double的转换,以及获取各种double类型的属性值(MAX_VALUE、SIZE等等)
-
基于上述两点,如果你在普通的定义一个浮点类型的数据,两者都可以,但是Double是类所以其对象是可以为NULL的,而double定义的不能为NULL,如果你要将一些数字字符串,那么就应该使用Double类型了,其内部帮你实现了强转。