前情:
数组的长度是固定的,在许多应用场合,一组数据的数目是不固定的,比如一个单位的员工数目是变化的,有老的员工跳槽,也有新的员工进来。比如一个单位的客户是变化的,有老的客户流失,也有新的客户签单。
为了使程序能方便地存储和操纵数目不固定的一组数据,JDK类库提供了Java集合,所有Java集合类都位于java.util包中。与Java数组不同,Java集合中不能存放基本类型数据,而只能存放对象的引用。出于表达上的便利,通常把“集合中的对象的引用”简称为“集合中的对象“。
集合与数组区别:
(1)长度,数组:定长 集合:变长
(2)数组中只能存放同类型数据,集合中的元素可以是不同的类型
(3)数组可以放基本数据类型和引用数据类型,集合只能存放引用数据类型
Java中集合主要分为三种类型:
Set : 无序(与放入的先后的次序无关),并且放进集合中的对象不能重复。
HashSet、LinkedHashSet、TreeSet
List: 有序(与放入的先后的次序有关), 放进集合中的对象可以重复。
ArrayList、LinkedList、Vector
Map :集合中的每一个元素包含一对键对象和值对象,集合中没有重复的键对象,值对象可以重复。(Key - Value)
HashMap HashTable TreeMap
Collection和Iterator接口
Set和List接口继承了Collection接口,在Collection接口中声明了适用于Set和List的通用方法:
(1)boolean add(Object o): 向集合中加入一个对象的引用;
(2)void clear(): 删除集合中的所有对象引用,即不再持有这些对象的引用;
(3)boolean contains(Object o): 判断在集合中是否持有特定对象的引用;
(4) boolean isEmpty(): 判断集合是否为空;
(5)Iterator iterator(): 返回一个Iterator对象,可用它来遍历集合中的元素;
(6)boolean remove(Object o): 从集合中删除一个对象的引用;
(7)int size(): 返回集合中元素的数目;
(8)Object[] toArray(): 返回一个数组,该数组包含集合中的所有元素;
Collection中的另一些常用方法:
boolean addAll(Collection c)
boolean removeAll(Collection c)
boolean containsAll(Collection c)
boolean retainAll(Collection c)
Iterator(迭代器)接口中的定义的方法可以帮我们去遍历集合中的元素。
Iterator接口隐藏底层集合的数据结构,向客户程序提供了遍历各种类型的集合的统一方法。Iterator接口中声明方法:
(1)hasNext():判断集合中的元素是否遍历完毕,如没有,就返回true;
(2)next(): 返回下一个元素;
(3)remove(): 从集合中删除上一个由next()方法返回的元素;
import java.util.*;
public class Visitor {
public static void print(Collection c) {
Iterator it = c.iterator();
while(it.hasNext()) {
Object element = it.next();
System.out.println(element);
}
}
public static void main(String args[]) {
Set set = new HashSet();
set.add("Tom");
set.add("Mary");
set.add("Jack");
print(set);
List list = new ArrayList();
list.add("Linda");
list.add("Mary");
list.add("Rose");
print(list);
Map map = new HashMap();
map.put("M","男");
map.put("F","女");
print(map.entrySet());
}
}