=============================================================================
=============================================================================
涉及到的知识点有:
1:对象数组的概述和案例(掌握)
(1)对象数组的概述
(2)对象数组的案例
2:集合(Collection接口)(掌握)
(1)集合的由来?
(2)集合和数组的区别?
(3)集合的继承体系结构
(4)Collection接口的概述
(5)Collection接口的成员方法(注意:默认方法前有public abstract修饰)
(6)Collection集合的遍历
(7)迭代器
(8)Collection集合的案例(遍历方式:迭代器方式)(要求:用记事本默写)
A:存储字符串并遍历
B:存储自定义对象并遍历
3:集合(List接口)(掌握)
(1)List是Collection的子接口
(2)List的特有功能(注意:默认方法前有public abstract修饰)
(3)List集合的特有遍历功能
(4)列表迭代器的特有功能(了解)
(5)ConcurrentModificationException 并发修改异常
(6)常见的数据结构以及其优缺点
(7)List的子类特点(面试题)
(8)List集合的案例(遍历方式 迭代器和普通for循环)
=============================================================================
=============================================================================
1:对象数组的概述和案例(掌握)
(1)对象数组的概述
数组既可以存储基本数据类型,也可以存储引用类型。它存储引用类型的时候的数组就叫对象数组。
(2)对象数组的案例
我有5个学生,请把这个5个学生的信息存储到数组中,并遍历学生数组,获取得到每一个学生的信息。
示例代码如下:
1 package cn.itcast_01; 2 3 public class Student { 4 // 成员变量 5 private String name; 6 private int age; 7 8 // 构造方法 9 public Student() { 10 super(); 11 } 12 13 public Student(String name, int age) { 14 super(); 15 this.name = name; 16 this.age = age; 17 } 18 19 // 成员方法 20 // getXxx()/setXxx() 21 public String getName() { 22 return name; 23 } 24 25 public void setName(String name) { 26 this.name = name; 27 } 28 29 public int getAge() { 30 return age; 31 } 32 33 public void setAge(int age) { 34 this.age = age; 35 } 36 37 @Override 38 public String toString() { 39 return "Student [name=" + name + ", age=" + age + "]"; 40 } 41 }
1 package cn.itcast_01; 2 3 /* 4 * 我有5个学生,请把这个5个学生的信息存储到数组中,并遍历学生数组,获取得到每一个学生的信息。 5 * 学生类:Student 6 * 成员变量:name,age 7 * 构造方法:无参,带参 8 * 成员方法:getXxx()/setXxx() 9 * 存储学生的数组?自己想想应该是什么样子的? 10 * 分析: 11 * A:创建学生类。 12 * B:创建学生数组(对象数组)。 13 * C:创建5个学生对象,并赋值。 14 * D:把C步骤的元素,放到学生数组中。 15 * E:遍历学生数组。 16 */ 17 public class ObjectArrayDemo { 18 public static void main(String[] args) { 19 // 创建学生数组(对象数组)。 20 Student[] students = new Student[5]; 21 22 // 遍历新创建的学生数组。 23 for (int x = 0; x < students.length; x++) { 24 System.out.println(students[x]); 25 } 26 System.out.println("---------------------"); 27 28 // 创建5个学生对象,并赋值。 29 Student s1 = new Student("林青霞", 27); 30 Student s2 = new Student("风清扬", 30); 31 Student s3 = new Student("刘意", 30); 32 Student s4 = new Student("赵雅芝", 60); 33 Student s5 = new Student(); 34 s5.setName("王力宏"); 35 s5.setAge(27); 36 37 // 把C步骤的元素,放到学生数组中。 38 students[0] = s1; 39 students[1] = s2; 40 students[2] = s3; 41 students[3] = s4; 42 students[4] = s5; 43 44 // 看到很相似,就想用循环改,把C步骤的元素,放到学生数组中。 45 // for (int x = 0; x < students.length; x++) { 46 // students[x] = s + "" + (x + 1); // 拼完之后是一个字符串了。 47 // } 48 // 这个是有问题的。 49 50 // 遍历赋值后的学生数组,用重写的toString()方法 51 for (int x = 0; x < students.length; x++) { 52 // 重写toString()方法,注意:一个方法写定之后就不要再去改变了。因为改来改去的还不如重新写个方法呢? 53 System.out.println(students[x]); 54 } 55 System.out.println("---------------------"); 56 57 // 遍历赋值后的学生数组,用getXxx()方法 58 for (int x = 0; x < students.length; x++) { 59 // System.out.println(students[x].getName() + "---" + students[x].getAge()); // 或者等价于下面 60 // 因为学生数组的每一个元素都是一个学生。 61 Student s = students[x]; 62 System.out.println(s.getName() + "---" + s.getAge()); 63 } 64 } 65 }
-----------------------------------------------------------------------------
2:集合(Collection接口)(掌握)
(1)集合的由来?
我们学习的是Java --> 面向对象 --> 操作很多对象 --> 存储 --> 容器(数组和StringBuffer) --> 数组
而数组的长度是固定的,当添加的元素超过了数组的长度需要对数组重新定义,太麻烦,所以数组不适合做变化的需求,Java内部就给我们提供了集合类供我们使用。
集合类能存储任意对象,长度是可以该变的,即长度能随着元素的增加而增加,随着元素的减少而减少。
(2)集合和数组的区别?
A:长度区别
数组长度固定,不能自动增长。
集合的长度的是可变的,可以根据元素的增加而增长。
B:内容区别
数组只能存储同一种类型。
集合可以存储不同类型(其实集合一般存储的也是同一种类型)。
C:元素的数据类型区别
数组既可以存储基本数据类型,又可以存储引用数据类型;基本数据类型存储的是值,引用数据类型存储的是地址值。
集合只能存储引用数据类型(对象),其实集合中也可以存储基本数据类型,但是在存储的时候会自动装箱变成对象。
---------------------------------------
(3)集合的继承体系结构
刚说过集合是存储多个元素的,但是呢,存储多个元素我们也是有不同需求的:
比如说,我要这多个元素中不能有相同的元素;
再比如说,我要这多个元素按照某种规则排序一下。
针对不同的需求,Java就提供了不同的集合类,这样呢,Java就提供了很多个集合类。
这多个集合类的数据结构不同,数据结构不同不重要的,重要的是你要能够存储东西,并且还要能够使用这些东西,比如说存储、获取、判断等。
既然这样,那么,这多个集合类是有共性的内容的,我们把这些集合类的共性内容不断的向上提取,最终就能形成集合的继承体系结构。
如下图所示:
Collection(单列集合的根接口)
|--List(有序:存和取的顺序一致,有索引,可以存储重复元素)
|--ArrayList(数组实现)
|--Vector(数组实现)
|--LinkedList(链表实现)
|--Set(无序:存和取的顺序不一致,无索引,不可以存储重复元素)
|--HashSet(哈希算法)
|--TreeSet(二叉树算法)
---------------------------------------
(4)Collection接口的概述
Collection接口是集合的顶层接口,它的子体系有重复的,有唯一的,有有序的,有无序的。(后面会慢慢的讲解)
Collection表示一组对象,这些对象也称为collection的元素。
JDK不提供此接口的任何直接实现:它提供更具体的子接口(如 Set 和 List)实现。
(5)Collection接口的成员方法(注意:默认方法前有public abstract修饰)
1:添加功能
boolean add(Object obj) 添加一个元素
boolean addAll(Collection c) 添加一个集合的元素
2:删除功能
void clear() 移除所有元素
boolean remove(Object o) 移除一个元素
boolean removeAll(Collection c) 移除一个集合的元素(只要集合中有一个元素被移除了,就返回true)
3:判断功能
boolean contains(Object o) 判断集合中是否包含指定的元素
boolean containsAll(Collection c) 判断集合中是否包含指定的集合元素(只有集合包含所有的元素,才返回true,才叫包含)
boolean isEmpty() 判断集合是否为空
4:获取功能(重点学)
Iterator<E> iterator() 返回在此集合的元素上进行迭代的迭代器。是集合专用的遍历方式。
5:长度功能
int size() 元素的个数(即集合的长度)
面试题:
数组有没有length()方法呢? 答:没有。特别注意:因为数组求长度是:数组名.length,而不是:数组名.length()
字符串有没有length()方法呢? 答:有。
集合有没有length()方法呢? 答:没有,因为集合求长度的方法是size()。
6:交集功能(了解)
boolean retainAll(Collection c) 两个集合都有的元素?思考:元素去哪了?返回的boolean又是什么意思呢?
// 假设有两个集合A,B。
// A对B做交集,最终的结果保存在集合A中,集合B不变。
// 但是返回值表示的是集合A是否发生过改变。
// 集合A没有发生改变,返回false,即集合B包含集合A;
// 集合A发生改变,返回true。
7:把集合转成对象数组,可以实现集合的遍历(了解)
Object[] toArray()
---------------------------------------
(6)Collection集合的遍历
A:把集合转成对象数组(了解)
练习:用集合存储5个学生对象,并把学生对象进行遍历(遍历方式:把集合转成对象数组,需要用记事本背着写出来)。
示例代码如下:
1 package cn.itcast_02; 2 3 public class Student { 4 // 成员变量 5 private String name; 6 private int age; 7 8 // 构造方法 9 public Student() { 10 super(); 11 } 12 13 public Student(String name, int age) { 14 super(); 15 this.name = name; 16 this.age = age; 17 } 18 19 // 成员方法 20 // getXxx()/setXxx() 21 public String getName() { 22 return name; 23 } 24 25 public void setName(String name) { 26 this.name = name; 27 } 28 29 public int getAge() { 30 return age; 31 } 32 33 public void setAge(int age) { 34 this.age = age; 35 } 36 }
1 package cn.itcast_02; 2 3 import java.util.ArrayList; 4 import java.util.Collection; 5 6 /* 7 * 练习:用集合存储5个学生对象,并把学生对象进行遍历(遍历方式:把集合转成对象数组,需要用记事本背着写出来)。 8 * 9 * 分析: 10 * A:创建学生类 11 * B:创建集合对象 12 * C:创建学生对象 13 * D:把学生添加到集合 14 * E:把集合转成对象数组 15 * F:遍历对象数组 16 */ 17 public class StudentDemo { 18 public static void main(String[] args) { 19 // 创建集合对象 20 Collection c = new ArrayList(); 21 22 // 创建学生对象 23 Student s1 = new Student("林青霞", 27); 24 Student s2 = new Student("风清扬", 30); 25 Student s3 = new Student("令狐冲", 33); 26 Student s4 = new Student("武鑫鑫", 25); 27 Student s5 = new Student("刘晓曲", 22); 28 29 // 把学生添加到集合 30 c.add(s1); 31 c.add(s2); 32 c.add(s3); 33 c.add(s4); 34 c.add(s5); 35 36 // 把集合转成对象数组,向上转型 37 Object[] objs = c.toArray(); 38 // 遍历对象数组 39 for (int x = 0; x < objs.length; x++) { 40 // System.out.println(objs[x]); // 没有重写toString()方法 41 42 // 向下转型 43 Student s = (Student) objs[x]; 44 System.out.println(s.getName() + "---" + s.getAge()); 45 } 46 } 47 }
B:迭代器(集合的专用遍历方式)
练习:用集合存储5个学生对象,并把学生对象进行遍历(遍历方式:用迭代器进行遍历)。
示例代码如下:
1 package cn.itcast_03; 2 3 public class Student { 4 // 成员变量 5 private String name; 6 private int age; 7 8 // 构造方法 9 public Student() { 10 super(); 11 } 12 13 public Student(String name, int age) { 14 super(); 15 this.name = name; 16 this.age = age; 17 } 18 19 // 成员方法 20 // getXxx()/setXxx() 21 public String getName() { 22 return name; 23 } 24 25 public void setName(String name) { 26 this.name = name; 27 } 28 29 public int getAge() { 30 return age; 31 } 32 33 public void setAge(int age) { 34 this.age = age; 35 } 36 37 @Override 38 public String toString() { 39 return "Student [name=" + name + ", age=" + age + "]"; 40 } 41 42 }
1 package cn.itcast_03; 2 3 import java.util.ArrayList; 4 import java.util.Collection; 5 import java.util.Iterator; 6 7 /* 8 * 练习:用集合存储5个学生对象,并把学生对象进行遍历。用迭代器进行遍历。 9 * 10 * 注意: 11 * A:自己的类名不要和我们学习的要使用的API中的类名相同。 12 * B:复制代码的时候,很容易把那个类所在的包也导入过来,容易出现不能理解的问题。 13 */ 14 public class IteratorTest { 15 public static void main(String[] args) { 16 // 创建集合对象 17 Collection c = new ArrayList(); 18 19 // 创建学生对象 20 Student s1 = new Student("林青霞", 27); 21 Student s2 = new Student("风清扬", 30); 22 Student s3 = new Student("令狐冲", 33); 23 Student s4 = new Student("武鑫鑫", 25); 24 Student s5 = new Student("刘晓曲", 22); 25 26 // 把学生添加到集合中 27 c.add(s1); 28 c.add(s2); 29 c.add(s3); 30 c.add(s4); 31 c.add(s5); 32 33 // 遍历 34 Iterator it = c.iterator(); 35 while (it.hasNext()) { 36 // System.out.println(it.next()); // 重写了toString()方法 37 Student s = (Student) it.next(); // 向下转型 38 System.out.println(s.getName() + "---" + s.getAge()); 39 } 40 } 41 }
迭代器使用出现的2个想问题解释:
问题1:能用while循环写这个程序,我能不能用for循环呢?
答:能。用for循环改写,遍历完成后,it这个对象就变成垃圾了,可以被JVM的垃圾回收器进行回收了,效率高,但是结构不是特别明朗。
问题2:不要多次使用it.next()方法,因为每次使用都去访问一个对象。
//System.out.println(((Student) it.next()).getName() + "---" + ((Student) it.next()).getAge());
//NoSuchElementException 不要多次使用it.next()方法。
---------------------------------------
(7)迭代器
A:迭代器是集合的获取元素的方式。
B:迭代器是依赖于集合而存在的。
因为迭代器是通过集合调用集合的方法而得到的。即必须先有集合,然后才有迭代器。
Collection接口的成员方法
Iterator iterator() 迭代器,集合的专用遍历方式。
Iterator接口的成员方法
boolean hasNext() 判断如果仍有元素可以迭代,则返回 true。
Object next() 获取元素,并移动到下一个位置。
NoSuchElementException 没有这样的元素异常,因为你已经找到最后了。
C:迭代器的原理图解和源码浅析
a:迭代器为什么定义了一个接口而不是实现类?
假如把迭代器定义为一个类,这样我们就可以创建该类的对象,调用该类的方法来实现集合的遍历了。
但是,java中提供了很多的集合类,而这些集合类的数据结构是不同,所以它们的存储方法也是不同的,
进而它们的遍历方法也是不一样的,最终就没有把迭代器定义为一个类了。
(因为定义成一个迭代器类就是一个具体的实现了,既然是具体实现那么它们的遍历方式就是一样的了)
而无论是那种集合,都应该具备获取元素的功能,并且最好辅助以判断的功能,这样在获取前,先判断,就不容易出错。
也就是说,判断和获取功能应该是一个集合遍历所具备的,而每种集合的遍历方式又不太一样,
所以把这两个功能给提取出来,并不提供具体的实现,而这种方式叫做接口。
那么,真正的具体的实现类在哪里呢?
在真正的具体的子类中,是以内部类的方式体现的。
(因为在子类中要包含两个方法)
如下图所示:
b:迭代器的内部类实现源码浅析
1 ----------------------------------------------------------------------------- 2 public interface Inteator { 3 public abstract boolean hasNext(); // 注意:默认方法前有public abstract修饰,是接口中方法的默认修饰符 4 public abstract Object next(); // 注意:默认方法前有public abstract修饰,是接口中方法的默认修饰符 5 } 6 7 public interface Iterable { 8 Iterator iterator(); // 没有具体实现,注意:默认方法前有public abstract修饰,是接口中方法的默认修饰符 9 } 10 ----------------------------------------------------------------------------- 11 public interface Collection extends Iterable { 12 Iterator iterator(); // 没有具体实现,注意:默认方法前有public abstract修饰,是接口中方法的默认修饰符 13 } 14 15 public interface List extends Collection { 16 Iterator iterator(); // 没有具体实现,注意:默认方法前有public abstract修饰,是接口中方法的默认修饰符 17 } 18 ----------------------------------------------------------------------------- 19 public class ArrayList implements List { 20 public Iterator iterator() { // 具体实现 21 return new Itr(); 22 } 23 24 private class Itr implements Iterator { // Itr是Iterator接口的实现类 25 public boolean hasNext() {} 26 public Object next(){} 27 } 28 } 29 ----------------------------------------------------------------------------- 30 Collection c = new ArrayList(); 31 c.add("hello"); 32 c.add("world"); 33 c.add("java"); 34 Iterator it = c.iterator(); // new Itr(); 35 while(it.hasNext()) { 36 String s = (String)it.next(); 37 System.out.println(s); 38 } 39 -----------------------------------------------------------------------------
---------------------------------------
(8)Collection集合的案例(遍历方式:迭代器方式)(要求:用记事本默写)
集合的使用步骤:
A:创建集合对象
B:创建元素对象
C:把元素添加到集合
D:遍历集合
a:通过集合对象获取迭代器对象
b:通过迭代器对象的hasNext()方法判断是否有元素
c:通过迭代器对象的next()方法获取元素并移动到下一个位置
A:存储字符串并遍历
import java.util.Collection; import java.util.ArrayList; import java.util.Iterator; public class CollectionDemo { public static void main(String[] args) { // 创建集合对象 Collection c = new ArrayList(); // 创建元素对象 String s = new String("hello"); // 把元素添加到结合 c.add(s); c.add("world"); c.add("java"); // 遍历集合 // 通过集合对象获取迭代器对象 Iterator it = c.iterator(); while (it.hasNext()) { String s1 = (String) it.next(); System.out.println(s1); } } }
---------------------------------------
B:存储自定义对象并遍历
public class Student { private String name; private int age; public Student() { super(); } public Student(String name, int age) { super(); this.name = name; this.age = age; } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } }
import java.util.Collection; import java.util.ArrayList; import java.util.Iterator; public class StudentDemo { public static void main(String[] args) { // 创建集合对象 Collection c = new ArrayList(); // 创建学生对象 Student s1 = new Student("貂蝉", 25); // 含参构造 Student s2 = new Student("小乔", 16); Student s3 = new Student("黄月英", 20); Student s4 = new Student(); // 无参构造 s4.setName("大乔"); s4.setAge(26); // 把学生对象添加到集合对象中 c.add(s1); c.add(s2); c.add(s3); c.add(s4); c.add(new Student("孙尚香", 18)); // 匿名对象 // 遍历集合 Iterator it = c.iterator(); while (it.hasNext()) { Student s = (Student) it.next(); System.out.println(s.getName() + "---" + s.getAge()); } } }
-----------------------------------------------------------------------------
3:集合(List接口)(掌握)
(1)List是Collection的子接口
特点:有序(存储顺序和取出顺序一致),有索引,可以存储重复元素。
(2)List的特有功能(注意:默认方法前有public abstract修饰)
A:添加功能
void add(int index, Object element) 在指定位置添加元素
B:删除功能
Object remove(int index) 根据索引删除元素,返回被删除的元素
C:获取功能
Object get(int index) 获取指定位置的元素
D:列表迭代器功能
ListIterator listIterator() List集合特有的迭代器
E:修改功能
Object set(int index, Object element) 根据索引修改元素,返回被修该的元素
---------------------------------------
(3)List集合的特有遍历功能
A:由size()和get()结合。
B:代码演示
1 import java.util.List; 2 import java.util.ArrayList; 3 import java.util.Iterator; 4 5 public class ListDemo { 6 public static void main(String[] args) { 7 // 创建集合对象 8 List list = new ArrayList(); 9 10 // 创建元素对象,并添加 11 list.add("hello"); 12 list.add("wprld"); 13 list.add("java"); 14 15 // 通过集合对象获取迭代器对象 16 Iterator it = list.iterator(); 17 // 迭代器遍历集合 18 while (it.hasNext()) { 19 String s = (String) it.next(); 20 System.out.println(s); 21 } 22 23 // 普通for循环遍历集合 24 for (int x = 0; x < list.size(); x++) { 25 String s = (String) list.get(x); 26 System.out.println(s); 27 } 28 } 29 }
---------------------------------------
(4)列表迭代器的特有功能(了解)
Object previous() 获取上一个元素
boolean hasPrevious() 判断是否有元素
注意:ListIterator可以实现逆向遍历,但是必须先正向遍历,才能逆向遍历,所以一般无意义,不使用。
(5)ConcurrentModificationException 并发修改异常
当方法检测到对象的并发修改,但不允许这种修改时,抛出此异常。
A:出现的现象
迭代器在遍历集合时,用集合去修改集合元素。
B:产生的原因
迭代器是依赖于集合而存在的,在判断成功后,集合中新添加了元素,集合发生了改变,而迭代器却不知道,所以就报错了,这个错叫并发修改异常。
其实这个问题描述的是:迭代器在遍历元素的时候,通过集合是不能修改元素的。
C:解决的方案
a:迭代器迭代元素,用列表迭代器(ListIterator)修改元素
元素是跟在刚才迭代的元素后面的。
注意:Iterator迭代器却没有添加功能,所以我们使用其子接口ListIterator列表迭代器。
b:集合遍历元素,用集合修改元素(普通for循环:size()和get())
元素是在最后添加的。(即元素添加在集合的末尾)
---------------------------------------
(6)常见的数据结构以及其优缺点
A:栈 先进后出
B:队列 先进先出
C:数组 查询快,增删慢
D:链表 查询慢,增删快
E:树
F:哈希表
如下图所示:
---------------------------------------
(7)List的子类特点(面试题)
ArrayList
底层数据结构是数组,查询快,增删慢。
线程不安全,效率高。
Vector
底层数据结构是数组,查询快,增删慢。
线程安全,效率低。
LinkedList
底层数据结构是链表,查询慢,增删快。
线程不安全,效率高。
List有三个儿子,我们到底使用谁呢?
看需求(看情况)。
分析:
要安全吗?
要:Vector(即使要,也不使用这个,后面有替代的)
不要:ArrayList或者LinkedList
查询多:ArrayList
增删多:LinkedList
什么都不知道,就用ArrayList。
---------------------------------------
(8)List集合的案例(遍历方式:迭代器和普通for循环)
A:存储字符串并遍历
示例代码如下:
1 import java.util.List; 2 import java.util.ArrayList; 3 import java.util.Iterator; 4 5 public class ListDemo { 6 public static void main(String[] args) { 7 // 创建集合对象 8 List list = new ArrayList(); 9 10 // 创建元素对象,并添加 11 list.add("hello"); 12 list.add("wprld"); 13 list.add("java"); 14 15 // 通过集合对象获取迭代器对象 16 Iterator it = list.iterator(); 17 // 迭代器遍历集合 18 while (it.hasNext()) { 19 String s = (String) it.next(); 20 System.out.println(s); 21 } 22 23 // 普通for循环遍历集合 24 for (int x = 0; x < list.size(); x++) { 25 String s = (String) list.get(x); 26 System.out.println(s); 27 } 28 } 29 }
B:存储自定义对象并遍历
示例代码如下:
1 package cn.itcast_03; 2 3 public class Student { 4 // 成员变量 5 private String name; 6 private int age; 7 8 // 构造方法 9 public Student() { 10 super(); 11 } 12 13 public Student(String name, int age) { 14 super(); 15 this.name = name; 16 this.age = age; 17 } 18 19 // 成员方法 20 // getXxx()/setXxx() 21 public String getName() { 22 return name; 23 } 24 25 public void setName(String name) { 26 this.name = name; 27 } 28 29 public int getAge() { 30 return age; 31 } 32 33 public void setAge(int age) { 34 this.age = age; 35 } 36 }
1 package cn.itcast_03; 2 3 import java.util.ArrayList; 4 import java.util.Iterator; 5 import java.util.List; 6 7 /* 8 * 存储自定义对象并遍历,遍历方式:迭代器和普通for循环。(size()和get()结合) 9 */ 10 public class ListDemo3 { 11 public static void main(String[] args) { 12 // 创建集合对象 13 List list = new ArrayList(); 14 15 // 创建学生对象 16 Student s1 = new Student("林黛玉", 18); 17 Student s2 = new Student("刘姥姥", 88); 18 Student s3 = new Student("王熙凤", 38); 19 20 // 把学生添加到集合中 21 list.add(s1); 22 list.add(s2); 23 list.add(s3); 24 25 // 遍历 26 // 迭代器遍历集合 27 Iterator it = list.iterator(); 28 while (it.hasNext()) { 29 Student s = (Student) it.next(); 30 System.out.println(s.getName() + "---" + s.getAge()); 31 } 32 System.out.println("-----------"); 33 34 // 普通for循环遍历集合 35 for (int x = 0; x < list.size(); x++) { 36 Student s = (Student) list.get(x); 37 System.out.println(s.getName() + "---" + s.getAge()); 38 } 39 } 40 }
=============================================================================
我的GitHub地址: https://github.com/heizemingjun我的博客园地址: http://www.cnblogs.com/chenmingjun
我的蚂蚁笔记博客地址: http://blog.leanote.com/chenmingjun
Copyright ©2018 黑泽明军
【转载文章务必保留出处和署名,谢谢!】