Java早期版本只给集合类库提供了很少的一组类,但是随着Java版本的升级,Java集合类库越来越充实。集合类库里面存放的,是各式各样的数据容器,我们基本都学过数据结构这门课,数据结构所讲的就是ADT(抽象数据模型)的部分,数据结构不是针对于某一门语言,它所讲的通常是对各语言都通用的ADT部分,ADT和具体实现是没有关系的。但是根据教材、根据各专业的不同,各专业会选用使用不同编程语言实现的教材。而我们所讲的,就是如何使用Java数据容器,即Java集合(用Java实现的ADT),具体的实现部分,我将在算法与数据结构中进行阐述。
我们在知道如何使用它们之前,首先要对他们的原理有大致的了解。
Java集合类库将接口和实现分离。首先,看一下Queue队列是怎么分离的。
interface Queue<E>
{
void add (E element);
E remove();
int size();
}
Queue<E> 是泛型方面的内容,我将在下一篇JavaSE的总结中给出。现阶段只需要明白,Queue<String> 代表的就是在该队列中只能存放String类型的对象,泛型进行了类型限定的作用。将接口与实现分离,是现代程序设计的有效的解耦方式之一。
在Java类库中,集合类的基本接口是Collection,而Collection接口又继承了iterator接口
public interface iterator<E>
{
E next();
boolean hasNext();
void remove();
} public interface Iterable<E>
{
Iterator<E> iterator();
} public interface Collection<E> extends iterable<E>
{
boolean add(E element);
Iterator<E> iterator();
//..
}
所有实现了iterable接口的类,都代表着该类是“可迭代的”,可以调用该类的iterator()方法,返回该类的迭代器,通过调用迭代器的next()方法来遍历该类。
值得注意的是,当遍历到最后一个元素时,如果继续调用next()方法,将会抛出一个异常:NoSuchElementException,因此我们通常是这么调用的:
Collection<String> c = ....;
Iterator<String> it = c.iterator();
while(it.hasNext)
{
String s = it.next();
do something with s;
}
还有一点就是, 从JavaSE1.6开始所有实现iterable接口的类都可以使用一种加强型的for循环:
for(String s: c)
{
do something with s;
}
看到这里也许你会发现,Java类库中提供了这些接口及其实现,但是如果我们需要自己实现一个Queue,那岂不是很麻烦?
实际上Java类库设计了一组抽象类,AbstractCollection等等,实际的实现者无需实现所有的例行方法,大大减轻了负担。
Java集合类库中的集合主要分为以下几种:
1.List(表)
2.Set(集)
3.Map(图…对翻译无力吐槽,我更喜欢称之为映射)
Set
Set接口继承于Collection接口,它没有提供额外的方法,但实现了Set接口的集合类中的元素是无序且不可重复。
特征:无序且不可重复。
List
List接口同样也继承于Collection接口,但是与Set接口恰恰相反,List接口的集合类中的元素是对象有序且可重复。
特征:有序且可重复。
两个重要的实现类:ArrayList和LinkedList
1.ArrayList特点是有序可重复的
2.LinkedList是一个双向链表结构的。
Map
Map也是接口,但没有继承Collection接口。该接口描述了从不重复的键到值的映射。Map接口用于维护键/值对(key/value pairs)。
特征:它描述了从不重复的键到值的映射。
两个重要的实现类:HashMap和TreeMap
1.HashMap,中文叫散列表,基于哈希表实现,特点就是键值对的映射关系。一个key对应一个Value。HashMap中元素的排列顺序是不固定的。更加适合于对元素进行插入、删除和定位。
2.TreeMap,基于红黑书实现。TreeMap中的元素保持着某种固定的顺序。更加适合于对元素的顺序遍历。
Collections算法类:
Collections是一个算法类,提供一系列静态方法,实现对集合的查找、排序、替换、线程安全化等操作,具体的可以参考以下:
http://www.360doc.com/content/14/0829/10/15242507_405537400.shtml