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集合概述 在编程中,常常需要集中存放多个数据.当然我们可以使用数组来保存多个对象.但数组长度不可变化,一旦在初始化时指定了数组长度,则这个数组长度是不可变的,如果需要保存个数变化的数据,数 ...
随机推荐
- js中ajax异步导致的一些问题
问题1:ajax默认是异步,所以在ajax中对外面定义的变量赋值,不能正确赋值 $("form").submit( var flag; $.ajax({ type: 'GET', ...
- Hadoop2
http://www.cnblogs.com/miaoxiaoyu/archive/2012/07/29/2614060.html
- linux编码
转: Linux查看文件编码格式及文件编码转换 如果你需要在Linux中操作windows下的文件,那么你可能会经常遇到文件编码转换的问题.Windows中默认的文件格式是GBK(gb2312),而L ...
- windows2003服务器不显示桌面怎么办
ctrl +alt+delete 进入任务管理器应用程序里 创建新任务 C:\WINDOWS\explorer.exe 运行就行
- Java 集合类(一)
今天我们先讲一下Collection: Collection和Collections的区别: java.util.Collection是一种java集合接口,它提供了对集合对象的基本操作通用接口方法, ...
- 为什么使用long声明和double声明得到的结果不一样呢?
为什么使用long声明和double声明得到的结果不一样呢? 程序如下: public class P376{ public static void main(String[] atgs){ long ...
- VMware虚拟机中Hadoop服务的端口无法访问的问题
今天安装了一个hadoop集群,因为已经在单个虚拟机上安装成功,所以初期安装相对顺利. 初始环境如下: 通过Vmware Esxi服务器虚拟机出来四台机器,每台机器的网络配置如下: ...
- linux源码阅读笔记 asm函数
在linux源码中经常遇到__asm__函数.它其实是函数asm的宏定义 #define __asm__ asm,asm函数让系统执行汇编语句. __asm__常常与__volatile__一起出现. ...
- 【hadoop2.6.0】倒排索引遇到问题了
想实现书上倒排索引的例子,但是我不会java想用C++写,如果用hadoop streaming 那么输入必须是标准输入的形式, 那么我怎么获得每个文件的文件名呢? 查了一下,还有一种方法叫做hado ...
- C#中 ? 和?? 的用法
C#中 ?? 和? 的意思 1.? 如果直接定义一个 值类型,给负值null:就会提示“无法将 Null转换成‘值类型(比如:int)’,因为他是一种不可为null的值 de类型” 例如 int in ...