程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> JAVA綜合教程 >> 【Java學習筆記】集合框架Ⅱ,java學習筆記

【Java學習筆記】集合框架Ⅱ,java學習筆記

編輯:JAVA綜合教程

【Java學習筆記】集合框架Ⅱ,java學習筆記


迭代

    ●迭代是取出集合中元素的一種方式。

    ●因為Collection中有iterator方法,所以每一個子類集合對象都具備迭代器。

    ●用法:

第一種

for (iterator iter=iterator(); iter.hasNext();)  //老外比較喜歡用這種,省內存(iter的內存),開發時用這個
{
   System.out.println(iter.next());      
 }

第二種

Iterator iter = l.iterator();
while(iter.hasNext())
{
     System.out.println(iter.next());
}

迭代注意事項

    ●迭代器在Collection接口中是通用的,它替代了Vector類中的Enumeration(枚舉)。

    ●迭代器的next方法是自動向下取元素,要避免出現NoSuchElementException。

    ●迭代器的next方法返回值類型是Object,所以要記得類型轉換。

 

集合框架中的常用接口

    Collection接口有兩個子接口:List(列表),Set(集)

    List:可以存放重復元素,元素存取是有序的(存入和取出的順序一致)。

    Set:不可以存放重復元素,元素存取是無序的。

List接口

    List特有的常見方法:有一個共同特點就是都可以操作角標。

    1、添加

        void   add(int index , E element);

         void    add(int index , Collection<? extends E> c);

       boolean  addAll(int index , Collection<? extends E> c);

      

 1 import java.util.ArrayList;
 2 
 3 public class Test {
 4 
 5     public static void main(String[] args) {
 6         ArrayList al = new ArrayList();
 7         al.add("dfsdf");
 8         al.add("ere");
 9         al.add("fgf");
10         
11         ArrayList a2 = new ArrayList();
12         a2.add("dfsdf");
13         a2.add("ere");
14         a2.add("fgf");
15         
16         
17         al.addAll(1, a2);
18         
19         System.out.println(al);
20         
21         al.add(1, a2);
22         System.out.println(al);
23 
24     }
25 
26 }

 

    2、刪除:

        E  remove(int index);

    3、修改:

        E  set(int index, E element);

    4、獲取:

        E  get(int index);

        int  indexOf(Object o);

        int  lastIndexOf(Object o);

        List  subList(from , to); //不包尾

 

List集合是可以完成對元素的增刪改查。

List子接口:

    Vector:內部是數組數據結構,是同步的。增刪,查詢都很慢。

    ArrayList:內部是數組數據結構,是不同步的。替代了Vector。查詢的速度快。

    LinkedList:內部是鏈表數據結構,是不同步的,增刪元素的速度很快。

LinkedList常用方法:

    void  addFirst(E e);

    void  addLast(E e);

    jdk1.6

    boolean  offerFirst(E e);

    boolean  offerLast(E e);

    

 

    E    getFirst();   //獲取但不移除,如果鏈表為空,拋出NoSuchElementException

    E    getLast();

    jdk1.6

    E   peekFirst();  //獲取但不移除,如果鏈表為空,返回null。

    E   peekLast();

 

    E  removeFirst(); //獲取但不移除,如果鏈表為空,拋出NoSuchElementException

    E  removeLast();

    jdk1.6

    E  pollFirst();  //獲取但不移除,如果鏈表為空,返回null。

    E  pollLast();

 

Set接口:

      元素不可以重復,是無序的。

      Set接口中的方法和Collection一致。

Set子接口:

                 HashSet:

          內部數據結構是哈希表,是不同步的。

          

                               如何保證集合的元素唯一性呢?

            是通過對象的hashCode和equals方法來完成對象的唯一性的。

              如果對象hashCode值不同,那麼不用判斷equals方法,就直接存儲到哈希表中。

             如果對象的hashCode值相同,那麼要再次判斷對象的equals方法是否為true。

                如果為true,視為相同元素,不存。如果為false,那麼視為不同元素,就進行存儲。

 

         記住:如果元素要存儲到HashSet集合中,必須覆蓋hashCode方法和equals方法。

         一般情況下,如果定義的類會產生很多對象,比如人,學生,書,通常都需要覆蓋hashCode,equals方法。

 

      TreeSet:

          可以對Set集合中的元素進行排序,是不同步的。

          判斷元素唯一性的方式:就是根據比較方法的返回結果是否是0,是0,就是相同元素,不存。

 

            TreeSet對元素進行排序的方式一:

                   讓元素自身具備比較功能,元素就需要實現Comparable接口,覆蓋ComparaTo方法。

 

            如果不要按照對象中具備的自然順序進行排序,如果對象中不具備自然排序,怎麼辦?

                  那就使用方式二。

            方式二:

                  讓集合自身具備比較功能,定義一個類實現Comparator接口,覆蓋compare方法。

                   將該對象作為參數傳遞給TreeSet集合的構造函數。

 

集合的一些技巧

    需要唯一性嗎?

      需要:Set

          需要制定順序嗎?

 

              需要:TreeSet

 

              不需要:HashSet

 

              但是想要一個和存儲一致的順序(有序):LinkedHashSet

 

      不需要:List

        需要頻繁增刪嗎?

          需要:LinkedList

          不需要:ArrayList

 

    如何記住每一個容器的結構和所屬體系呢?

      看名字!!!

     List

      --ArrayList

      --LinkedList

    Set

      --HashSet

      --TreeSet

    後綴名就是該集合所屬的體系。

    前綴名就是該集合的數據結構。

 

    看到array:就要想到數組,就要想到查詢快,有角標。

    看到link:就要想到鏈表,就要想到增刪快,就要想到 add/get/remove +   First/Last的方法。

    看到hash:就要想到哈希表,就要想到唯一性,就要想到元素需要覆蓋hashCode和equals方法。

    看到tree:就要想到二叉樹,就要想到排序,就要想到兩個接口Comparable,Comparator。

 

    而且通常這些常用的集合容器都是不同步的。

 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved