1. 程式人生 > >Java中的集合功能整理

Java中的集合功能整理

網上對集合的功能介紹有很多,也很詳細。我在這裡只能是對常用的幾個集合類進行功能的簡單梳理。小白一個。這裡主要參考孫宇霞、王健編著的《Java程式設計從基礎到應用》。內容僅供學習交流。

1.選擇合適的集合類。

      Set:是一個介面,無序集合,不能包含重複元素。同時身為介面不能生成物件。但是類HashSet和TreeSet實現了該介面,所以通常使用的也是這兩個。

      HashSet:該集合中主要存放的一些無序元素。如果你只是想用一個‘罐子’盛東西,其他什麼都不關心,可以選它。

      TreeSet:該集合除了實現Set介面還實現了SortedSet介面。也就是說可以用它來進行一些排序預設升序。當然排序的元素必須具有可比性。也就是說對於基本型別如:Float,         Integer,String,Character等

     List:介面,允許出現重複元素。與Set另一個不同的地方就是元素有序。如果你對加進‘罐子’裡東西很在乎先後。如誰先進去的誰後進去的,第幾個是誰比較關心可以選用。但是同樣。List是個介面我們通常使用的是兩個實現了該介面的兩個類arrayLis和LinkedList。

     ArrayList:支援對元素的快速訪問。但是對插入和刪除支援性差。

    LinkedList: 對元素的插入和刪除效能良好。由於List中元素有序,可以我們不用Iterator物件也可以訪問,不過要先呼叫toArray()方法。才能像操作一個普通陣列一樣訪問。

2.常用類的關係圖。這是一個簡單圖。PS:我保證你能搜到更復雜的。


這裡Collection.Set. List都是介面,知道這層實現關係,這三個介面中的方法,就可以被實現介面的類物件所呼叫。

3.

Collection中的方法:

                                    boolean  add()新增一個元素;boolean addAll( Collection c)新增集合c中所有元素。void clear():清空集合;boolean contain(object o):是否包含元素o。

                                  int size():返回集合中元素個數;boolean isEmpty():是否為空; Object[] toArray():轉變成包含此集合中所有元素的陣列;boolean remove(object o):去除元素o; boolean removeAll(collection c)去除集合中c中所有元素;boolean retainAll(Collection c):僅保留c中所有元素 ;Iterator<E> iterator():返回一個Iterator物件,用於遍歷集合元素。

HashSet:常用方法基本來源於Collection類,見上:

 Set<Integer> iset=new HashSet<Integer>();
    	   iset.add(Integer.valueOf(3));//這裡用了一個封裝類,也可以直接用一個基本資料型別
TreeSet:first():返回集合中第一個元素;last():返回集合中最後一個元素。poolFirst()返回集合中第一個元素然後移除。poolLast():返回最後一個元素然後移除。

           SortedSet<E> subSet(E,F):返回一個新集合,從E到F,但不包含F。

       SortedSet<E> headSet(E):返回一個包含E之前的元素,不包含E;SortedSet<E > tailSet(F)返回F之後元素,包含F。

public static void main(String[] args){
    	   SortedSet<Integer> iset=new TreeSet<Integer>();
    	   Scanner sc=new Scanner(System.in);
    	   System.out.println("請輸入整型:");
    	   for(int i=0;i<4;i++){
    		   System.out.println("請輸入第"+(i+1)+"個數字");
    		   int value=sc.nextInt();
    		   iset.add(value);
    	   }
    	   Iterator<Integer> it=iset.iterator();
    	   while(it.hasNext()){
    		   System.out.println(it.next());
    	   }
    	   
    	   SortedSet<Integer> head_set=iset.headSet(60);
    	   for(int j=0;j<head_set.size();j++){
    		   System.out.println(head_set.toArray()[j]);
    	   }
       }

ArrayList:get(i):獲取第i個元素。int indexOf(object o):返回第一次出現指定元素的下標,沒有則是-1;lastIndexOf(object o):返回最後一次出現指定元素索引,沒有則返回-1;

                         set(index, E,)修改指定索引處元素,並返回之前的元素。 List<E> subList(E,F)返回指定下標之間的元素,不包含後者。

public static void main(String[] args){
    	   List<Integer> iset=new ArrayList<Integer>();
    	   Scanner sc=new Scanner(System.in);
    	   System.out.println("請輸入整型:");
    	   for(int i=0;i<4;i++){
    		   System.out.println("請輸入第"+(i+1)+"個數字");
    		   int value=sc.nextInt();
    		   iset.add(value);
    	   }
    	   Iterator<Integer> it=iset.iterator();
    	   while(it.hasNext()){
    		   System.out.println(it.next());
    	   }
    	   
    	   List<Integer> head_List=iset.subList(0, 2);
    	   for(int j=0;j<head_List.size();j++){
    		   System.out.println(head_List.get(j));//這裡也可以轉變成陣列即呼叫方法toArray()[j]輸出
    	   }
       }
LinekedList: addFirst(O)插入到集合開頭;addLast(O):插入到集合尾部。removeFirst():移除第一個元素;removeLast():移除最後一個元素; getFirst():返回第一個元素;getLast():返回最後一個元素。
public static void main(String[] args){
    	   LinkedList<Integer> iset=new LinkedList<Integer>();
    	   Scanner sc=new Scanner(System.in);
    	   System.out.println("請輸入整型:");
    	   for(int i=0;i<2;i++){
    		   System.out.println("請輸入第"+(i+1)+"個數字");
    		   int value=sc.nextInt();
    		   iset.add(value);
    	   }
    	   iset.addFirst(5);
    	   for(int j=0;j<iset.size();j++){
    		   System.out.println(iset.get(j));//雖然linkedList有序,但是要想像普通陣列一樣操作它。你還得呼叫toArray()方法。
    	   }
    	   
    	   }

            寫到這裡大家應該有了一些淺顯的認識。值得指出的是集合中存放的都是物件的引用值。這就是為什麼前面的例子中會出現Integer.valueof():其實就是把基本資料型別轉變成它的引用。不過現在JDK已經可以自動進行拆裝箱功能,所以即使不寫也沒錯。以上內容多為自己閱讀後隨寫,不當之處敬請留言。相互學習,共同提高。