隨筆 - 37  文章 - 29  trackbacks - 0


          常用鏈接

          留言簿(3)

          隨筆分類

          隨筆檔案

          最新評論

          閱讀排行榜

          評論排行榜


          下面是我自己畫的,關(guān)系畫得沒上面好,但我自己看著清楚些



          還有一張下載來的:




          有序否

          允許元素重復(fù)否

          Collection

          List

          Set

          AbstractSet

          HashSet

          TreeSet

          是(用二叉樹排序)

          Map

          AbstractMap

          使用key-value來映射和存儲數(shù)據(jù),Key必須惟一,value可以重復(fù)

          HashMap

          TreeMap

          是(用二叉樹排序)



          幾個面試常見問題:
          1.Q:ArrayList和Vector有什么區(qū)別?HashMap和HashTable有什么區(qū)別?
             A:Vector和HashTable是線程同步的(synchronized)。性能上,ArrayList和HashMap分別比Vector和Hashtable要好。

          2.Q:大致講解java集合的體系結(jié)構(gòu)
             A:List、Set、Map是這個集合體系中最主要的三個接口。
                其中List和Set繼承自Collection接口。
                Set不允許元素重復(fù)。HashSet和TreeSet是兩個主要的實(shí)現(xiàn)類。
                List有序且允許元素重復(fù)。ArrayList、LinkedList和Vector是三個主要的實(shí)現(xiàn)類。
                Map也屬于集合系統(tǒng),但和Collection接口不同。Map是key對value的映射集合,其中key列就是一個集合。key不能重復(fù),但是value可以重復(fù)。HashMap、TreeMap和Hashtable是三個主要的實(shí)現(xiàn)類。
                SortedSet和SortedMap接口對元素按指定規(guī)則排序,SortedMap是對key列進(jìn)行排序。

          3.Q:Comparable和Comparator區(qū)別
              A:調(diào)用java.util.Collections.sort(List list)方法來進(jìn)行排序的時候,List內(nèi)的Object都必須實(shí)現(xiàn)了Comparable接口。
                  java.util.Collections.sort(List list,Comparator c),可以臨時聲明一個Comparator 來實(shí)現(xiàn)排序。
                  Collections.sort(imageList, new Comparator() {
                      public int compare(Object a, Object b) {
                          int orderA = Integer.parseInt( ( (Image) a).getSequence());
                          int orderB = Integer.parseInt( ( (Image) b).getSequence());
                          return orderA - orderB;
                     }
                  });
                  如果需要改變排列順序
                  改成return orderb - orderA 即可。

          4.Q:簡述equals()和hashCode()
              A:...不知道。下回分解

          public interface
          Collection
                      extends Iterable


          public interface
          List
                      extends Collection


          public abstract class
          AbstractList
                      extends AbstractCollection
                      implements List


          public class
          Vector
                      extends AbstractList
                      implements List,
                                             RandomAccess,
                                             java.lang.Cloneable,
                                             java.io.Serializable
          基于Array
          是“sychronized


          public class
          ArrayList
                 
          extends AbstractList
                 
          implements List,
                                    RandomAccess,
                                    Cloneable,
                                    java.io.Serializable
          基于Array
          ArrayList非同步的。所以在性能上要比Vector優(yōu)越一些


          public class
          LinkedList
                  extends AbstractSequentialList
                  implements List,
                                    Queue,
                                    Cloneable
          ,
                                    java.io.Serializable
          不基于Array

          基于ArrayListVectorArrayList)適合查詢,而LinkedList(鏈表)適合添加,刪除操作




          List基本上都是以Array為基礎(chǔ)。但是Set則是在HashMap的基礎(chǔ)上來實(shí)現(xiàn)的,這個就是SetList的根本區(qū)別
          public abstract class AbstractSet
              extends AbstractCollection
              implements Set



          public class HashSet
              extends AbstractSet
              implements Set, Cloneable, java.io.Serializable
          HashSet的存儲方式是把HashMap中的Key作為Set的對應(yīng)存儲項(xiàng)


          public class LinkedHashSet
              extends HashSet
              implements Set, Cloneable, java.io.Serializable


          public class TreeSet
              extends AbstractSet
              implements SortedSet, Cloneable, java.io.Serializable
          它是通過SortedMap來實(shí)現(xiàn)的




          public interface Map<K,V>


          public abstract class AbstractMap<K,V>
              implements Map<K,V>


          public class HashMap<K,V>
              extends AbstractMap<K,V>
              implements Map<K,V>, Cloneable, Serializable


          public class TreeMap<K,V>
              extends AbstractMap<K,V>
              implements SortedMap<K,V>, Cloneable, java.io.Serializable

          HashMap通過hashcode對其內(nèi)容進(jìn)行快速查找,而TreeMap中所有的元素都保持著某種固定的順序,如果你需要得到一個有序的結(jié)果你就應(yīng)該使用TreeMap(HashMap中元素的排列順序是不固定的)



          更詳細(xì)的可以看:
          http://www.frontfree.net/view/article_695.html
          http://blog.csdn.net/happyzhm5/archive/2007/03/17/1532101.aspx
          http://blog.csdn.net/Java_apprentice/archive/2007/07/20/1700351.aspx

          解析Java對象的equals()和hashCode()的使用: http://tmsoft.lsxy.com/index.php?id=82&load=read


          posted on 2007-11-12 10:06 EvanLiu 閱讀(116949) 評論(14)  編輯  收藏 所屬分類: Java基礎(chǔ)

          FeedBack:
          # re: JAVA集合小結(jié) 2008-03-23 20:49 礦礦
          不 大 懂
          我是新手!!  回復(fù)  更多評論
            
          # re: JAVA集合小結(jié) 2012-01-04 15:32 11
          AbstractrMap 怎么在Collection中實(shí)現(xiàn)了?  回復(fù)  更多評論
            
          # re: JAVA集合小結(jié) 2012-05-15 21:59 
          很好,謝謝LZ  回復(fù)  更多評論
            
          # re: JAVA集合小結(jié) 2012-07-12 11:48 yaoweijava
          學(xué)習(xí)了  回復(fù)  更多評論
            
          # re: JAVA集合小結(jié) 2012-08-31 15:04 給你評“爛”的人
          爛  回復(fù)  更多評論
            
          # re: JAVA集合小結(jié) 2012-11-27 09:25 雷鋒
          collection是接口,collections是需要實(shí)現(xiàn)的類。你的圖有問題。  回復(fù)  更多評論
            
          # re: JAVA集合小結(jié) 2012-12-04 21:40 鄭濱
          謝謝你  回復(fù)  更多評論
            
          # re: JAVA集合小結(jié)[未登錄] 2013-07-16 14:54 1
          xiexie  回復(fù)  更多評論
            
          # re: JAVA集合小結(jié) 2014-02-27 22:08 sad
          贊!  回復(fù)  更多評論
            
          # re: JAVA集合小結(jié)[未登錄] 2014-08-10 10:44 java
          hascode 相同 equals吧一定相同
          equals相同hascode一定相同
          equals不同hascode不一定不同  回復(fù)  更多評論
            
          # re: JAVA集合小結(jié) 2015-08-19 22:29 樂234
          第二張圖 左上角應(yīng)該是AbstractCollection  回復(fù)  更多評論
            
          # re: JAVA集合小結(jié) 2015-09-16 14:57 12
          你這有部分是不對的,但還是要謝謝你的分享  回復(fù)  更多評論
            
          # re: JAVA集合小結(jié) 2015-09-23 16:04 aldrich
          請問你是用什么軟件畫的圖???  回復(fù)  更多評論
            
          # re: JAVA集合小結(jié) 2016-06-24 09:51 Master
          謝謝分享  回復(fù)  更多評論
            
          主站蜘蛛池模板: 承德市| 砚山县| 乐昌市| 阿坝县| 桐柏县| 枝江市| 紫云| 运城市| 肇东市| 周口市| 肥城市| 青铜峡市| 水富县| 奉节县| 尤溪县| 塔河县| 法库县| 元朗区| 永福县| 娄底市| 建平县| 西吉县| 芜湖县| 额尔古纳市| 临沭县| 庆阳市| 连云港市| 塔城市| 鹤壁市| 资阳市| 岫岩| 沽源县| 高阳县| 长子县| 峡江县| 黄冈市| 临湘市| 揭西县| 若尔盖县| 惠州市| 闽侯县|