Exception in thread “main” java.lang.IndexOutOfBoundsException: Index: 1, Size: 0
at java.util.ArrayList.rangeCheckForAdd(ArrayList.java:665)
at java.util.ArrayList.add(ArrayList.java:477)
写ArrayList添加元素的时候,遇到Java中这个典型的数组越界的异常。
public class SortMap {
public static void main(String[] args) {
List<User> userList = new ArrayList<User>();
List<User> userList1 = new ArrayList<User>();
List<User> userList2 = new ArrayList<User>();
userList.add(0, new User("Tom", 25, 0));
userList.add(1, new User("Mary", 18, 1));
userList.add(2, new User("Lily", 22, 1));
userList.add(3, new User("Jack", 27, 0));
userList.add(4, new User("Rose", 27, 1));
userList.add(5, new User("Bily", 25, 0));
Map<Integer, List<User>> userMap = new HashMap<>();
for (int i = 0; i < userList.size(); i++) {
if (userList.get(i).getSex() == 0) {
userList1.add(i, userList.get(i));
} else {
userList2.add(i,userList.get(i));
}
}
userMap.put(0,userList1);
userMap.put(1,userList2);
for(Map.Entry<Integer,List<User>> entry: userMap.entrySet()){
System.out.println(entry.getKey());
for (User user :entry.getValue()){
System.out.println(user.getName());
System.out.println(user.getAge());
}
}
}
}
错误的问题就出在这个代码块中!
进入源码发现
private void rangeCheckForAdd(int index) {
if (index > size || index < 0)
throw new IndexOutOfBoundsException(outOfBoundsMsg(index));
}
索引值不能大于实际的长度或者索引值不能小于0;
我这里的写法就造成了索引值大于实际长度的现象。其实如果没有特殊的要求要将元素添加到特定位置,list添加元素的时候没必要指定索引值。
for (int i = 0; i < userList.size(); i++) {
if (userList.get(i).getSex() == 0) {
userList1.add( userList.get(i));
} else {
userList2.add(userList.get(i));
}
}
将错误代码改成这样,问题就解决了**.**