集合框架(Collections Framework) 简介
集合和数组的区别:
数组存储基础数据类型,且每一个数组都只能存储一种数据类型的数据,空间不可变。
集合存储对象,一个集合中可以存储多种类型的对象。空间可变。
严格地说,集合是存储对象的引用,每个对象都称为集合的元素。根据存储时数据结构的不同,分为几类集合。但对象不管存储到什么类型的集合中,既然集合能存储任何类型的对象,这些对象在存储时都必须向上转型为Object类型,也就是说,集合中的元素都是Object类型的对象。
既然是集合,无论分为几类,它都有集合的共性,也就是说虽然存储时数据结构不一样,但该有的集合方法还是得有。在Java中,Collection接口是集合框架的根接口,所有集合的类型都实现了此接口或从其子接口中继承。
Collection接口根据数据结构的不同,一些collection允许有重复的元素,而另一些则不允许。一些collection是有序的,而另一些则是无序的。
Java SDK不提供直接继承自Collection的类,Java SDK提供的类都是继承自Collection的"子接口"如List和Set。也就是说,无法直接new一个collection对象,而是只能new一个实现Collection类的子接口的对象,如new ArrayList();。
所有的Collection类都必须至少提供两个构造方法:无参数构造方法构造一个空集合;带Collection参数的构造方法构造一个包含该Collection内容的集合。例如,ArrayList就有3个构造方法,其中之二就满足这两个构造方法的要求。
Collection是java.util包中的类,因此要实现集合的概念,需要先导入该包。
ArrayList继承自List接口,List接口又继承自Collection接口。ArrayList类存储的集合中,元素有序、可重复。
import java.util.*; Collection coll = new ArrayList();因为Collection接口不允许直接实现,因此需要通过实现它的子类来实现集合的概念,此处创建的是ArrayList对象,使用了父类引用,好处是扩展性较好。
Collection有一些集合的通用性操作方法,分为两类:一类是普通方法;一类是带有All的方法,这类方法操作的是集合。
add():向集合的尾部插入元素,返回值类型为boolean,插入成功返回true。注意集合只能存储对象(实际上是对象的引用)。
import java.util.*; // public class TestColl { public static void main(String[] args) { Collection coll = new ArrayList(); coll.add("abcd"); //插入字符串对象 coll.add(123); //插入Int对象 coll.add(123); coll.add(new Student("Gaoxiaof",23)); //插入Student对象 coll.add(new Student("Gaoxiaof",23)); //插入另一个Student对象 System.out.println(coll); //直接输出集合中的元素,得到结果[abcd,123,123,Gaoxiaof 23,Gaoxiaof 23] } } // class Student { private String name; private int age; Student(String name,int n) { this.name = name; this.age = n; } public String getName() { return this.name; } public int getAge() { return this.age; } public String toString() { return this.name + " " + this.age; } }上面插入的"abcd"和"123"都是经过自动装箱转换为对象后存储在集合中的。其中两个add(123)是重复的对象元素,因为判断集合中的元素是否重复的唯一方法是equals方法是否返回0。Integer已经重写过equals()。而后面的两个Student对象是不同对象,因为Student类中没有重写equals()方法,所以它们是不重复的元素。
remove():删除集合中首次出现的元素。确定是否能删除某个元素,唯一的方法是通过equals()方法确定对象是否相等,相等时删除才返回true。
Collection coll = new ArrayList(); coll.add("abcd"); coll.add(new Integer(128)); coll.add(new Student("Gaoxiaofang",23)); System.out.println(coll.remove(new Integer(128))); //true coll.remove(new Student("Gaoxiaofang",23)); //false,因为没有重写equals() System.out.println(coll); //return: [abcd,Gaoxiaofang 23]clear():清空该集合中的所有元素。