1.首先是 Collection
List :可以存储重复,有序 。 set 不可以重复,无序
import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;
public class CollectionDemo {
/**
* Collection 接口中的方法,是集合中所有实现类必须拥有的方法 使用 Collection 接口实现类, ArrayList
* implements List ,List extends Collection 方法的执行,都是实现的重写
*/
public static void main(String[] args) {
// * Collection 的基本方法
myClear();
myContains();
myToArray();
myRemove();
fun();
}
/**
* void clear()
* 清空集合,集合本身仍然存在
*/
public static void myClear() {
Collection<String> collection = new ArrayList<String>();
collection.add("a");
collection.add("b");
System.out.println(collection);
collection.clear();
System.out.println(collection);
}
/**
* boolean contains(Object o)
* 判断对象是否存在与集合中
*
*/
public static void myContains() {
Collection<String> collection = new ArrayList<>();
collection.add("a");
collection.add("b");
collection.add("c");
boolean b = collection.contains("c");
System.out.println(b);
}
/**
* Object[] toArray()
* 集合转数组(数组长度不可变,集合长度可变)
*
*/
public static void myToArray() {
Collection<String> collection = new ArrayList<>();
collection.add("a");
collection.add("b");
collection.add("c");
Object [] objects = collection.toArray();
for (int i = 0; i < objects.length; i++) {
System.out.println(objects[i]);
}
System.out.println(objects);
}
/**
* boolean remove(Object o)
* 移除集合中指定的元素
* 返回值:是否删除成功
* 有重复元素时,只删除第一个
*/
public static void myRemove() {
Collection<String> collection = new ArrayList<>();
collection.add("c");
collection.add("a");
collection.add("b");
collection.add("c");
System.out.println(collection);
boolean b = collection.remove("c");
System.out.println("是否删除成功:" + b + " " + collection);
}
/**
* 不给集合指定类型
*/
public static void fun() {
//结合可以存储任意类型的对象,不指定类型,什么都可以存
Collection collection = new ArrayList<>();
//向上转型,提升为 Object 类型
collection.add("a");
collection.add("b");
collection.add("c");
Iterator iterator = collection.iterator();
while (iterator.hasNext()) {
Object object = iterator.next();
System.out.println(object);
//向下转型为 String
String string = (String) object;
System.out.println(string.length());
}
//如果转错会出现类型转换异常。哈哈 ,可以用这个 instanceof
}
}
2.接下来是 Iterator
import java.util.ArrayList;
import java.util.Collection;
import java.util.HashSet;
import java.util.Iterator;
public class IteratorDemo {
/*
* A:迭代器概述:(其实就是遍历)
* a:java中提供了很多个集合,它们在存储元素时,采用的存储方式不同。
* 我们要取出这些集合中的元素,可通过一种通用的获取方式来完成。
*
* b:Collection集合元素的通用获取方式:在取元素之前先要判断集合中有没有元素,
* 如果有,就把这个元素取出来,继续在判断,如果还有就再取出出来。一直把集合中的所有元素全部取出。这种取出方式专业术语称为迭代。
*
* c:每种集合的底层的数据结构不同,例如ArrayList是数组,LinkedList底层是链表,但是无论使用那种集合,我们都会有判断是否有元素
* 以及取出里面的元素的动作,那么Java为我们提供一个迭代器定义了统一的判断元素和取元素的方法
*
*
* 接口 Iterator :两个抽象方法
* boolean hasNext() 判断集合中是否还有可以取出的元素,有返回 true
* next() 取出集合中的下一个元素
*
* Iterator 接口实现类
* Collection 接口定义方法:
* Iterator iterator()
*
* ArrayList 重写方法 iterator(),返回 Iterator接口的实现类的对象
* 使用 ArrayList 集合的对象(面向接口编程,实现类是谁不重要了,重点是 Iterator 的两个方法)
* Iterator iterator = array.iterator(),运行结果就是 Iterator 接口的实现类对象
* iterator 是接口的实现类对象,调用方法 hasNext() 和 next() 集合元素迭代
*/
public static void main(String[] args) {
//实现类可以换成所有的子类,其余代码不用动,流弊,流弊
// Collection<String> collection = new HashSet<String>();
Collection<String> collection = new ArrayList<String>();
collection.add("a");
collection.add("b");
collection.add("c");
collection.add("d");
//迭代器,对集合中的元素进行取出
//调用集合的方法 iterator() 获取 Iterator 接口的实现类的对象,
//这里的实现类对象为:ArrayList 的内部类 Itr ,具体实现请看 ArrayList API
Iterator<String> iterator = collection.iterator();
//接口的实现类对象,调用方法 hasNext() 判断集合中是否有元素
// boolean b = iterator.hasNext();
// System.out.println("是否有元素可以取出:" + b);
//接口的实现类对象,嗲用方法 next()取出集合中的元素
// String s = iterator.next();
//完整写法
while (iterator.hasNext()) {
String string = (String) iterator.next();
System.out.println(string);
}
//调用 Iterator<String> iterator = collection.iterator(); 的时候会创建一个指针,只在 -1 位,
//然后 iterator.hasNext() 检查是否有下一个元素
//iterator.next() 移动指针,如果不调用,指针永远不动,上面的代码就死循环了
//具体实现请看源码,哈哈
}
}