最近在学习阿里开发手册,感觉对于集合的一些用法还是存在问题,整理一下,防止后期忘记!
1、使用集合转数组的方法,必须使用集合的 toArray(T[] array),传入的是类型完全一
致、长度为 0 的空数组。
public static void main(String[] args) {
//集合转为数据 通过这种方法可以转化
List<String> list = new ArrayList<>();
list.add("a");
list.add("b");
String strArr[] = list.toArray(new String[0]);
System.out.println(strArr.length);
List<Integer> intList = new ArrayList<>();
intList.add(1);
Integer intArr [] = intList.toArray(new Integer[0]);
System.out.println(intArr.length);
}
2、不要在 foreach 循环里进行元素的 remove/add 操作。remove 元素请使用Iterator 方式,如果并发操作,需要对 Iterator 对象加锁。
public static void main(String[] args) {
List<String> list = new ArrayList<>();
list.add("a");
list.add("b");
// 正解:使用Iterator移除集合元素
Iterator<String> iterator = list.iterator();
while(iterator.hasNext()){
String item = iterator.next();
if("b".equals(item)){
iterator.remove();
}
}
for (String item : list) {
System.out.println("item:" + item);
}
// 反例:这样写会导致错误
// for (String item : list) {
// if("b".equals(item)){
// list.remove(item);
// }
// }
}
如果感兴趣的同学,可以看一下这篇文章,讲的挺好
转载:https://www.cnblogs.com/loong-hon/p/10256686.html
3、使用 entrySet 遍历 Map 类集合 KV,而不是 keySet 方式进行遍历。
说明:keySet 其实是遍历了 2 次,一次是转为 Iterator 对象,另一次是从 hashMap 中取出 key 所对应的 value。而 entrySet 只是遍历了一次就把 key 和 value 都放到了 entry 中,效率更高。如果是 JDK8,使用 Map.forEach 方法。
public static void main(String[] args) {
// 示例:通过entry循环查询map中的key,value
HashMap<String, String> map = new HashMap<>();
map.put("a", "1");
map.put("b", "2");
map.put("c", "3");
map.put("f", "3");
map.put("d", "3");
map.put("e", "4");
Set<Entry<String,String>> entry = map.entrySet();
for (Entry<String, String> entry2 : entry) {
System.out.println("key:" + entry2.getKey() + "," + entry2.getValue());
}
}