WEB开发网
开发学院软件开发Java 关于 Java Collections API 您不知道的 5 件事,第... 阅读

关于 Java Collections API 您不知道的 5 件事,第 1 部分:定制和扩展 Java Collections

 2010-05-27 00:00:00 来源:WEB开发网   
核心提示: 编写这个新接口的实现简直不值一提:清单 6. ArraySortedCollectionimportjava.util.*;publicclassArraySortedCollection<E>implementsSortedCollection<E>,Iterable&

编写这个新接口的实现简直不值一提:

清单 6. ArraySortedCollection

import java.util.*; 
 
public class ArraySortedCollection<E> 
  implements SortedCollection<E>, Iterable<E> 
{ 
  private Comparator<E> comparator; 
  private ArrayList<E> list; 
     
  public ArraySortedCollection(Comparator<E> c) 
  { 
    this.list = new ArrayList<E>(); 
    this.comparator = c; 
  } 
  public ArraySortedCollection(Collection<? extends E> src, Comparator<E> c) 
  { 
    this.list = new ArrayList<E>(src); 
    this.comparator = c; 
    sortThis(); 
  } 
 
  public Comparator<E> getComparator() { return comparator; } 
  public void setComparator(Comparator<E> cmp) { comparator = cmp; sortThis(); } 
   
  public boolean add(E e) 
  { boolean r = list.add(e); sortThis(); return r; } 
  public boolean addAll(Collection<? extends E> ec) 
  { boolean r = list.addAll(ec); sortThis(); return r; } 
  public boolean remove(Object o) 
  { boolean r = list.remove(o); sortThis(); return r; } 
  public boolean removeAll(Collection<?> c) 
  { boolean r = list.removeAll(c); sortThis(); return r; } 
  public boolean retainAll(Collection<?> ec) 
  { boolean r = list.retainAll(ec); sortThis(); return r; } 
   
  public void clear() { list.clear(); } 
  public boolean contains(Object o) { return list.contains(o); } 
  public boolean containsAll(Collection <?> c) { return list.containsAll(c); } 
  public boolean isEmpty() { return list.isEmpty(); } 
  public Iterator<E> iterator() { return list.iterator(); } 
  public int size() { return list.size(); } 
  public Object[] toArray() { return list.toArray(); } 
  public <T> T[] toArray(T[] a) { return list.toArray(a); } 
   
  public boolean equals(Object o) 
  { 
    if (o == this) 
      return true; 
     
    if (o instanceof ArraySortedCollection) 
    { 
      ArraySortedCollection<E> rhs = (ArraySortedCollection<E>)o; 
      return this.list.equals(rhs.list); 
    } 
     
    return false; 
  } 
  public int hashCode() 
  { 
    return list.hashCode(); 
  } 
  public String toString() 
  { 
    return list.toString(); 
  } 
   
  private void sortThis() 
  { 
    Collections.sort(list, comparator); 
  } 
}

这个实现非常简陋,编写时并没有考虑优化,显然还需要进行重构。但关键是 Java Collections API 从来无意将与集合相关的任何东西定死。它总是需要扩展,同时也鼓励扩展。

当然,有些扩展比较复杂,例如 java.util.concurrent 中引入的扩展。但是另一些则非常简单,只需编写一个定制算法,或者已有 Collection 类的简单的扩展。

扩展 Java Collections API 看上去很难,但是一旦开始着手,您会发现远不如想象的那样难。

结束语

和 Java Serialization 一样,Java Collections API 还有很多角落等待有人去探索 —正因为如此,我们还不准备结束这个话题。在 5 件事 系列 的下一篇文章中,将可以看到用 Java Collections API 做更多事情的 5 种新的方式。

本文示例源代码或素材下载

上一页  1 2 3 4 5 6 

Tags:关于 Java Collections

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接