代码直接复制运行即可:
1. add(),remove(),get(),set(),四种方法的使用情况。
2.输出 集合中的所有元素的 三种方法: (1)迭代器方法:iterator。(2)将元素存进Object数组:toArrays方法。(3)Size()和get()相结合的方法,也是List集合特有的方法。
import java.util.Iterator;
import java.util.List;
public class Main {
public static void main(String[] args) {
List list = new ArrayList(); //知识点: ArrayList集合底层是用数组实现的Object[]数组。 因为可以存储所有的各种类型的引用类型。集合只能存储引用类型(对象)。
list.add("a");
list.add("b");
list.add("c");
list.add("d");
//List中的常用方法: add(int index , E element) , remove(int index) , get(int index) , set(int index , E element)。
//----------add()方法:
list.add(1,"e");
System.out.println(list); //输出结果为:[a,e,b,c,d] 。
//这时候集合变为:[a,e,b,c,d],长度(size)变为:5 。
//list.add(10,"z");
//System.out.println(list);//会出现:索引越界错误(IndexOutOfBoundsException)。
//此时再试一下:index = 5 的时候:长度为5,说明有5个元素,但是索引是从0开始的。
list.add(5,"f");
System.out.println(list); //输出结果: [a, e, b, c, d, f]
// 由上面可以知道 index 的 取值范围: 0 =< index <= size 。 在这个范围内 系统不报错,否则报错:索引越界。
//----------remove()方法:
// (1)
List list1 = new ArrayList() ;
list1.add("a");
list1.add("b");
list1.add("c");
list1.add("d");
Object obj = list1.remove(2);
System.out.println(obj);//输出:c 。
System.out.println(list1);//输出:[a,b,d] 。
//remove()方法:1.使用remove()方法之后会有一个返回值(所要删除的该index位置上的元素数值)。2.将删除(index位置上的元素)后的集合重新赋给调用者集合。
Object obj1 = list1.remove(2) ;
System.out.println(obj1);//d
System.out.println(list1);//[a,b]
//(2)
List list2 = new ArrayList();
list2.add(111) ;
list2.add(222) ;
list2.add(333) ;
list2.add(444) ;
Object number = list2.remove(2);
System.out.println(number); //333
System.out.println(list2);//[111,222,444]
//因为add 可以 add("111") 也可以 add(1,"111");
//那么 remove 可以 直接用 remove("111")删除"111"么,而不是用remove(0)???
/*
查看是否报错!
Object number1 = list2.remove(111);
System.out.println(number1);
System.out.println(list2);
出现报错:
Exception in thread "main" java.lang.IndexOutOfBoundsException: Index: 111, Size: 3
可以看到 后面的 index:111 。 说明remove()没有将"111"封装为引用类型(对象),而是直接当作了索引(index),所以才出现了索引越界错误。
List中的remove方法不能 封装 数字 ,它会把数字直接当作索引 去使用 。
*/
//-----------List 中的 get(int index)方法 :同过索引 index 来获取 集合中 对应位置上的 元素 。
List list3 = new ArrayList();
list3.add("a");
list3.add("b");
list3.add("c");
list3.add("d");
Object number3 = list3.get(2) ;
System.out.println(number3); // index = 2 集合中对应位置上:c 。
// 利用get这个属性 可以将 集合中的元素遍历出来 和 hasNext 起到了一样的作用 。
for(int i=0;i<list3.size();i++){
System.out.println(list3.get(i)); //输出:abcd
}
System.out.println(" ");
//因为Collection可以同过获取迭代器iterator()来完成迭代。因为List 是 Collection的子接口 所以 也可以使用获取迭代器的方法。
Iterator itr = list3.iterator() ;
while(itr.hasNext()){
System.out.println(itr.next());//输出:abcd
}
//-------------set()方法
List list4 = new ArrayList() ;
list4.add("a");
list4.add("b");
list4.add("c");
list4.add("d");
list4.set(2, "z");
System.out.println(list4);//输出:[a, b, z, d]
//----------------------------------------------------------------------------------
//将存在集合中的学生信息 遍历出来 。 下面有三种方法:
List stu = new ArrayList() ;
stu.add(new Student("张三",20));
stu.add(new Student("李四",21));
stu.add(new Student("王五",22));
stu.add(new Student("赵六",23));
//collection 和 list 都 只能存储 引用类型对象 。通过方法读出的 元素值 ,分为:1.解开封装得到的:"a" 和 "1"。 2.对象调用类中属性。
System.out.println(stu);
System.out.println(" ");
Object[] ojbect = stu.toArray() ; // 方法一: 将 集合中的 信息 存入了数组。
for(int i=0;i<ojbect.length;i++){
System.out.println(ojbect[i]);
}
System.out.println(" ");
Iterator itr1 = stu.iterator() ;
while(itr1.hasNext()){
System.out.println(itr1.next());
} // 方法二: 迭代器。
System.out.println(" ");
for(int i=0;i<stu.size();i++){
System.out.println(stu.get(i));//stu.get(i)是一个对象,这个对象一直储存在stu集合当中,默认调用了toString方法。
//Object obj = new Student("张三",20); 对象存到集合中后, 从Student的类对象,转变为Object类对象。但依然是对象。
//stu.get(i)从集合中取出的元素是Object类的对象,而不是Student对象,所以无法调用子类的getName和getAge方法。
}
System.out.println(" ");
for(int i=0;i<stu.size();i++){
Student stu666 = (Student)stu.get(i);//把Object类强制转换成Student类。
System.out.println(stu666.getName()+"..."+stu666.getAge());
}
// 方法三: size()和get()方法相结合。
}
}
总结:
// ArrayList集合 存储的是 Object类 的 对象 。//当取出ArrayList集合中的元素(Object对象)打印时,直接打印引用类型(对象),那么就默认 调用了toString()方法。就打印出 学生的信息了。
//println底层源代码:return (obj == null) ? "null" : obj.toString(); 地址不是null时,就调用toString()方法。