ITPub博客

首页 > 应用开发 > Java > 总结一下java里的Collections

总结一下java里的Collections

原创 Java 作者:duwei880505 时间:2014-01-27 15:02:41 0 删除 编辑

java 的集合类包含两部分,一部分是实现了接口Collection的类,另一部分是实现了接口Map的类.注意虽然后者没有实现Collection接口,但是它们都是Collections(不是Collection)的一部分.
下面的内容基于jdk1.5以上.其中用到了泛型.
下面之所以列出它们的方法,是为了让大家了解一下它们的规律
先看实现了Collection的类.
它的方法主要可以分为:1.添加,删除 2.查询 3.其他
1.添加,删除: boolean add(Object),boolean addAll(Collection)
       boolean remove(Object) ,boolean removeAll(Collection),boolean retainAll(Collection),void clear()
2.查询. 查询操作不能直接进行,而只能通过Iterator来操作.方法iterator()用来返回一个作为内部类实现的Iterator.用返回的这个Iterator的hasNext()和next()来进行查询集合里的内容.
3. 其他 有查询大小的size(),有将集合转换为数组的Object[] toArray()和 T[] toArray(T[]),还有从Object类继承过来的equals()和hashCode(),还有判断是不是空的 isEmpty(),boolean contains(Object o),boolean containsAll(Collection c) 
总共15个方法

1.再来看它的子接口List
List的主要特点(这些特点是相对于 Collection的另一子接口Set来说的)是它可以存放重复的元素,而且里面的元素是按序存放的.基于这些特 点,List除了上面从Collection继承过来的方法以外,还增加了以下根据索引添加删除的方法:
add(int index,Object),addAll(int index,Collection c)
remove(int index)
因为有了索引,所以查询可以直接进行,而不必通过Iterator了
get(int index),set(int index,E element)
indexOf(Object) lastIndexOf(Object)
ListIterator listIterator(),ListIterator listIterator(int index)
 ListIterator相对于Iterator来说,多了从后往前遍历的功能.所以它又多了previous(),hasPrevious()两个主要方法.另外还有
 nextIndex()和previousIndex();以及set(E o),remove();
List subList(int fromIndex, int toIndex)
再来看实现了List的类
1.1 ArrayList
它在List的基础上增加了以下方法:
void ensuerCapacity( int minCapacity )
void trimToSize()
Object clone()
protected void removeRange(int from, int to)
ArrayList的特点(相对于下面要说到的其他List实现类)是元素在里面是按添加的顺序存放的
1.2 LinkedList
它和ArrayList一样,元素在里面是按添加的顺序存放的.在随机获得元素方面相对慢一点,而在添加删除元素方面,它比ArrayList要快.因为它有以下的方法:
void addFirst(Object),void addLast(Object),E removeFirst(),E removeLast()
E getFirst(),E getLast()
 E element() 找到但不移除此列表的头(第一个元素)。
 E peek()  找到但不移除此列表的头(第一个元素)。
 E poll()  找到并移除此列表的头(第一个元素)。
 boolean offer(E o)  将指定元素添加到此列表的末尾(最后一个元素)。
1.3 Vector
这 个还是和上面两个类有着同样的特点,即可以存放重复的元素,元素在里面是按添加的顺序存放的.不同的是,这个类的实现是线程安全的.在修改,移除,添加和 获取元素四种操作上,它在LinkedList的基础上(但它不是LinkedList的子类.这里说在"它的基础 上",只是因为它们的方法有很多的相似)增加了一些方法,这些方法在名字,参数顺序和返回值都不同,但是功能是一样的
修改:void setElementAt(E,int index)[E set(int index,E o)]
移除:void removeElementAt(int index)[E remove(int index)]
添加:void insertElementAt(E, int index)[E add(int index,E o)]
void addElement(E o)
boolean removeElement(Object)
void removeAllElements()
获取:
E elementAt(int index)[E get(int index)]
 E firstElement() ,E lastElement()
方括号里的是List里定义的方法
以上三个类都有一个无参的和一个以Collection c为参数的构造函数

