集合类--arraylist学习笔记
(1)内存模型
动态存取性质:arraylist是从上至下从0开始的。第一个元素在0位,插入第二个,第一个元素向下一位到1号位,第二个元素在列顶0号位。当我指定插入在0号位,所有元素向下移一个。
但如果插入位置超过了目前含有的元素,比如说4,会报数组指针越界异常。也就是说不能超出它已有的内存长度。
示例代码:
public class ListTest {
public List<Course> coursesToSelect;//接口list装很多对象的
public ListTest() {
this.coursesToSelect = new ArrayList<>();//用子类容器实例化
}
//添加课程
public void testAdd() {
Course c1 = new Course("1","数据结构");
coursesToSelect.add(c1);//调用集合类添加方法
// 从序列中取出课程 打印出来说明存放进去了
// System.out.println("打印一下好勒"+coursesToSelect.get(0));输出地址值
// list中是从上到下由0开始,所以第一个索引是0
System.out.println("添加了课程:"+((Course)coursesToSelect.get(0)).getIdandName());//强转程course类型的对象
Course c2 = new Course("2","java从入门到放弃");
// coursesToSelect.add(2, c2);//指针越界 因为序列就一个元素,不能插到索引2,位置3的地方
coursesToSelect.add(1, c2);//c2插进去
int temp = coursesToSelect.indexOf(c2);//????到底是怎么动态存取。。
System.out.println("c2的索引值"+temp);
System.out.println("添加了课程:"+coursesToSelect.get(temp).getIdandName());
/*
* 指定位置插入 并思考这个元素在内存模型中的位置(直接输出3个对象的地址码)
*/
Course c3 = new Course("3","python天下第一");
coursesToSelect.add(0, c3);
System.out.println("添加了课程:"+coursesToSelect.get(0).getIdandName());
for(Course c:coursesToSelect) {
System.out.println(c+" "+c.getIdandName());
}
}
public static void main(String[] args) {
ListTest lt = new ListTest();
lt.testAdd();
}
}
但这里有个困惑:按照老师讲的,c2应该在c1上方,为什么先输出c1呢。