处理集合Collection的Java开源工具包,Commons Collections 4.0 发布

jopen 11年前

Apache Commons Collections是一个用来处理集合Collection的开源工具包,比如你可以用来将一个对象拷贝多份并存放到一个Bag对象中(这个看来没有多大用处),得到两个集合里相同的元素,删除一个集合里的元素并返回删除的元素,还有除了通过一个集合里的key得到value外,还可以通过value 得到key,也就是说这个集合里的value是唯一的,另外还可以将一个集合里的key和value值对调,得到一个集合里的某一key之后的另一个 key值等等。

官方网址是:http://commons.apache.org/collections/
使用示例:

/**    * 通过Iterator遍历得到一个map里的key和value    */    private static void testHashedMap(){    IterableMap map = new HashedMap();    map.put("a","1");    map.put("b",new Integer(2));    MapIterator it = map.mapIterator();    while (it.hasNext()) {    Object key = it.next();    Object value = it.getValue();    System.out.println(">>key>>"+key+">>value>>"+value);    }    }         /**    * 得到集合里按顺序存放的key之后的某一Key    */    private static void testLinkedMap(){    OrderedMap map = new LinkedMap();    map.put("FIVE", "5");    map.put("SIX", "6");    map.put("SEVEN", "7");    map.firstKey();  // returns "FIVE"    map.nextKey("FIVE");  // returns "SIX"    map.nextKey("SIX");  // returns "SEVEN"    System.out.println(map.firstKey()+">>"+map.nextKey("FIVE")+">>"+map.nextKey("SIX"));    }         /**    * 通过key得到value    * 通过value得到key    * 将map里的key和value对调    */    private static void testTreeBidiMap(){    BidiMap bidi = new TreeBidiMap();    bidi.put("SIX", "6");    bidi.get("SIX");  // returns "6"    bidi.getKey("6");  // returns "SIX"    //     bidi.removeValue("6");  // removes the mapping    BidiMap inverse = bidi.inverseBidiMap();  // returns a map with keys and values swapped    System.out.println(inverse);    }         /**    * 移除集合某一元素并返回移除的元素    */    private static void testUnboundedFifoBuffer(){    Buffer buffer = new UnboundedFifoBuffer();    buffer.add("ONE");    buffer.add("TWO");    buffer.add("THREE");    System.out.println(buffer.remove());  // removes and returns the next in order, "ONE" as this is a FIFO    System.out.println(buffer.remove());  // removes and returns the next in order, "TWO" as this is a FIFO    System.out.println(buffer);    }         /**    * 得到两个集合中相同的元素    */    private static void testCollectionUtilsRetainAll(){    List<String> list1 = new ArrayList<String>();    list1.add("1");    list1.add("2");    list1.add("3");         List<String> list2 = new ArrayList<String>();    list2.add("2");    list2.add("3");    list2.add("5");    Collection c = CollectionUtils.retainAll(list1, list2);    System.out.println(c);    }         /**    * 复制多个对象保存到Bag对象中    */    private static void testHashBag(){    Bag bag = new HashBag();    bag.add("ONE", 6);  // add 6 copies of "ONE"    bag.remove("ONE", 2);  // removes 2 copies of "ONE"    System.out.println(bag.getCount("ONE"));  // returns 4, the number of copies in the bag (6 - 2)    for (Iterator ite = bag.iterator();ite.hasNext();){    System.out.println(ite.next());    }    }         /**    * @param args    */    public static void main(String[] args) {    //     testLinkedMap();    //     testTreeBidiMap();    testUnboundedFifoBuffer();    //     testHashBag();    //     testCollectionUtilsRetainAll();    }

Apache Commons Collections 4.0 发布,主要改进内容包括:

  • 要求 Java 5 支持
  • 源码和二进制不兼容 3.x 版本
  • 使用了泛型以及 Java 5 的其他语言特性,如可变参数和迭代
  • 移除了废弃的类和方法,这些类和方法已经被新的 JDK 所支持
  • 使用 java.util.Queue 替代 Buffer 接口
  • Added concept of split maps with respective interfaces Put / Get (see also package splitmap)
  • Added new Trie interface together with an implementation of a Patricia Trie

完整的改进记录请看:

http://commons.apache.org/collections/changes-report.html
https://dist.apache.org/repos/dist/release/commons/collections/RELEASE-NOTES.txt