天天看點

Java精選筆記_集合概述(Collection接口、Collections工具類、Arrays工具類)

集合概述

    集合有時又稱為容器,簡單地說,它是一個對象,能将具有相同性質的多個元素彙聚成一個整體。集合被用于存儲、擷取、操縱和傳輸聚合的資料。

使用集合的技巧

看到Array就是數組結構,有角标,查詢速度很快。 

看到link就是連結清單結構:增删速度快,而且有特有方法。addFirst; addLast;removeFirst(); removeLast(); getFirst();getLast(); 

看到hash就是哈希表,就要想到哈希值,就要想到唯一性,就要想到存入到該結構的中的元素必須覆寫hashCode,equals方法。 

看到tree就是二叉樹,就要想到排序,就要想到用到比較。

比較的兩種方式

    一個是Comparable:覆寫compareTo方法; 一個是Comparator:覆寫compare方法。

LinkedHashSet,LinkedHashMap:這兩個集合可以保證哈希表有存入順序和取出順序一緻,保證哈希表有序。

集合什麼時候用

    當存儲的是一個元素時,就用Collection。

    當存儲對象之間存在着映射關系時,就使用Map集合。 

    保證唯一,就用Set。不保證唯一,就用List。

集合按照其存儲結構可以分為兩大類,即單列集合Collection和雙列集合Map

Collection:單列集合類的根接口,用于存儲一系列符合某種規則的元素,它有兩個重要的子接口,分别是List和Set。其中,List的特點是元素有序、元素可重複。Set的特點是元素無序并且不可重複。List接口的主要實作類有ArrayList和LinkedList,Set接口的主要實作類有HashSet和TreeSet。

Map:雙列集合類的根接口,用于存儲具有鍵(Key)、值(Value)映射關系的元素,每個元素都包含一對鍵值,在使用Map集合時可以通過指定的Key找到對應的Value,例如根據一個學生的學号就可以找到對應的學生。Map接口的主要實作類有HashMap和TreeMap。

Collection接口

    Collection是所有單列集合的父接口,是以在Collection中定義了單列集合(List和Set)通用的一些方法,這些方法可用于操作所有的單列集合。

public interface Collection<E> extends Iterable<E>

E可以為任何類

常用方法

    boolean add(E obj)                  将指定對象obj新增至集合内,增加成功傳回true,否則傳回false

    boolean addAll(Collection c)    将指定集合c内所有元素新增至集合内,增加成功傳回true,否則傳回false

    viod clear()                               将集合内所有元素清空

    boolean isEmpty()                    檢查集合内是否沒有任何元素,如果是傳回true,否則傳回false

    Iterator iterator()                       将集合内的元素資訊轉存成Iterator對象

    boolean remove(Object obj)     将指定元素obj從集合内移除,成功移除傳回true,否則傳回false

    int size()                                    将集合内的元素總數傳回

    Object[] toArray()                      将集合内的元素轉存到數組後傳回該數組

Collection實作類

    AbstractCollection                實作大多數Collection接口

    AbstractList                          擴充AbstractCollection并實作大多數List接口

    AbstractSequentialList         為了被類集使用而擴充AbstractList,該類集是連續而不是用随機方式通路其元素

    LinkedList                             通過擴充AbstractSequentialList來實作連接配接表

    ArrayList                               通過擴充AbstractList來實作動态數組

    AbstractSet                          擴充AbstractCollection并實作大多數AbstractSet

    HashSet                               為了使用散清單而擴充AbstractSet

    TreeSet                                實作存儲在樹中的一個集合,擴充擴充AbstractSet

Collections工具類

    它的出現給集合操作提供了更多的功能。這個類不需要建立對象,内部提供的都是靜态方法。

靜态方法

      Collections.sort(list);                                           list集合進行元素的自然順序排序。

      Collections.sort(list,new ComparatorByLen());   按指定的比較器方法排序。

class ComparatorByLen implements Comparator<String> {

    public int compare(String s1,String s2) {

        int temp = s1.length()-s2.length();

        return temp==0

        s1.compareTo(s2):temp;

    }

}

        Collections.binarySearch();                                折半查找

        Collections.max(list);                                          傳回list中字典順序最大的元素。

        int index = Collections.binarySearch(list,"zz");    二分查找,傳回角标。必須是有序的

        Collections.fill();                                                  可以将list集合中的所有元素替換成指定元素。

        Collections.repalceAll(list,"要被替換的","替換的值");         可以将list集合中的指定元素替換成指定元素。

        Collections.reverse();                                          反轉

        Collections.reverseOrder(參數是比較器);           逆向反轉排序。倒序。

        Collections.shuffle(list);                                     随機對list中的元素進行位置的置換。

Collection 和 Collections的差別

Collections是個java.util下的類,是針對集合類的一個工具類,提供一系列靜态方法,實作對集合的查找、排序、替換、線程安全化(将非同步的集合轉換成同步的)等操作。

Collection是個java.util下的接口,它是各種集合結構的父接口,繼承于它的接口主要有Set和List,提供了關于集合的一些操作,如插入、删除、判斷一個元素是否其成員、周遊等。

Arrays工具類

用于操作數組對象的工具類,裡面都是靜态方法。 

1、使用Arrays的sort()方法排序

2、使用Arrays的binarySearch(Object[] a, Object key)方法查找元素

3、使用Arrays的copyOfRange(int[] original, int from, int to)方法拷貝元素

      将數組中指定範圍的元素複制到一個新的數組中,該方法中參數original表示被複制的數組,from表示被複制元素的初始索引(包括),to表示被複制元素的最後索引(不包括)

4.使用Arrays的fill(Object[] a, Object val)方法填充元素

      該方法可以将指定的值賦給數組中的每一個元素

5.使用Arrays的toString(int[] arr)方法把數組轉換為字元串

      該方法并不是對Object類toString()方法的重寫,隻是用于傳回指定數組的字元串形式

數組轉換成list集合

String[] arr = {"abc","kk","qq"}; 

List<String> list = Arrays.asList(arr);        //将arr數組轉成list集合。 

好處:可以通過list集合中的方法來操作數組中的元素:isEmpty()、contains、indexOf、set; 

注意(局限性):數組是固定長度,不可以使用集合對象增加或者删除等,會改變數組長度的功能方法。比如add、remove、clear。(會報不支援操作異常UnsupportedOperationException);

如果數組中存儲的是引用資料類型,直接作為集合的元素可以直接用集合方法操作。

如果數組中存儲的是基本資料類型,asList會将數組實體作為集合元素存在。

集合變數組

用的是Collection接口中的方法:toArray(); 

如果給toArray傳遞的指定類型的資料長度小于了集合的size,那麼toArray方法,會自定再建立一個該類型的資料,長度為集合的size。

如果傳遞的指定的類型的數組的長度大于了集合的size,那麼toArray方法,就不會建立新數組,直接使用該數組即可,并将集合中的元素存儲到數組中,其他為存儲元素的位置預設值null。 

是以,在傳遞指定類型數組時,最好的方式就是指定的長度和size相等的數組。