Collection是集合类的上级接口,继承与他的接口主要有Set 和List.
Collections是针对集合类的一个帮助类,他提供一系列静态方法实现对各种集合的搜索、排序、线程安全化等操作。
Java类库中用于集合类的基本接口是Collection接口。Collection接口扩展自Iterable接口,因此,可以在任何集合类中使用for each循环。
publicinterface Iterable<T> {
Iterator<T> iterator();
}
publicinterface Collection<E> extends Iterable<E>
Collection和Iterator是泛型接口,任何集合都可以使用其方法。Collection接口中的方法:
public static <E> boolean contains(Collection<E> c, Object obj)
{
for (E element : c)
if (element.equals(obj))
return true;
return false;
}
iterator方法返回一个实现了Iterator接口的对象。
publicinterface Iterator<E> {
boolean hasNext();
E next();
void remove();
}
Java集合类库将接口与实现分离,Queue
publicabstractclass AbstractCollection<E> implements Collection<E>
一个集合类可以从AbstractCollection类扩展
除了Map结尾的类,其他类都实现了Collection接口。
ArrayList动态数组
ArrayList的内部实现是基于内部数组Object[],所以从概念上讲,它更像数组,但LinkedList的内部实现是基于一组连接的记录,所以,它更像一个链表结构。
在ArrayList的前面或中间插入数据时,必须将其后的所有数据相应的后移,这样必然要花费较多时间,所以,当你的操作是在一列数据的后面添加数据而不是在前面或中间,并且需要随机地访问其中的元素时,使用ArrayList会提供比较好的性能;
而访问链表中的某个元素时,就必须从链表的一端开始沿着连接方向一个一个元素地去查找,直到找到所需的元素为止,所以,当你的操作是在一列数据的前面或中间添加或删除数据,并且按照顺序访问其中的元素时,就应该使用LinkedList了。
如果在编程中,两种情形交替出现,这时,可以考虑使用List这样的通用接口,而不用关心具体的实现,在具体的情形下,它的性能由具体的实现来保证。
Java中每个链表实际上是双重链表。链表是有序的。List接口和实现了该接口的LinkedList类。
interface ListIterator<E> extends Iterator<E>
ListIterator中的add方法,添加元素在迭代器之前,remove方法删除上一个被访问的元素。Set方法取代使用next或previous方法最后访问的元素。
ArrayList封装了一个动态重新分配的数组。
Vector类的所有方法都是同步的。可以用两个线程安全地访问Vector对象。代码会在同步操作上浪费相当多的时间。ArrayList类的方法不是同步的。
hashCode()方法必须和equals方法相兼容。如果a.equals(b)为ture,则a和b必有相同的散列码。散列吗是通过对象实例字段产生的整数。
TreeSet是一个有序集合,插入时可以是任意顺序,输出时为排序后的顺序。红黑树。默认情况下,TreeSet假设你插入的元素实现了Comparable接口。
publicinterface Comparable<T> {
publicint compareTo(T o);
}
PriorityQueue是一种能够在以任意顺序插入元素后,再按排序顺序读取这些元素的数据结构。优先级队列和TreeSet一样,其所持有的元素可以是实现了Comparable接口的类的对象,也可以是在构造器中提供的Comparator对象。
HashMap和TreeMap都实现了Map接口,映射表用于存放键/值对。
HashSet类,实现了基于散列表的散列集。不存在重复元素的集合。
散列映射表用于对键进行散列,树状映射表对于键的全局顺序进行排序,并组成搜索树。
框架就是一个类集合,它形成了创建高级功能的基础。框架包含许多超类,这些超类拥有非常有用的功能、策略和机制。框架用户建立的子类可以扩展类的功能,而不是重新创建基本的机制。
两个用于集合的基本接口,Collection和Map。
Set接口和Collection接口,Set不允许有重复元素。List接口提供随机访问的方法,ArrayList和LiknkedList的访问算法效率是不同的。