Java集合框架
接口:
java.util
接口 Set<E>
类型参数:
E - 此 set 所维护元素的类型
所有超级接口:
Collection<E>, Iterable<E>
所有已知子接口:
NavigableSet<E>,SortedSet<E>
所有已知实现类:
AbstractSet, ConcurrentSkipListSet,CopyOnWriteArraySet,EnumSet,HashSet,JobStateReasons,LinkedHashSet,TreeSet
public interface Set<E> extendsCollection<E>
一个不包含重复元素的 collection。更确切地讲,set不包含满足 e1.equals(e2)的元素对 e1和 e2,并且最多包含一个 null元素。正如其名称所暗示的,此接口模仿了数学上的set 抽象。
java.util
接口 SortedSet<E>
类型参数:
E - 此 set维护的元素的类型
所有超级接口:
Collection<E>,Iterable<E>,Set<E>
所有已知子接口:
NavigableSet<E>
所有已知实现类:
ConcurrentSkipListSet,TreeSet
public interface SortedSet<E> extendsSet<E>
进一步提供关于元素的总体排序的 Set。这些元素使用其自然顺序进行排序,或者根据通常在创建有序 set时提供的Comparator进行排序。该 set的迭代器将按元素升序遍历 set。提供了一些附加的操作来利用这种排序。(此接口是SortedMap的 set对应接口)。
插入有序 set 的所有元素都必须实现 Comparable接口(或者被指定的比较器所接受)。
java.util
接口 List<E>
所有超级接口:
Collection<E>,Iterable<E>
所有已知实现类:
AbstractList,AbstractSequentialList,ArrayList, AttributeList, CopyOnWriteArrayList,LinkedList,RoleList,RoleUnresolvedList, Stack, Vector
public interface List<E> extendsCollection<E>
有序的 collection(也称为序列)。此接口的用户可以对列表中每个元素的插入位置进行精确地控制。用户可以根据元素的整数索引(在列表中的位置)访问元素,并搜索列表中的元素。
与 set 不同,列表通常允许重复的元素。
java.util
接口 Map<K,V>
类型参数:
K - 此映射所维护的键的类型
V - 映射值的类型
所有已知子接口:
Bindings,ConcurrentMap<K,V>,ConcurrentNavigableMap<K,V>, LogicalMessageContext,MessageContext,NavigableMap<K,V>, SOAPMessageContext,SortedMap<K,V>
所有已知实现类:
AbstractMap,Attributes,AuthProvider, ConcurrentHashMap,ConcurrentSkipListMap,EnumMap, HashMap,Hashtable,IdentityHashMap,LinkedHashMap, PrinterStateReasons,Properties, Provider, RenderingHints, SimpleBindings, TabularDataSupport,TreeMap,UIDefaults, WeakHashMap
public interface Map<K,V>
将键映射到值的对象。一个映射不能包含重复的键;每个键最多只能映射到一个值。
java.util
接口 SortedMap<K,V>
类型参数:
K - 此映射所维护的键的类型
V - 映射值的类型
所有超级接口:
Map<K,V>
所有已知子接口:
ConcurrentNavigableMap<K,V>,NavigableMap<K,V>
所有已知实现类:
ConcurrentSkipListMap,TreeMap
public interface SortedMap<K,V> extendsMap<K,V>
进一步提供关于键的总体排序的 Map。该映射是根据其键的自然顺序进行排序的,或者根据通常在创建有序映射时提供的Comparator进行排序。对有序映射的 collection 视图(由 entrySet、keySet和 values方法返回)进行迭代时,此顺序就会反映出来。要采用此排序方式,还需要提供一些其他操作(此接口是SortedSet的对应映射)。
插入有序映射的所有键都必须实现 Comparable 接口(或者被指定的比较器接受)。
实现List接口的类:
ArrayList:效率高、不直接支持并发,多用于查询。ArrayList的实质就是一个会自动增长的数组,它是用封装的数组来实现的List接口的,底层用数组实现。随着向ArrayList中不断添加元素,其容量会自动增长。
LinkedList:增删快、查找慢,故多用于插入和删除。List接口的链接列表实现。实现所有可选的列表操作,并且允许所有元素(包括 null)。除了实现 List接口外,LinkedList 类还为在列表的开头及结尾 get、remove和 insert元素提供了统一的命名方法。这些操作允许将链接列表用作堆栈、队列或双端队列。
Vector:可以实现可增长的对象数组。与数组一样,它包含可以使用整数索引进行访问的组件。但是,Vector的大小可以根据需要增大或缩小,以适应创建 Vector后进行添加或移除项的操作。
实现Set接口的类:
HashSet:此类实现 Set接口,由哈希表支持(实际上是一个 HashMap实例,Key-null类型的HashMap)。它不保证 set的迭代顺序;特别是它不保证该顺序恒久不变。此类允许使用 null元素。
实现Set子接口SortedSet的类:
TreeSet: 基于TreeMap的 NavigableSet实现。使用元素的自然顺序对元素进行排序,或者根据创建 set时提供的Comparator进行排序,具体取决于使用的构造方法。
如果要正确实现 Set 接口,则 set维护的顺序(无论是否提供了显式比较器)必须与 equals一致。
另一常用构造方法:public TreeSet(Comparator<? superE> comparator)
构造一个新的空 TreeSet,它根据指定比较器进行排序。
E - 此 set 所维护元素的类型 ; Comparator中要传对象的类型是 E的父类
<?extends E>:传e的子类
类型参数:T
-可以与此对象进行比较的那些对象的类型
public interface Comparable<T>
此接口强行对实现它的每个类的对象进行整体排序。这种排序被称为类的自然排序,类的 compareTo方法被称为它的自然比较方法。
一个实现此接口的方法:int compareTo(T o)
比较此对象与指定对象的顺序。如果该对象小于、等于或大于指定对象,则分别返回负整数、零或正整数。
java.util 接口Comparator<T>
类型参数:
T - 此 Comparator可以比较的对象类型
所有已知实现类:
Collator,RuleBasedCollator
public interface Comparator<T>
强行对某个对象 collection 进行整体排序的比较函数。可以将 Comparator传递给 sort方法(如Collections.sort 或 Arrays.sort),从而允许在排序顺序上实现精确控制。还可以使用 Comparator来控制某些数据结构(如有序 set或有序映射)的顺序,或者为那些没有自然顺序的对象 collection 提供排序。
当且仅当对于一组元素 S 中的每个 e1和 e2而言,c.compare(e1, e2)==0与 e1.equals(e2)具有相等的布尔值时,Comparator c强行对 S进行的排序才叫做与 equals一致的排序。
必须覆写:int compare(T o1, T o2) 比较用来排序的两个参数。
实现Map接口的类:
HashMap<K,V>:基于哈希表的 Map接口的实现。此实现提供所有可选的映射操作,并允许使用 null值和 null键。(除了非同步和允许使用 null之外,HashMap类与 Hashtable大致相同。)此类不保证映射的顺序,特别是它不保证该顺序恒久不变。
Hashtable<K,V> :此类实现一个哈希表,该哈希表将键映射到相应的值。任何非 null对象都可以用作键或值。
为了成功地在哈希表中存储和获取对象,用作键的对象必须实现 hashCode 方法和 equals 方法。
实现Map子接口SortedMap的类:
TreeMap<K,V>:基于红黑树(Red-Black tree)的NavigableMap实现。该映射根据其键的自然顺序进行排序,或者根据创建映射时提供的Comparator进行排序,具体取决于使用的构造方法。