一、数据结构的接口
在Java中所有类的鼻祖是Object类,但是所有有关数据结构处理的鼻祖就是Collection和Iterator接口,也就是集合与遍历。
1、Collection接口
Collection c = new Xx(); // c可以称为Collection接口回调对象,虽然它被声明为Collection类型,但是实例化时实现的是接口的实现类Xx。它的方法也是用来操作实现类的对象。
- <span style="white-space:pre"> </span>//下面是Collection接口的一些常用方法
- boolean add(Object obj);
- boolean addAll(Collection c);
- boolean contains(Object o);
- boolean containsAll(Collection c);
- boolean isEmpty();
- int size();
- void clear();
- <span style="white-space:pre"> </span>Xx xx = new Xx();
- Iterator iterator = xx.iterator();
- //下面是Iterator接口的一些常用方法
- boolean hasNext();//判断迭代是否到达了集合末尾
- Object next();//返回迭代的下一个元素
- void remove();//移除迭代指向的最后一个元素
java数据结构库还提供了一个Iterator的子接口——ListIterator,可以实现将元素插入指定位置和逆向遍历等操作。详细查阅API。
二、数据结构的几个重要的类
1、链表(LinkedList)
解决了数组删除元素开销大的问题,但是查询元素需要从链表头遍历。每个元素有两个指针,next指向下一个元素,previous指向上一个元素。LinkedList类实现了Collection接口。
2、数组列表类(ArrayList)
数组列表可以根据程序运行时的需求动态的伸缩。ArrayList类实现了Collection接口。
3、哈希表(Hashtable)
通过散列码存取,实现快速查询特定元素的数据结构。以键—值的形式存储元素,必须保证键是唯一的,值可以不唯一。
- <span style="white-space:pre"> </span>//构造器
- Hashtable(int initialCapacity, float loadFactor)
- //initialCapacity 表示初始化容量 缺省值为 11
- //loadFactor 表示装填因子 缺省值为0.75
- //主要方法
- Object put(Object key, Object value);
- //加入一个元素
- //返回此哈希表中指定键的以前的值,如果不存在该值,则返回 null
- Object get(Object key);//返回此哈希表中指定键的值
- boolean containsKey(Object key);
- boolean containsValue(Object key);
- Object remove(Object key);//删除指定键元素,返回指定键映射的值
- Collection values();//返回此表所包含元素的集合
与哈希表类似,只是Hashtable实现的是Set接口,而HashSet实现的是Map接口还有Collection接口。
构造方法的默认初始容量是 16,加载因子是 0.75。
另外很重要的一点是哈希表是线性同步的,而哈希集是非线性同步的。
5、树集(TreeSet)
有序的数据结构。
a、构造器: TreeSet()
此时,向树集添加字符串对象,因为它已经实现了Comparable接口,compareTo方法是按字典序比较字符串的。所以树集元素按字典序排列,当然也可以定义自己的排序方法:
- class Student implements Comparable
- {
- public int compareTo(Object other)
- {
- <span style="white-space:pre"> </span>//具体实现
- }
- }
此时,可以通过实现Comparator接口中的compare方法,定义自己的比较方法。
- class StudentComparator implements Comparator
- {
- public compare(Object a, Object b)
- {
- //具体实现
- }
- }
- StudentComparator comp = new StudentComparator();
- TreeSet set = new TreeSet(comp);