一、概念:
容器是Java API所提供的一系列类,其实例用于在程序中存放对象。
二、容器类的结构关系图:
三、具体讲解
容器类就是存放对象的地方,不同的接口,类就像不同的瓶子一样,装的东西也不太一样,下面我们来具体对每一种接口都进行一下讲解。
1)Collection接口
概念:Collection接口定义了存取一组对象的方法,其子类接口Set和List分别定义了不同的存储方式。
1.1Set接口
Set中的数据对象没有顺序且不可以重复,即“无序唯一”。
它的实现类有很多,我们只讲解其中的HashSet,TreeSet。
HashSet: 为快速查找而设计的Set。存入HashSet的对象必须定义hashCode()。
TreeSet: 保持次序的Set,底层为树结构。使用它可以从Set中提取有序的序列。
下面我们来举一个HashSet的例子(TreeSet的类似):
例1-1:声明一个Collection类对象c,添加三个元素并单个打印出来
Collection<String> c2 = newHashSet<String>();//如果采用TreeList则直接将HashSet改为TreeList即可。
c2.add("aaa"); c2.add("bbb"); c2.add("ccc"); for(Iterator<String> it = c2.iterator(); it.hasNext(); ) { String s = it.next(); System.out.println(s); }
1.2List接口
List中的数据对象有顺序且可以重复,即“有序不唯一”。
下面我们讲解它的两种实现方式:LinkedList和ArrayList。
LinkedList采用的是链表存放元素,改动元素较快,读取元素较慢,即“改快读慢”。
ArrayList采用的是数组存放元素,读取元素较快,改动元素较慢,即“读快改慢”。
下面我们来举一个ArrayList的例子(LinkedList的类似):
例1-2:同例1-1
List<String> c1 = new ArrayList<String>();//如果采用LinkedList则直接将ArrayList改为LinkedList即可。 c1.add("aaa"); c1.add("bbb"); c1.add("ccc"); for(int i=0; i<c1.size(); i++) { String s = c1.get(i); System.out.println(s); }
在使用Set的过程中我们会常用到接口Iterator接口和Comparable接口。
Iterator接口
概念:所有实现了Collection接口的容器类都有一个iterator方法用以返回一个实现了Iterator接口的对象。
Iterator对象用以实现对容器内元素的遍历操作(参见例1-1)。
Comparable接口
概念:Comparable接口中只有一个方法compareTo(),用以确定类对象的排序方式。
2)Map接口
概念:Map接口定义了存储“键(Key)—值(Value)映射对”的方法。
我们来说一下它的实现类HashMap和TreeMap。
下面我们来举一个HashMap的例子(TreeMap的类似):
例1-2:声明一个Map类型对象,添加元素并打印。
Map c2 = new HashMap();//如果采用TreeMap则直接将HashMap改为TreeMap即可。 c2.put("aaa",1); c2.put("bbb",2); c2.put("ccc",3); System.out.println(c2);
小结:
Hash即“哈希表”,所以带有Hash的都是采用哈希表的形式来存储数据的,比如HashSet,HashMap;
Linked即“链表”,因此带有Linked的都是采用链表的形式存储数据的,比如LinkedList。