1、Collection中能存放什么元素?
没有使用”泛型之前“,Collection中可以存储Object的所有子类型。
使用了泛型之后,Collection中只能存储某个具体的类型。

2、Collection中的常用方法
boolean add(Object e);向集合中添加元素
int size();获取集合中元素的个数
void clear();清空集合
boolean contains(Object o);判断集合中是否包含元素…
boolean remove(Object o);删除集合中某个元素
boolean isEmpty();判断该集合中元素的个数是否为0
Object[] toArray();把集合转换为数组
import java.util.ArrayList;
import java.util.Collection;
public class CollcetionTest01 {
public static void main(String[] args) {
//创建集合对象
//Collection c = new Collcetion();//接口是抽象的,无法实例化。
//多态
Collection c = new ArrayList();
//测试Collection接口中的常用方法
//向集合中添加元素
c.add(1200);//自动装箱,实际上是放进去了一个对象的内存地址。Integer x = new Integer;
c.add(3.14);
c.add(new Object());
c.add(true);//自动装箱
c.add("hello");
c.add("小明");
//获取集合中元素的个数
System.out.println(c.size());//6
//清空集合
// c.clear();
// System.out.println(c.size());//0
//判断集合中是否包含元素..
System.out.println(c.contains("hello"));//true
//删除集合中某个元素
c.remove("小明");
System.out.println(c.size());//5
//判断该集合中元素的个数是否为0
System.out.println(c.isEmpty());//false
//把集合转换为数组
Object[] objs = c.toArray();
for (int i = 0; i < objs.length; i++) {
System.out.println(objs[i]);
}
}
}
3、关于迭代器
是所有Colection通用的一种方式。
在Map集合中不能用。在所有的Collection以及子类中使用。
import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;
public class CollectionTest02 {
public static void main(String[] args) {
//创建集合对象
Collection c = new ArrayList();
c.add("abc");
c.add(12323);
c.add("hello");
c.add(new Object());
//对集合Collection进行迭代/遍历
//第一步:获取集合对象的迭代器对象Iterator
Iterator it = c.iterator();
//第二步:通过以上获取的迭代器对象开始迭代集合
/*
以下两个方法是迭代器Iterator中的方法:
boolean hasNext()如果仍有元素可以迭代,则返回true
Object next()返回迭代的下一个元素
*/
while (it.hasNext()) {
Object object = it.next();
System.out.println(object);
}
}
}
import java.util.Collection;
import java.util.HashSet;
import java.util.Iterator;
public class CollectionTest03 {
public static void main(String[] args) {
//HashSet集合:无序不可重复
Collection c = new HashSet();
//无序:存进去和取出来顺序不一定相同
//不可重复:存储12,不能再存储12
c.add(12);
c.add(45);
c.add(23);
c.add(100);
c.add(12);
Iterator it = c.iterator();
while (it.hasNext()) {
System.out.println(it.next());
}
}
}
4、深入Collection集合的contains方法
boolean contains(Object o)
判断集合中是否包含某个集合对象o
如果包含返回true,如果不包含返回false
import java.util.ArrayList;
import java.util.Collection;
public class CollectionTest04 {
public static void main(String[] args) {
//创建集合对象
Collection c = new ArrayList();
//向集合对象中存储元素
String s1 = new String("abc");
c.add(s1);
String s2 = new String("def");
c.add(s2);
//集合中元素的个数
System.out.println(c.size());//2
//新建String对象
String x = new String("abc");
//C集合中是否包含x?
System.out.println(c.contains(x));//true
/*
x并未放在集合c中,为什么会返回true?
因为contains中调用了equals方法,
而equals方法是被重写过,
此时比较的是内容,所以返回true。
*/
}
}
import java.util.ArrayList;
import java.util.Collection;
public class CollectionTest05 {
public static void main(String[] args) {
Collection c = new ArrayList();
Student s1 = new Student("jack");
c.add(s1);
Student s2 = new Student("jack");
System.out.println(c.contains(s2));//false
/*
因为在User类中没有重写equals方法,调用的是Object类中的equals方法
默认比较的对象的内存地址,s1、s2内存地址不同,所以为false。
*/
}
}
class Student {
private String name;
public Student() {
}
public Student(String name) {
this.name = name;
}
}
结论:存放在一个集合中的类型,一定要重写equals方法。
5、关于remove方法
import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;
public class CollectionTest06 {
public static void main(String[] args) {
Collection c = new ArrayList();
c.add(1);
c.add(34);
c.add(33);
Iterator it = c.iterator();
// c.remove(1);//在这里就会出现异常,以为迭代器不会更新
//需要重新创建迭代器,或者把remove()写在创建迭代器的下面
while (it.hasNext()) {
Object obj = it.next();
it.remove();//自动更新迭代器,删除当前元素
System.out.println(obj);
}
System.out.println(c.size());//0
}
}
当集合结构发生改变时,迭代器必须重新获取。
在迭代集合元素的过程中,不能调用集合对象的remove方法,删除元素。
在迭代元素的过程中,一定要使用迭代器Iterator的remove方法,删除元素。