超出ArrayList范围会报异常
package com.imooc.collection;
import java.util List;
public class ListTest {
//用于存放备选课程List
public List coursesToSelect;
public ListTest() {
this.courseToSelect = new ArrayList();
}
//用于往coureToSelect中添加备选课程
public void testAdd() {
//创建一个课程对象,并通过调用add方法,添加到备选课程List中
Course cr1 = new Course("1" , "数据结构");
courseToSelecr.add(cr1);
Course temp =(Course) courseToSelect.get(0);
System.out.println("添加了课程" + temp.id + ":" + temp.name);
}
public static void main (String[] args) {
ListTest It = new ListTest();
It.testAdd();
}
}
Course cr2 new Course("2","C语言");
courseToSelect.add(0,cr2);
Course temp2=(Course) courseToSelect.get(0);
System.out.println("添加了课程" + temp2.id + ":" + temp2.name);
}
Course cr3 = new Course("3","test");
courseToSelsct.add(4,cr3);
}
package collection; import java.util.ArrayList; import java.util.List; /** * @author Xinny * @create 2021-09-29 11:48 上午 */ public class ListTest { //用于存放备选课程的list public List coursesToSelect; public ListTest(){ this.coursesToSelect = new ArrayList(); } //添加课程 public void addC(){ //创建课程对象 Course c1 = new Course("1","C++"); coursesToSelect.add(c1); Course temp = (Course) coursesToSelect.get(0); System.out.println("add"+temp.id+":"+temp.name); Course c2 = new Course("2","Python"); coursesToSelect.add(0,c2); Course temp2 = (Course)coursesToSelect.get(0); System.out.println("添加了课程:"+temp2.id+":"+temp2.name); } public static void main(String[] args) { ListTest lt = new ListTest(); lt.addC(); } }
1:11 List是一个接口,接口虽然不是类,但是结构可以看作是一个抽象类,
将List实例化之后的元素,或者对象coursesToSelect可以看成是一个集合框架化的元素,可以用于处理具体待处理的数据。
05:34 这里切记切记!在应用java里面的集合框架对数据进行处理的时候,都会忽略原始元素的“类”型(没错,这里的“类”是指该原始数据所属的初始创始的类,类名即为该类型的表达式),而将该原始元素视为Obj类型的元素,因此再次调用处理该元素的时候,应该强转Obj为待处理的类型才可以!
List方法
get(位置)对象存入集合会变成Object类型,取出时需手动转换
add(对象)加在最后,add(位置,对象)加在指定位置
package lmr; import java.util.List; public class ListTest{ public List coursesToSelect; public ListTest(){ this.coursesToSelect = new ArrayList(); } }
package lmr; import java.util.List; public class ListTest{ public List coursesToSelect; public ListTest(){ this.ocursesToSelect = new ArrayList(); } public void testAdd(){ Course cr1 = new Course("1","数据结构"); courseToSelect.add(cr1); Course temp = (Course)coursesToSelect.get(0); System.out.println("添加了课程:"+temp.id+":"+temp.name); Course cr2 = new Course("2","C语言"); coursesToSelect.add(0,cr2); Course temp2 = (Course)coursesToSelect.get(0); System.out.println("添加了课程:"+temp2.id+":"+temp2.name); } public static void main(String[]args){ ListTest lt = new ListTest(); lt.testAdd(); } }
对象存入集合都变成了Object类型 取出时需要类型转换
如果在List中add插入元素的位置,大于List长度,会导致数组下标越界报错。
对象存入集合都变成Object类型,取出时需要类型转换。
建立Course、Student类;
添加对应属性对象(id、name);
创建ListTest类用于测试;
在ListTest中创建List对象coursesToSelect(用于存放备选课程);
ListTest构造方法:
this.coursesToSelect = new ArrayList();
(具体作用为使用List类对象保存多组Course类对象的属性,类似于数组但不用预设长度
数组下标越界异常
***List是接口,所以在构造方法中不能直接实例化,而通过ArrayList()实例化。
例:public List coursesToSelect = new ArrayList();
***调用Add()方法添加到List中。有两种方法:
方法1:直接添加,例:CoursesToSelect.add(cr1);
方法2:可以指定添加的位置,例:CoursesToSelect.add(0,cr1);
*** 使用get()方法取出一个对象,当一个对象被添加到集合中去的时候,它会被忽略掉类型,而都变成Object类型,取出时需要类型转换。
例:Course temp = (Course)coursesToSelect.get(0);
***如果添加到List中的长度大于他目前的长度,则系统会出现异常,即数组下表越界异常
package collection;import java.util.ArrayList;import java.util.List;public class listTest { public List list; //构造方法实例化list public listTest() { this.list=new ArrayList(); } //创建课程对象 public void add() { Course course1=new Course(1,"高等数学"); list.add(course1); //通过list的get的方法获取子元素 Course c=(Course)list.get(0); //因为get的元素是object类型所以需要强制转换成Course类型 System.out.println("添加了课程"+c.getId()+":"+c.getName()); Course course2=new Course(2,"大学英语"); list.add(course2); Course c2=(Course)list.get(1); System.out.println("添加了课程"+c2.getId()+":"+c2.getName()); } public static void main(String[] args) { listTest l=new listTest(); l.add(); }}
添加方法,输入格式,强制转换,get(从0开始计数)
接口、实现类;
不能实例化;
List中的add()方法,添加元素,变为Object类型,通过ArrayList的对象实现
List中的get(0方法,取得元素,需要强制类型转换,通过ArrayList的对象实现
add(0)方法还可以重构,add(index,实例名或者说对象名)
对象存入集合都变成Object类型取出时要类型转换
List是一个接口,不能直接实例化,通过Arraylist来实例化
add(元素)把元素添加到List中length-1的位置
add(元素,int index(位置))把第一个参数所指元素添加到List的指定位置(不得大于其长度)上去,把该位置原来的元素相应的挤到List后头去。
get(int position)获取List中相应位置的元素
属性类型为list
用list储存class的时候初始化
test = new ArrayList();
储存进去的是object不再是原来的class
取出时记得转换类型
不可超过list长度
数据存入集合时默认为Object类型,取出时需要强制转换。
List courseToSelect = new ArrayList();//这样利于理解,但规范写法还是在构造方法中让courseToSelect解释一下,List courseToSelect 声明一个接口类型的引用,指向给接口实现的ArrayList类的对象。(可以结合多态,父类引用指向子类对象理解)
同时由于调用testAdd()方法时,打印输出的cr1语句在前,故控制台显示是先1课程,再2课程,此方法中输出语句是将每个集合中的元素单独打印出来显示的。实际在集合中2课程的位置在1课程前面
list是接口要用子类arraylist实现接口。对象存入集合都变成object类型,取出时需要类型转换
对象存入集合都变成Object类型取出时需要类型转换
1.List 的add方法('集合位置','要添加的类') 2.集合的位置不能大于集合的长度,否则系统会判定数组越界。
Java List存储元素成功后,都会变成Object类型, 取值时get(int index)默认返回Object,要想返回元素类型,需要强制装换