Terry.Li-彬

          虛其心,可解天下之問;專其心,可治天下之學;靜其心,可悟天下之理;恒其心,可成天下之業。

            BlogJava :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理 ::
            143 隨筆 :: 344 文章 :: 130 評論 :: 0 Trackbacks

          Java提供了數種持有對象的方式,包括語言內置的Array,還有就是utilities中提供的容器類(container classes),又稱群集類(collection classes)。集合在java中非常重要,在討論之前,先來看幾個面試中的經典問題。
          1 Collection
          Collections的區別。
          2 List, Set, Map
          是否繼承自Collection接口。
          3 ArrayList
          Vector的區別。
          4 HashMap
          Hashtable的區別。
          篇尾有答案,我們開始正題。

          集合Collection接口
          --Collection
          是任何對象組,元素各自獨立,通常擁有相同的套用規則。Set List由它派生。
          基本操作 增加元素add(Object obj); addAll(Collection c); 
          刪除元素 remove(Object obj);  removeAll(Collection c);
          求交集 retainAll(Collection c);

          訪問/遍歷集合元素的好辦法是使用Iterator接口(迭代器用于取代Enumeration)
          Public interface Iterator{
            Public Boolean hasNext(0;
          Public Object next(0;
          Public void remove(0;
          }

          set
          --
          沒有重復項目的集合
          有三種特定類型的集可用
          HashSet-
          基于散列表的集,加進散列表的元素要實現hashCode()方法
          LinkedHashSet-
          對集迭代時,按增加順序返回元素
          TreeSet-
          基于(平衡)樹的數據結構

          清單List
          --
          位置性集合。加進清單的元素可以加在清單中特定位置或加到末尾
          有兩個特定版本
          ArrayList(
          數組表)-類似于Vector,都用于縮放數組維護集合。區別:
          .同步性:Vector是線程安全的,也就是說是同步的,而ArrayList是線程序不安全的,不是同步的
          .數據增長:當需要增長時,Vector默認增長為原來一培,而ArrayList卻是原來的一半
          LinkedList(
          鏈表)-是雙向鏈表,每個節點都有兩個指針指向上一節點和下一節點。
          用在FIFO,用addList()加入元素 removeFirst()刪除元素
          用在FILO,addFirst()/removeLast()
          ListIterator
          提供雙向遍歷next() previous(),可刪除、替換、增加元素

          映射表Map
          --
          用于關鍵字/數值對,像個Dictionary
          處理Map的三種集合
          關鍵字集KeySet()
          數值集value()
          項目集enrySet()
          四個具體版本
          HashMap-
          散列表的通用映射表
          LinkedHashMap-
          擴展HashMap,對返回集合迭代時,維護插入順序
          WeakHashMap-
          基于弱引用散列表的映射表,如果不保持映射表外的關鍵字的引用,則內存回收程序會回收它
          TreeMap-
          基于平衡樹的映射表

          Collections類,用于同步集合,還能改變集合只讀方式的類
          e.g.:
          Map mp=new HashMap()
          mp=Collections.synchronizedMap(mp); //
          生成線程安全的映射表
          mp=Collections.unmodifiableMap(mp); //
          生成只讀映射表

          Comparable 自然順序的排序類  Comparator 面向樹的集合排序類

          容器分類學(Container taxonomy)
          集合接口: Collection List Set;Map Iterator ListIterator
          抽象類: AbstractCollection AbstractList AbstractSet AbstractMap AbstractSequentiaList
          Implementations
          Hash TableResizable ArrayBalanced TreeLinked List
          InterfacesSetHashSetTreeSet
          ListArrayListLinkedList
          MapHashMapTreeMap

           

          老版本中的集合類型
          Vector

          Vector
          ,就是向量。一種異構的混合體,可以動態增加容量。對它的操作簡要如下
          比如我們有一個Vector: Vector myVec=new Vector(a_Array.length)
          取得vector的長度:myVec.size();
          賦值:set(int position,Object obj) / setElementAt(Object obj, int position) –不支持動態增長
                add(Object obj )/ addElement(Object obj)
          Vector末尾加入對象
          e.g.
          myVec.add(new a_Array[0]);
          取出元素:get(int position) / getElement(int position)

          Stack
          Vector的子類。就是數據結構里講濫了的堆棧(這個詞可簡稱棧,不要混淆于heap-堆)。后進先出的存取方式。
          Stack()
          構造空棧
          Empty()
          叛空
          Search()
          檢查堆棧是否有元素
          Peek()
          取得棧頂元素
          Pop()
          彈棧
          Push()
          入棧

          Enumeration接口

          Dictionary
          字典。關鍵字/數值方式存取數據,如果映射沒有此關鍵字,取回null

          Hashtable
          Dictionary結構的具體實現。

          面試題答案
          Collection
          Collections的區別。
          Collections
          是個java.util下的類,它包含有各種有關集合操作的靜態方法。
          Collection
          是個java.util下的接口,它是各種集合結構的父接口。
          List, Set, Map
          是否繼承自Collection接口? List,Set  Map不是
          ArrayList
          Vector的區別。
          .同步性:Vector是線程安全的,也就是說是同步的,而ArrayList是線程序不安全的,不是同步的
          .數據增長:當需要增長時,Vector默認增長為原來一培,而ArrayList卻是原來的一半
          HashMap
          Hashtable的區別
          .歷史原因:Hashtable是基于陳舊的Dictionary類的,HashMapJava 1.2引進的Map接口的一個實現
          .同步性:Hashtable是線程安全的,也就是說是同步的,而HashMap是線程序不安全的,不是同步的
          .值:只有HashMap可以讓你將空值作為一個表的條目的keyvalue

          posted on 2007-11-24 15:06 禮物 閱讀(218) 評論(0)  編輯  收藏

          只有注冊用戶登錄后才能發表評論。

          網站導航:
           
          主站蜘蛛池模板: 大英县| 肇庆市| 林西县| 阿图什市| 吴川市| 营口市| 句容市| 和政县| 闵行区| 四川省| 福州市| 彝良县| 靖宇县| 仁怀市| 辉南县| 印江| 东至县| 汝城县| 甘肃省| 萍乡市| 凤翔县| 和龙市| 扬州市| 体育| 郑州市| 汝州市| 江油市| 读书| 诏安县| 礼泉县| 乌拉特前旗| 项城市| 长治县| 呈贡县| 土默特左旗| 铁岭市| 洛浦县| 常宁市| 景洪市| 涞水县| 自治县|