Java开发手册精选-集合处理

一 接口类中的方法和属性不要加任何修饰符号(public 也不要加)

		正例:void f ();

二 方法参数在定义和传入时,多个参数逗号后面必须加空格

        method("a", "b", "c");

三 所有的重写方法,必须加@Override注解

四 所有相同类型的包装类对象之间值得比较,全部使用equals方法比较

五 关于基本数据类型与包装数据类型的使用标准如下:

  • 所有的POJO类属性必须使用包装数据类型
  • RPC方法的返回值和参数必须使用包装数据类型
  • 所有的局部变量使用基本数据类型

六 构造方法里面禁止加入任何业务逻辑,如果有初始化逻辑,请放在init方法中

七 使用索引访问用String的split方法得到的数组时,需做最后一个分隔符后有无内容的检查,否则会抛出IndexOutOfBoundsException

说明:

String str = "a,b,c,,";
String[] ary = str.split(",");
// 预期大于3,结果是3
System.out.println(ary.length);

八 慎用Object的clone方法来拷贝对象

	说明:对象的clone方法默认是浅拷贝。若要想实现深拷贝需要重写clone方法实现属性对象的拷贝

九 关于hashcode和equals的处理,遵循如下规则:

  1. 只要重写equals,就必须重写hashCode
  2. 因为Set存储的是不重复的对象,依据hashcode和equals进行判断,所以Set存储的对象就必须重写这两个方法。
  3. 如果自定义对象作为map的键,那么必须重写hashCode和equals。
说明: String重写了hashCode和equals方法,所以我们可以非常愉快地使用String对象作为key来使用。

十 ArrayList的subList结果补课强转成ArrayList,否则会抛出ClassCastException异常。

说明:subList返回的是ArrayList的内部类SubList,并不是ArrayList。

十一 使用集合转数组的方法,必须使用集合的toArray(T[] array),传入的类型完全一样的数组,大小就是list.size();

十二 使用工具类Arrays.asList()把数组转换成集合时,不能使用期修改集合的相关的方法,他的add/remove/clear方法会出抛出UnsupportedOperationException异常。

说明:asList()返回的对象是一个Arrays内部类,并没有实现集合的修改方法.Arrays.asList体现的是适配器模式,只是转换接口,后台的数据仍是数组。

String[] str = new String[] { "you", "wu" }; 
List list = Arrays.asList(str); 
第一种情况:list.add("yangguanbao"); 运行时异常。
第二种情况:str[0] = "gujin"; 那么list.get(0)也会随之修改。

十三 不要在foreach循环里进行元素的remove/add操作。remove元素请使用Iterator方式,如果是并发操作,需要对Iterator对象加锁。

正例:
Iterator<String> iterator = list.iterator();
while (iterator.hasNext()) {
String item = iterator.next();
if (删除元素的条件) {
iterator.remove();
}
} 
反例:
List<String> list = new ArrayList<String>();
list.add("1");
list.add("2");
for (String item : list) {
if ("1".equals(item)) {
list.remove(item);
}
}

十四 推荐使用entrySet遍历Map类集合KV,而不是keySet方式进行遍历。

说明:keySet其实是遍历两次,一次是转为Iterator对象,另一次是从hashMap中取出key对应的value。而entrySet只是遍历了一次就把key和value都放到了entry中,效率更高。如果是jdk8,使用Map.foreach方法。
eg:values()返回的是V值集合,是一个list集合对象;keySet()返回的是K值集合,是一个Set集合对象;entrySet()返回的是K-V值组合的集合。

猜你喜欢

转载自blog.csdn.net/yangyang3_/article/details/88115621