数组转List 方法Arrays.asList()
有些人做开发一两年,都搞不清楚的java基础知识:
public class Test {
public static void main(String[] args) {
/*int[] iArr = {456,789,1230,741,8520,963};
//List<int> iList = Arrays.asList(iArr); // err List 里面存的并不是 多个int类型 元素
List<int[]> iList = Arrays.asList(iArr); // ok 而是 int[] 类型 一个对象
System.out.println(iList); // [[I@4b85612c]
for (int i = 0; i < iList.size(); i++) { // 只会循环一次(内部不抛异常的情况下)
System.out.println("O(∩_∩)O~");
if (0==i)
iList.remove(i); // 增删元素操作会抛异常:java.lang.UnsupportedOperationException
}*/
/*String[] sArr = {"456","789","1230","741","8520","963"};
//List<String[]> sList = Arrays.asList(sArr); // err List 里面存的并 不是String[] 类型 一个对象
List<String> sList = Arrays.asList(sArr); // ok 而是 多个String类型 元素
System.out.println(sList); // [456, 789, 1230, 741, 8520, 963]
for (int i = 0; i < sList.size(); i++) { // 会循环多次(内部不抛异常的情况下)
System.out.println("O(∩_∩)O~");
if (0==i)
sList.remove(i); // 增删元素操作会抛异常:java.lang.UnsupportedOperationException
}*/
// String类型是个特殊的 引用类型 ,Arrays.asList()会特别处理,其他 引用类型(基本数据类型会自动包装) 和 iArr的效果一样。
// Arrays.asList()转过来的 List 是不能进行增删操作的!!
// 解决办法:new ArrayList<>(作为参数传到这里);
List<String> okList = new ArrayList<>(Arrays.asList(new String[]{"456","789","1230","741","8520","963"}));
System.out.println(okList);
for (int i = 0; i < okList.size(); i++) { // 现在 完全是一个正常的List,可以正常增删操作
System.out.println("O(∩_∩)O~");
if ("789".equals(okList.get(i))){
okList.remove(i--); // 遍历List时,根据角标删除元素 角标--
}
}
}
}
- // 遍历List时,根据角标删除元素 角标–
- 原因:集合中删了一个元素,后面的元素会自动前移,
- 比如说 刚把角标2上的元素删了,继续循环 就轮到角标3了,
- 可是后面元素前移,之前在角标3位置的元素现在已经在角标2上了
- 不–操作,刚移到角标2的元素就成了漏网之鱼!!