Java 集合类
集合可以看作是一个容器,比如,所有Java有关的书都可以看作是一个集合。对于集合中的各个对象很容易将其存放到集合中,也很容易将其从集合中取出来,还可以按照一定的顺序将其摆放。Java中提供了不同的集合类,这些集合类具有不同的存储对象的方式,并提供了相应的方法以方便用户对集合进行遍历,添加,删除,以及查找指定的对象。
集合类又被称作容器,提到容器大家很自然地就想到了数组,那么集合类和数组有哪些不同之处呢?首先,数组的长度是固定的,而集合的长度是可变的;其次,数组用来存放基本的数据类型,而集合用来存放对象的引用。常用的集合主要分为两大类,Map类和Collection类,Collection类又包括Set类和List类,它们之间的继承关系可以用下面的图来表示:
Collection接口是层次结构中的根接口,其构成单位称为元素。Collection接口通常不能直接使用,但提供了添加元素,删除元素,管理数据的方法。从上面的继承图可以看出,Set和List类继承了Collection接口,因此这些方法对Set和List类也是通用的。那么,接下来,我们看看Collection类的常用方法。
Collection集合的常用方法主要有以下几种:
boolean add(Object element); 向集合中添加元素
void clear(); 清空集合
boolean contains(Object o); 判断集合中是否包含某元素
boolean isEmpty(); 判断集合中是否有元素
Iterator<E> iterator(); 获取集合所依赖的迭代器对象
boolean remove(Object o); 删除集合中某个元素
int size(); 获取集合中元素的个数
Object[] toArray(); 将集合转换成数组
接下来我们看这些方法的使用。看以下程序:
import java.util.*;
public class CollectionTest01{
public static void main(String[] args){
//1.创建集合
Collection c=new ArrayList();
//2.添加元素
c.add(1);
c.add(new Integer(100));
c.add(new Object());
Customer cus=new Customer("JACK",20);
//3.获取元素的个数
System.out.println(c.size()); //4
System.out.println(c.isEmpty()); //false
//4.将集合转换成Object类型的数组
Object[] objs=c.toArray();
for(int i=0;i<objs.length;i++){
System.out.println(objs[i]);
}
//5.清空
c.clear();
System.out.println(c.size()); //0
//6.判断集合是否为空
System.out.println(c.isEmpty()); //true
}
}
class Customer{
String name;
int age;
Customer(String name,int age){
this.name=name;
this.age=age;
}
//重写Object中的toString方法
public String toString(){
return "Customer[name="+name+",age="+age+"]";
}
}
编译后运行输出:
3
false
1
100
java.lang.Object@15db9742
0
true
上述代码中,
1.创建集合,这里注意,因为Collection是一个接口,所以不能直接Collection c=new Collection(); 我们可以寻找它下面的一个实现类(参考上面的继承类的图)ArrayList,即Collection c=new ArrayList();
2.添加元素, c.add(1);这里用到了自动装箱的知识,忘记了的翻到前面看一看啊,c.add(new Object());相当于Object o=new Object(); c.add(o);也就是说Collection只能存储引用类型。之后我们自己给定一个其他类型Customer,并且重写Object中的toString()方法,然后在main()方法中添加元素c.add(cus);
3.获取元素的个数,使用c.size();
4. 将集合转换成Object类型的数组,使用的方法为toArray(); 之后使用for循环进行遍历;输出为
1
100
java.lang.Object@15db9742
0
5.清空集合,使用c.clear(); 然后再次获取元素个数之后会发现System.out.println(c.size());输出为0;
6.中间我们穿插了c.isEmpty(); 即判断集合是否为空;
接下来我们看看迭代器iterator()方法。看以下代码:
import java.util.*;
public class CollectionTest02{
public static void main(String[] args){
//创建集合对象
Collection c=new LinkedList();
//添加元素
c.add(100);
c.add(3.14);
c.add(false);
//迭代,遍历
//1.获取迭代器对象
Iterator it=c.iterator();
//2.开始调用方法,完成遍历,迭代
while(it.hasNext()){
Object element=it.next();
System.out.println(element);
}
/* //或者使用for循环
for(Iterator it=c.iterator();it.hasNext();){
Object o=it.next();
System.out.println(o);
} */
}
}
在上述代码中,
1.获取迭代器对象,已经创建了集合对象c,进行迭代时直接调用iterator()方法,也就是说,迭代器=c.iterator(); 这里c可能为ArrayList,HashSet,LinkedList各种集合对象,这样调用iterator()就实现了不同的迭代器,但是所有的迭代器都实现了Iterator接口,所以可以直接Iterator it=c.iterator();也就是说迭代器是直接面向接口编程,看不出具体的实现类,it是引用,保存了内存地址,指向堆中的迭代器对象。
2.开始调用方法,完成遍历,迭代
迭代器Iterator里面有三个方法,hasNext()判断迭代器里面是否有更多的元素,如果有,返回true,否则返回false; next()方法将迭代器向下移动一位,并且取出指向的元素,但要注意,调用next()方法之前,为了防止出现问题,必须先调用hasNext()方法判断是否还有元素。这里介绍了while和for循环两种遍历方式。