关于java.util.Collection接口中常用的方法:
Collection是所有单元素存储集合的根接口,要想学习集合,就必须了解它们的父接口有什么方法。
1、Collection中能存放什么类型的元素?
没有使用“泛型”时,Collection中可以存储Object的所有子类型。
使用了“泛型”之后,Collection中只能存储某个具体的类型。
集合中不能直接存储基本数据类型,也不能直接存java对象,而是存储java对象的内存地址。
2、Collection中常用方法(接口中的方法属于抽象方法,public abstract都可以省略不写):
(1)boolean add(Object obj);
向集合中添加Object型元素
(2)int size();
获取集合中元素的个数
(3)void clear();
清空集合中的所有元素
(4)boolean contains(Object o);
判断集合中是否存在某个指定对象
(5)boolean remove(Object o);
删除集合中的指定对象
(6)boolean isEmpty();
判断集合中的元素个数是否为0
(7)Object[] toArray();
把集合中的元素转成数组返回
(8)Iterator iterator();
返回集合中的迭代器对象
Iterator中有三个方法:
-
boolean hasNext();
迭代过程中判断是否还有元素可迭代。 -
Object next();
返回迭代的下一个元素 -
default void remove(); (这个方法暂时不要管它)
从迭代器指向的集合中移除迭代器返回的最后一个元素。
测试代码:
import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;
public class Test01 {
public static void main(String[] args) {
// 创建一个集合对象
//Collection c = new Collection(); // 这样写能行吗?显然不行,Collection是一个接口,接口无法实例化。
// 多态,父类型引用指向子类型对象
Collection c = new ArrayList(); // new谁都行,只要是Collection的子类就行,这里就使用ArrayList测试
// boolean add()方法,注意:形式参数是Object型
c.add(1500); // 自动装箱,把1500变成Integer型,相当于Integer x = new Integer(1500); 把x存入了集合中
c.add(3.14); // 自动装箱,存放的是3.14这个Double类的对象内存地址
c.add(true);
c.add(true); // 可以添加相同内容的对象,但存储的Boolean对象的内存地址不一样
c.add(new Object());
c.add(new Student(1001, "张三"));
// int size()方法
System.out.println(c.size()); // 6
// void clear();
c.clear();
System.out.println(c.size()); // 0
// 再添加几个元素
c.add("hello"); // 存的是"hello"对象的内存地址
boolean canAddSame = c.add("hello"); // 继续添加"hello",是否添加成功?
System.out.println(canAddSame); // true
c.add("world");
System.out.println(c.size()); // 3
// boolean contains(Object o);
System.out.println(c.contains("world")); // true
System.out.println(c.contains("abc")); // false
// boolean remove()方法
c.remove("hello"); // 删除的是第一次加入的hello的String对象,因为ArrayList集合是有存放顺序的
c.remove("world");
System.out.println(c.size()); // 1
// boolean isEmpty();
System.out.println(c.isEmpty()); // false
c.clear();
System.out.println(c.isEmpty()); // true
//Object[] toArray();
// 我们先按照顺序向集合中添加5个元素,注意有重复的值
c.add(1);
c.add("hello");
c.add("world");
c.add(new Student(1001, "张三"));
c.add("hello");
// 先删除一个"hello",看会删除哪一个"hello"对象?
c.remove("hello");
// 转成数组
Object[] objs = c.toArray();
for (int i = 0; i < objs.length; i++) {
System.out.print(objs[i].toString() + " "); // 1 world 1001-张三 hello
}
// 所以验证了ArrayList集合存放元素是有顺序的
System.out.println();
// Iterator<Object> iterator();
// 获取集合的迭代器对象
Iterator it = c.iterator();
// 注意:此迭代方法适用于所有的集合,但是,除了Map集合之外
while (it.hasNext()) {
Object obj = it.next();
System.out.print(obj + " "); // 1 world 1001-张三 hello
}
}
}
class Student {
int id;
String name;
public Student() {
}
public Student(int id, String name) {
this.id = id;
this.name = name;
}
@Override
public String toString() {
return id + "-" + name;
}
}