越界问报错题
add只能访问已有数据的0、1 两个位置为什么,index写2不报错?
add只能访问已有数据的0、1 两个位置为什么,index写2不报错?
2018-09-18
你看,原来couresToSlect只有0,1位,你这个时候加cr3到2的位置,讲课里说了ArrayList()的数组长度会跟着你的加的值增大而增大,你加了cr3,这个时候ArrayList()的数组长度就会变成3,但你要是越过了第3位直接加在第四位也就是couresToSlect.add(3, cr3),中间空了一位,ArrayList()的数组长度将不会跟着改变,系统也就会报错。注意!!!:不过这都是几年前的视频了,现在的jdk版本中已经可以这样跳着加数组了,你可以试着在你的myeclipse上打一下这个代码,运行已经不会报错了,会直接加长ArrayList()的数组长度到你指定的地方
其实就是视频里的程序
package com.imooc.collection;
import java.nio.charset.MalformedInputException;
import java.util.ArrayList;
import java.util.List;
/*
* 备选课程类;
*/
public class ListTest {
/*
*用于存放备选课程的List
*/
public List couresToSlect;
public ListTest() {
// TODO Auto-generated constructor stub
this.couresToSlect=new ArrayList();
}
/*
* 用于往courseToSelect中添加备选课程
*/
public void testAdd() {
// 创建一个课程对象,并通过调用 ArrayList的add方法,添加到备选课程list中
Course cr1= new Course("1", "数据结构");
couresToSlect.add(cr1);
//通过 ArrayList的get方法,读取list中第一个元素,取出需要类型转换;
Course temp =(Course) couresToSlect.get(0);
System.out.println("添加了课程:"+temp.id+":"+temp.name);
Course cr2 =new Course("2", "C语言");
couresToSlect.add(0, cr2);//指定位置插入list,cr1挤到1位置;
Course temp2 =(Course) couresToSlect.get(0);
System.out.println("添加了课程:"+temp2.id+":"+temp2.name);
Course cr3 =new Course("3", "test");
couresToSlect.add(2, cr3);//能访问只是已有数据位置0、1并插入数据,为什么这里填2不会报错?
}
public static void main(String[] args) {
ListTest lt =new ListTest();
lt.testAdd();
}
}
举报