标签:
对象数组举例:
package itcast01; /** * Created by gao on 15-12-9. */ public class Student { private String name; private int age; public Student() { } public Student(String name, int age) { 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; } }
测试类:
package itcast01; /** * Created by gao on 15-12-9. */ /* * 我有5个学生,请把这个5个学生的信息存储到数组中,并遍历数组,获取得到每一个学生信息。 * 学生:Student * 成员变量:name,age * 构造方法:无参,带参 * 成员方法:getXxx()/setXxx() * 存储学生的数组?自己想想应该是什么样子的? * 分析: * A:创建学生类。 * B:创建学生数组(对象数组)。 * C:创建5个学生对象,并赋值。 * D:把C步骤的元素,放到数组中。 * E:遍历学生数组。 */ public class ObjectArrayDemo01 { public static void main(String[] args) { // 创建学生数组(对象数组)。 Student[] students = new Student[5]; // 创建5个学生对象,并赋值。 Student s1 = new Student("林青霞", 27); Student s2 = new Student("风清扬", 30); Student s3 = new Student("刘意", 30); Student s4 = new Student("赵雅芝", 60); Student s5 = new Student("王力宏", 35); // 把C步骤的元素,放到数组中。 students[0] = s1; students[1] = s2; students[2] = s3; students[3] = s4; students[4] = s5; // 遍历 for (int x = 0; x < students.length; x++) { //System.out.println(students[x]);//没有重写toString方法,打印地址值 Student s = students[x]; System.out.println(s.getName()+"---"+s.getAge()); } } }
2、 Collection 集合类:
是集合的顶层接口,它的子体系有重复的,有唯一的,有有序的,有无序的。
测试类1:(不带All的方法)
package collectiondemo; import java.util.ArrayList; import java.util.Collection; /* Collection的功能概述: * 1:添加功能 * boolean add(Object obj):添加一个元素 * boolean addAll(Collection c):添加一个集合的元素 * 2:删除功能 * void clear():移除所有元素 * boolean remove(Object o):移除一个元素 * boolean removeAll(Collection c):移除一个集合的元素(是一个还是所有) * 3:判断功能 * boolean contains(Object o):判断集合中是否包含指定的元素 * boolean containsAll(Collection c):判断集合中是否包含指定的集合元素(是一个还是所有) * boolean isEmpty():判断集合是否为空 * 4:获取功能 * Iterator<E> iterator()(重点) * 5:长度功能 * int size():元素的个数 * 面试题:数组有没有length()方法呢?字符串有没有length()方法呢?集合有没有length()方法呢? * 6:交集功能 * boolean retainAll(Collection c):两个集合都有的元素?思考元素去哪了,返回的boolean又是什么意思呢? * 7:把集合转换为数组 * Object[] toArray() */ public class CollectionDemo01 { public static void main(String[] args) { // 测试不带All的方法 //创建集合对象 // Collection c = new Collection(); //错误,因为接口不能实例化 Collection c = new ArrayList(); //可有重复 // boolean add(Object obj):添加一个元素 // System.out.println("add:"+c.add("hello")); c.add("hello"); c.add("world"); c.add("java"); // void clear():移除所有元素 //c.clear(); // boolean remove(Object o):移除一个元素 // System.out.println("remove:"+c.remove("hello")); //remove:true // System.out.println("remove:"+c.remove("javaee")); //remove:false // boolean contains(Object o):判断集合中是否包含指定的元素 // System.out.println("contains:"+c.contains("hello")); //contains:true // System.out.println("contains:"+c.contains("android")); //contains:false // boolean isEmpty():判断集合是否为空 System.out.println("isEmpty:"+c.isEmpty()); //isEmpty:false //int size():元素的个数 System.out.println("size:"+c.size()); //size:3 System.out.println("c:"+c); //c:[hello, world, java] } }
测试类2:(带All的方法)
package collectiondemo; import java.util.ArrayList; import java.util.Collection; /** * Created by gao on 15-12-9. */ public class CollectionDemo02 { public static void main(String[] args) { // 创建集合1 Collection c1 = new ArrayList(); c1.add("abc1"); c1.add("abc2"); c1.add("abc3"); c1.add("abc4"); // 创建集合2 Collection c2 = new ArrayList(); c2.add("abc1"); c2.add("abc2"); c2.add("abc3"); c2.add("abc4"); c2.add("abc5"); c2.add("abc6"); c2.add("abc7"); // boolean addAll(Collection c):添加一个集合的元素(添加c2集合中的所有元素,可重复) // System.out.println("addAll:"+c1.addAll(c2)); //addAll:true // System.out.println("c1:"+c1); //c1:[abc1, abc2, abc3, abc4, abc4, abc5, abc6, abc7] // System.out.println("c2:"+c2); //c2:[abc4, abc5, abc6, abc7] //boolean removeAll(Collection c):移除一个集合的元素(只要移除c中的一个元素就算成功) // System.out.println("removeAll:"+c1.removeAll(c2)); //removeAll:true // System.out.println("c1:"+c1); //c1:[abc1, abc2, abc3] // System.out.println("c2:"+c2); //c2:[abc4, abc5, abc6, abc7] //boolean containsAll(Collection c):判断集合中是否包含指定的集合元素(只有包含c的所有元素才算成功) // System.out.println("containsAll:"+c1.containsAll(c2)); //containsAll:false // System.out.println("c1:"+c1); //c1:[abc1, abc2, abc3, abc4] // System.out.println("c2:"+c2); //c2:[abc4, abc5, abc6, abc7] //boolean retainAll(Collection c):两个集合都有的元素?思考元素去哪了,返回的boolean又是什么意思呢? //假设有两个集合A,B。 //A对B做交集,最终的结果保存在A中,B不变。 //返回值表示的是A是否发生过改变。 // System.out.println("retainAll:"+c1.retainAll(c2)); //retainAll:true;c1发生了改变 // System.out.println("c1:"+c1); //c1:[abc4] // System.out.println("c2:"+c2); //c2:[abc4, abc5, abc6, abc7] System.out.println("retainAll:"+c1.retainAll(c2)); //retainAll:false;c1没有发生改变 System.out.println("c1:"+c1); //c1:[abc1, abc2, abc3, abc4] System.out.println("c2:"+c2); //c2:[abc1, abc2, abc3, abc4, abc5, abc6, abc7] } }
测试类3:普通遍历
package collectiondemo; import java.util.ArrayList; import java.util.Collection; /** * Created by gao on 15-12-9. */ /* * 集合的遍历。其实就是依次获取集合中的每一个元素。 * * Object[] toArray():把集合转成数组,可以实现集合的遍历 */ public class CollectionDemo03 { public static void main(String[] args) { // 创建集合对象 Collection c = new ArrayList(); // 添加元素 c.add("hello"); // Object obj = "hello"; 向上转型 c.add("world"); c.add("java"); // 遍历 // Object[] toArray():把集合转成数组,可以实现集合的遍历 Object[] objs = c.toArray(); for (int x = 0; x < objs.length; x++) { // System.out.println(objs[x]); // 我知道元素是字符串,我在获取到元素的的同时,还想知道元素的长度。 // System.out.println(objs[x] + "---" + objs[x].length()); // 上面的实现不了,原因是Object中没有length()方法 // 我们要想使用字符串的方法,就必须把元素还原成字符串 // 向下转型 String s = (String) objs[x]; System.out.println(s + "---"+s.length()); } } }
package collectiondemo02; /** * Created by gao on 15-12-9. */ public class Student { private String name; private int age; public Student() { } public Student(String name, int age) { 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; } }
测试类:
package collectiondemo02; import java.util.ArrayList; import java.util.Collection; /** * Created by gao on 15-12-9. */ public class StudentDemo { public static void main(String[] args) { //创建集合对象 Collection c = new ArrayList(); // 创建学生对象 Student s1 = new Student("林青霞", 27); Student s2 = new Student("风清扬", 30); Student s3 = new Student("令狐冲", 33); Student s4 = new Student("武鑫", 25); Student s5 = new Student("刘晓曲", 22); //把学生添加到集合 c.add(s1); c.add(s2); c.add(s3); c.add(s4); c.add(s5); // 把集合转成数组 Object[] objects = c.toArray(); //遍历数组 for(int x = 0; x < objects.length; x++){ Student s = (Student) objects[x]; System.out.println(s.getName()+"-->"+s.getAge()); } } }
4、Iterator接口:Iterator
package collectiondemo03; import java.util.ArrayList; import java.util.Collection; import java.util.Iterator; /** * Created by gao on 15-12-14. */ /* * Iterator iterator():迭代器,集合的专用遍历方式 * Object next():获取元素,并移动到下一个位置。 * NoSuchElementException:没有这样的元素,因为你已经找到最后了。 * boolean hasNext():如果仍有元素可以迭代,则返回 true。( */ public class CollectionDemo01 { public static void main(String[] args) { Collection c = new ArrayList(); // 创建并添加元素 // String s = "hello"; // c.add(s); c.add("hello"); c.add("world"); c.add("java"); // Iterator iterator():迭代器,集合的专用遍历方式 Iterator it = c.iterator(); // 实际返回的肯定是子类对象,这里是多态 // 判断是否有下一个元素,有就获取,没有就不搭理它 while(it.hasNext()){ String s = (String) it.next(); System.out.println(s); } } }
package collectiondemo03; import java.util.ArrayList; import java.util.Collection; import java.util.Iterator; /** * Created by gao on 15-12-14. */ /* * 练习:用集合存储5个学生对象,并把学生对象进行遍历。用迭代器遍历。 * * 注意: * A:自己的类名不要和我们学习的要使用的API中的类名相同。 * B:复制代码的时候,很容易把那个类所在的包也导入过来,容易出现不能理解的问题。 */ /* * 问题1:能用while循环写这个程序,我能不能用for循环呢? * 问题2:不要多次使用it.next()方法,因为每次使用都是访问一个对象。 */ public class CollectionTest01 { public static void main(String[] args) { // 创建集合对象 Collection c = new ArrayList(); // 创建学生对象 Student s1 = new Student("林青霞", 27); Student s2 = new Student("风清扬", 30); Student s3 = new Student("令狐冲", 33); Student s4 = new Student("武鑫", 25); Student s5 = new Student("刘晓曲", 22); // 把学生添加到集合中 c.add(s1); c.add(s2); c.add(s3); c.add(s4); c.add(s5); Iterator it = c.iterator(); while(it.hasNext()){ Student s = (Student)it.next(); System.out.println(s.getName() + "---" + s.getAge()); } //for改写,不过我们习惯用while // for (Iterator it = c.iterator(); it.hasNext(); ) { // Student s = (Student) it.next(); // System.out.println(s.getName() + "---" + s.getAge()); // } } }
输出结果:
迭代器的源码结构:
public interface Inteator { boolean hasNext(); Object next(); } public interface Iterable { Iterator iterator(); } public interface Collection extends Iterable { Iterator iterator(); } public interface List extends Collection { Iterator iterator(); } public class ArrayList implements List { public Iterator iterator() { return new Itr(); } private class Itr implements Iterator { public boolean hasNext() {} public Object next(){} } } Collection c = new ArrayList(); c.add("hello"); c.add("world"); c.add("java"); Iterator it = c.iterator(); //new Itr(); while(it.hasNext()) { String s = (String)it.next(); System.out.println(s); }
Java API ——Collection集合类 & Iterator接口
标签:
原文地址:http://www.cnblogs.com/yangyquin/p/5045488.html