List还有其他一些实现类,这里就不说了.
下面来看Set
Set的特点和数学上的集合一样,不可以存放重复的元素,这也是它和List的不同.它和List的另一个不同是,它的实现类大多以有序的方式存放元素,而不是以添加元素的顺序存放.
Set的方法都是从它的父接口Collection继承过来的
下面来看它的实现类
2.1 HashSet
它按元素的hashCode()来对元素进行降排序之后进行有序存放
它的方法都是在接口Set里的
2.1.1 LinkedHashSet
如果要按添加顺序存放元素,就可以用这个类.LinkedHashSet是HashSet的子类
2.2 SortedSet
这是一个接口,不是一个类.它的功能是,可以通过Comparator类或Comparable接口自定义元素的存放顺序.
它的方法除了从父接口继承过来的以外,还有:
Comparator comparator()
E first(),E last()
SortedSet headSet(E toElement),SortedSet tailSet(E fromElement)
SortedSet subSet(E toElement,E fromElement)
2.2.1 TreeSet
SortedSet的实现类,它的方法都是从接口SortedSet继承过来的
2.3 EnumSet
这是一个和枚举类型一起使用的专用的Set的实现类
它没有构造函数,而且它的所有方法都是static的.
它的方法有:
> EnumSet allOf( Class elementType )
> EnumSet noneOf( Class elementType )
> EnumSet complementOf( EnumSet enumSet )
> EnumSet copyOf( EnumSet enumSet )
> EnumSet copyOf( Collection c )
> EnumSet of( E e)
> EnumSet of( E e1,E e2)
> EnumSet of(E first, E... rest)
> EnumSet  range(E from, E to)

Collection的子接口和实现类到此告一段落,现在来看Map
Map的功能是实现从键到值的映射.和Set一样,它不可以包含重复的键(键所映射的值可以相同)
它的方法有:
添加:
V put(K key,V value)
void putAll(Map t) 
删除:
V remove(Object key),void clear() 
查询:
V get(Object key) 
与Collection的转换:
Set keySet() ,Collection values()
注意前面说过,它不能包含重复的键,而键所映射的值可以相同.所以这里对键返回没有重复元素的Set接口,而对value返回可以有重复元素的Collection
Set> entrySet()
 一个Map.Entry类实例代表着一个键值映射 .它的方法有:
 boolean equals(Object o)
  K getKey()
  V getValue()
 int hashCode()
 V setValue(V value)
Map的其他方法:
boolean containsKey(Object key) ,boolean containsValue(Object value) 
boolean equals(),int hashCode(),boolean isEmpty()
int size()

下面来看Map的实现类
1.1 HashMap
它对应于HashSet,特点也一样,就是元素的存放顺序是按键值的降序存放的
它的方法都是从Map继承过来的
1.1.1 LinkedHashMap
它对应于LinkedHashSet,特点也是元素是按添加顺序存放的
1.2 SortedMap
它对应于SortedSet,通过Comparator类或Comparable接口自定义元素的存放顺序.
方法也和SortedSet一样,基本上只要将方法里的set换成map就行了,如下:
Comparator comparator()
K firstKey(),K lastKey()
SortedMap headMap(K toKey),SortedMap tailSet(K fromKey)
SortedMap subMap(K toKey,E fromKey)
1.2.1 TreeMap
对应于TreeSet,SortedMap的实现类,它的方法都是从接口SortedMap继承过来的
1.3 EnumMap,V>
主要的特点是,它的键必须是某一枚举类型的元素

Map还有很多的其他实现类,这里就不说了

另外还有两个类要注意: Collections类和Arrays类
这里只说一下Arrays类:
它主要用于对数组进行操作.它的方法都是static的,它有几大类的方法
1.查找
int binarySearch(T[] a,T valueToFind)
其中T可以是任何原生类型或类类型
另外,还可以指定比较器,
int binarySearch(T[] a, T key, Comparator c)
2.填充
对数组进行填充
void fill(T[] a,T value)
其中T可以是任何原生类型或类类型
还可以指定填充范围
void fill(T[] a, int fromIndex, int toIndex, T val)
3.比较两数组是否包含完全一样的元素
boolean equals(T[] a,T[] b )
4.对数组进行排序
void sort( T[] a )
void sort( T[] a ,int fromIndex, int toIndex)
void sort( T[] a ,Comparator c)
void sort( T[] a ,int fromIndex, int toIndex,Comparator c)
其中T可以是任何原生类型
5.将数组转换为字符串
String toStrint(T[] a)
其中T可以是任何原生类型
6.将数组转换为List
List asList(T... a)

在我的博客的其他文章里,有对上面讲到的部分内容进行举例.

=======================================
欢迎指正,欢迎评论,欢迎交流 

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/29445577/viewspace-1075914/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2014-01-16

  • 博文量
    7
  • 访问量
    36066