首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > 编程 >

Java之集合类施用总结(转)

2013-03-17 
Java之集合类应用总结(转)    Iterator it collection.iterator() // 获得一个迭代子    while(it.hasN

Java之集合类应用总结(转)

    Iterator it = collection.iterator(); // 获得一个迭代子    while(it.hasNext()) {      Object obj = it.next(); // 得到下一个元素    }

  由Collection接口派生的两个接口是List和Set。

1)Collection和Map区别:

  • Collection类型,每个位置只有一个元素。
  • Map类型,持有key-value形式的数据——“键值对”,即其元素是成对的对象。

    2)Collection子接口List和Set区别:

    • List是有序的Collection,确保维护元素特定的顺序,这类似于Java的数组。
    • Set接口不保证维护元素的次序,存入Set的每个元素必须是唯一的。加入Set的Object必须定义equals()方法以确保对象的唯一性。

      3)List实现类ArrayList、LinkedList和Vector区别

      • ArrayList实现了可变大小的数组,允许对元素进行快速随机访问,但是向List中间插入与移除元素的速度很慢(类似动态数组)。它允许所有元素,包括null。ArrayList没有同步。如果数组长度一定,用数组效率更高。
      • LinkedList插入与删除元素开销不大,随机访问相比则相对较慢(类似链表)。可当堆栈、队列和双向队列使用。?
      • Vector是同步的。当一个Iterator被创建而且正在被使用,另一个线程改变了Vector的状态,这时将抛出ConcurrentModificationException异常,因此必须捕获该异常。比ArrayList慢。
      • Stack继承自Vector,实现一个后进先出的堆栈。同步的。

        4)Set实现类HashSet和TreeSet区别

        • HashSet为快速查找而设计的Set(采用散列函数)。存入HashSet的对象必须定义hashCode()。?它不保证集合的迭代顺序;特别是它不保证该顺序恒久不变。此类允许使用?null元素。此实现不是同步的。
        • TreeSet保持次序的Set,底层为红黑树。使用它可以从Set中提取有序的序列。?
        • LinkedHashSet: 具有HashSet的查询速度,且内部使用链表维护元素的顺序(哈希函数+链表)。于是在使用迭代器遍历Set时,结果会按元素插入的次序显示。?

          5)Map实现类Hashtable、HashMap和WeakHashMap

          • Hashtable是同步的,不允许null。继承于陈旧的Dictionary类的。
          • HashMap是非同步的,速度比Hashtable快。允许null。HashMap继承于AbstractMap类。内部Hash数组等于Hashtable不同。Map 中插入、删除和定位元素,HashMap 是最好的选择。
          • WeakHashMap是一种改进的HashMap,若一个key不再被外部所引用,那么该key可以被GC回收。
          • TreeMap中所有元素都保持固定的顺序,如果需有序的结果你就应该使用TreeMap(HashMap中元素的排列顺序是不固定的)。

            3 总结

            • 容器对象仅能持有对象引用(对象的指针),而不是将对象信息Copy一根至数列末位置。
            • 在多线程环境下,对于非同步的结合和Map,可以用类似List list = Collections.synchronizedList(new LinkedList(...));或?Collections.synchronizedMap(originMap)?实现其同步,或者其他手动同步的方法。
            • Map提供的不是对象与数组的关联,而是对象和对象的关联。
            • Set只接受不重复的对象。HashSet提供了最快的查询速度。而TreeSet则保持元素有序。LinkedHashSet保持元素的插入顺序。
            • 没必要再在新代码里使用旧类库留下来的Vector,Hashtable和Stack了。

热点排行