Java API ——Collection集合类 & Iterator接口
对象数组举例:
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接口的更多相关文章
- Java基础 -- Collection和Iterator接口的实现
Collection是描述所有序列容器(集合)共性的根接口,它可能被认为是一个“附属接口”,即因为要表示其他若干个接口的共性而出现的接口.另外,java.util.AbstractCollection ...
- java集合 之 Collection和Iterator接口
Collection是List,Queue和Set接口的父接口,该接口里定义的方法即可用于操作Set集合,也可以用于List和Queue集合.Collection接口里定义了如下操作元素的方法. bo ...
- Java容器深入浅出之Collection与Iterator接口
Java中用于保存对象的容器,除了数组,就是Collection和Map接口下的容器实现类了,包括用于迭代容器中对象的Iterator接口,构成了Java数据结构主体的集合体系.其中包括: 1. Co ...
- java集合(2)-Collection与Iterator接口
1 package com.j1803.collectionOfIterator; 2 import java.util.ArrayList; 3 import java.util.Collectio ...
- Java:Collection集合类
特点:只能用于存储对象,集合长度时可变的,集合可以存储不同类型的对象. 数组和集合类同时容器,不同的是: 1.数组虽然也可以存储对象,但是长度是固定的:集合长度时可变的. 2.数组中可以存储基本数据类 ...
- 【Java】Collection与Map接口总结
Collection -----List -----LinkedList 非同步 ----ArrayList 非同 ...
- Java集合——集合框架Iterator接口
1.集合输出 很多情况下我们需要把集合的内容进行输出,也就是遍历集合. 遍历集合的方式有以下几种: 1.Iterator 2.ListIterator 3.Enumeration(枚举方式,比较老一般 ...
- 7.2 Collection和Iterator接口
- Java集合框架(一)—— Collection、Iterator和Foreach的用法
1.Java集合概述 在编程中,常常需要集中存放多个数据.当然我们可以使用数组来保存多个对象.但数组长度不可变化,一旦在初始化时指定了数组长度,则这个数组长度是不可变的,如果需要保存个数变化的数据,数 ...
随机推荐
- Basic Vlan Configure
Basic Vlan CLI Configure Switch>en Switch#conf t Enter configuration commands, one per line. End ...
- Uploadify 3.2 上传图片
uploadify version: uploadify 3.2 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional// ...
- centos 6.5安装vncserver 并开启远程桌面
vnc是一款使用广泛的服务器管理软件,可以实现图形化管理,下面简单介绍一下如何在centos6.5下安装vnc. 1.下载vncserver yum install tigervnc tige ...
- 20145120黄玄曦 《java程序设计》 寒假学习总结
1和2.我对未来规划不多,我认为好好学习积累知识能帮助我应对未来的挑战,这是我的学习动力之一,此外,了解新知识满足好奇心也是我的主要的学习动力. 3.我认为专业课学习比公务员考试重要,我认为专业知识是 ...
- 发现一个很好的android开发笔记库
http://linux.linuxidc.com/ 密码和用户名都是www.linuxidc.com android基础教程到高手进阶,游戏开发,数据存储,android架构等.谢谢网站主分享!
- 来吧,给你的Winform列表控件画个妆
前言 以前看别人的控件好看只有羡慕的份:以前觉得控件重绘是个很复杂的东西:以前知道MSDN很全面很专业却一直没有好好用起来: 作为初级程序猿,不能原地踏步,来吧,让我们一起把 TreeView 美化一 ...
- java 回传参数
通过 new 创建的对象可以实现回传,如数组:自定义类对象里的参数. [数组方式] public static void main(String[] args) { try { int [] amou ...
- ZedGrap控件绘制图表曲线
问题描述: 使用C#中ZedGrap控件绘制图表曲线图 ZedGrap 介绍说明: 安装ZedGrap控件 ZedGraph控件dll文件: 添加ZedGraph控件,首先在新建立的C#图像工 ...
- 【娱乐】高端小游戏Manufactoria
Manufactoria 是一款游戏.游戏中,一家生产机器人的工厂内部出了一 些问题,生产出来的机器人有很多不合格的.一个机器人可以用一个含有红色和 蓝色的颜色串来描述,只有颜色串符合某种规律的机器人 ...
- GameMap其他初始化
//其他初始化 init_prop();//初始化道具 init_ornamemtal();//初始化装饰物 init_monster_type_info();//初始化怪物基本信息 这个比较重要在加 ...