Java容器API位于Java.util包中,Java.util包包含许多类和接口,包括集合框架。集合框架是一个复杂接口和类的层,提供了管理对象组的优化技术。其中Collection类就是属于集合框架中的一个接口。
Collection接口是允许处理一组对象,它位于集合层次结构的顶部。是构造集合框架的基础,它必须被定义的任意类所实现。
List是有序且可重复的,使用此接口能够精确的控制每个元素插入的位置。用户能够使用索引来访问List中的元素,这类似于Java的数组。
List示意图:
List集合非常像一个数组,它可以记住每次添加元素的顺序,List长度可变。
所有的List中只能容纳单个不同类型的对象组成的表,而不是Key-Value键值对;所有List中可以有相同的元素;可以有Null元素;基于Array的List适合查询,LinkedList适合添加、删除操作。
Set是一种不包含重复的元素的无序Collection。Set实现的基础是Map,如果使用add(Object obj)方法添加已经存在的对象,则会覆盖前面的对象。
Set示意图:
Set 集合类似于一个罐子,把一个对象添加到Set集合时,Set集合无法记住添加这个元素的顺序,所以Set里的元素不能重复,否则系统无法准确识别这个元素。
虽然Set同List都实现了Collection接口,但是他们的实现方式却大不一样。List基本上都是以Array为基础。但是Set则是在HashMap的基础上来实现的,这个就是Set和List的根本区别。HashSet的存储方式是把HashMap中的Key作为Set的对应存储项。因为HashMap的key具有唯一性,所以Set里面存储的数据不能重复。
Map作为一种键值对的形式进行关联的容器。一个键可以与多个键值对应,但是一个键值必须对应一个键,这样就形成了多级映射。对于键来说,像Set一样,一个Map容器中的键不允许重复,为了保持查找结果的一致性。在使用的过程中,只要保持最后一次修改的值与键对应。对于键的要求具有唯一性。
Map示意图:
import java.util.*;
public class TestCollection{
public static void main(String[] args){
//父类引用指向子类对象,可以实现不同类型的对象
Collection c = new ArrayList();
c.add("hello");
c.add(new Name("f1","l1"));
c.add(new Integer(100));
System.out.println(c.size());
System.out.println(c);
}
}
Set中的数据对象没有顺序且不可重复;List中的数据对象有顺序且可重复。重复的意思是这两个对象互相equals若相等就是重复。Map存储键值对,必须保证键的唯一性。
原文:http://blog.csdn.net/liutengteng130/article/details/18942205