Java常見集合的歸納總結

jopen 9年前發布 | 25K 次閱讀 集合 Java開發

Java常見集合的歸納總結



首先來看看集合的關系:

Collection
├List
│├LinkedList
│├ArrayList
│└Vector
│ └Stack
└Set
Map
├Hashtable
├HashMap
└WeakHashMap


一、Collection接口中定義的方法

int size():獲取當前集合中的元素數量


boolean isEmpty():查看當前集合中是否包含元素

不包含返回true

檢查當前集合是否為空集


boolean contains(Object o):

查看當前集合中是否包含給定的元素


void clear():清空集合


boolean add(E e):向集合中添加元素

當元素成功添加到集合中返回true


boolean remove(Object o):從集合中刪除給定的元素


boolean addAll(Collection c):

將給定集合中的所有元素添加到當前集合


boolean removeAll(Collection c):

刪除當前集合中與給定集合中相同的元素


Iterator iterator():

獲取迭代

二、List接口

1)ArrayList

1.ArrayList集合是有序的,可重復的集合,可以根據下表來取元素(下表從0開始)

2.常用方法有:

add() 增加元素

set() 修改元素的值

remove() 刪除元素

indexOf() 第一個對應元素的下標

lastIndexOf() 最后一個對應元素的下標

subList(int a,int b) 取子集(操作子集會影響原集合) 下標前包含后不包含[a,b) List中的獨有方法

toArray() 集合轉化成數組(Arrays.toString(array)是顯示該數組的方法)

2.遍歷集合的統一方式:

import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;

/**
 * 遍歷集合的統一方式
 * 迭代器模式
 * @author admin
 *
 */
public class IteratorDemo {
    public static void main(String[] args) {
        Collection c = new ArrayList();
        c.add("one");
        c.add("two");
        c.add("three");

        //java.util.Iterator
        /*
         * Iterator不能實例化(接口)
         * 不同的集合提供了可以遍歷自身元素的迭代器實現
         */
        Iterator it = c.iterator();
        /*
         * 使用迭代器遍歷集合的步驟
         * 問取刪
         * 刪不是必須的操作
         */
        //問問集合是否還有元素可以遍歷
        while(it.hasNext()){
            //取出這個元素
            Object element = it.next();
            //每次調用next()方法前都應先確保hasNext()為true
//          element = it.next();
            System.out.println(element);
        }

    }
}


2)LinkedList

1.Queue接口定義了隊列存取元素的基本方法,基于LinkedList的實現原理,它非常適合隊列的特性。

隊列,遵循先進先出原則.

1>.Queue常用方法

offer() 向隊列末尾追加新元素

poll() 獲取隊首元素,獲取后該元素就從隊列中被刪除

peek() 獲取隊首元素,但不從隊列中刪除


2.Deque 雙端隊列,兩端都可以進出隊但當我們約束從隊列的一端進出隊時,就形成了另一種存取模式

先進后出原則,這就是棧結構

1>.Deue常用方法

push() 壓入元素

pop() “彈出"棧頂元素(注意,當棧中沒有元素的時候pop方法會引發異常)


三、Map接口

Map中的key不允許重復。

1)HashMap 一個多行兩列的表格存儲元素以 key-value對的形式,散列算法實現的Map。

1>常用方法:

put() 存放元素

toString() HashMap重寫了toString(),格式為{key1=value1,key2=value2,....}

get(key) 取對應key值的元素的值

boolean containsKey(Object k) 查看當前Map中是否包含給定的key

boolean containsValue(Object v) 查看當前Map中是否包含給定的value


4>HashMap的遍歷


public class IterateMapDemo {
    public static void main(String[] args) {
        Map<Integer,String> map 
            = new HashMap<Integer,String>();

        map.put(1, "一");
        map.put(2, "二");
        map.put(3, "三");
        map.put(4, "四");
        map.put(5, "五");

        /*
         * 獲取Map中所有的key
         * Set keySet()
         * 獲取一個Set集合,該集合中存放當前Map中的所有key
         */
        Set<Integer> keys = map.keySet();

        for(Integer key : keys){
            System.out.println("key:"+ key);
        }

        /*
         * 遍歷每組鍵值對
         * Map中每組鍵值對,使用一個Entry實例保存的
         * Set entrySet()
         * 獲取一個Set集合,其中每一個元素是一個Entry的
         * 實例,而每一個Entry的實例都包含著兩個內容
         * 分別是key與value
         */
        //java.util.Map.Entry
        Set<Entry<Integer,String>> entrySet 
                                    = map.entrySet();

        for( Entry<Integer,String> entry : entrySet ){

            System.out.println(
                "key:" + entry.getKey() + "," +
                "value:" + entry.getValue()
            );

        }

        /*
         *  Collection values()
         *  遍歷所有的value,這個操作很少用
         */
        Collection<String> values = map.values();
        for(String value : values){
            System.out.println("value:" + value);
        }

    }




3>HashMap關于性能的幾個名詞

Capacity 容量: Hashmap中數組的長度

Initial capacity 初始容量:創建HashMap時,

數組的默認大小,16。


size 大小:HashMap中的元素數量


load factor 加載因子:默認值0.75

是一個比值 size/capacity


每當size/capacity達到加載因子時,數組擴容

并且對原數組中的數據重新進行散列算法并存入

擴容后的數組中


四、Set集合的實現類

1)HashSet

使用散列算法實現的

存放元素的順序與元素在集合中的順序不一致 但是元素在不改變的情況下,在集合中的順序是一致 的

Set集合的不重復的集合。

1>.HashSet常用方法

add() 添加元素

remove() 刪除元素

注意:a.一般循環遍歷的時候刪除Set集合使用用迭代器的remove()方法,不能直接調用 Set.remove(e)否則會報異常.

b:存放元素時是根據元素的hashcode()方法的返回值進行的,所以要保證equals方法 為ture的元素應具有相同的hashcode

c:盡可能不要在元素存入集合后修改該元素的內容防止hashcode值發生變化導致不 能正確訪問

1)TreeSet

使用二叉樹實現的


五、集合的排序

1)ArrayList排序

使用集合的工具類 Collections.sort(list)方法做自然排序。


2)實現Comparator接口

import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;

/*
 * Comparable接口與Comparator接口
 */
public class ComparableDemo {
    public static void main(String[] args) {
        //實現該類后,子類是可比較的
        Comparable c;
        /*
         * 當我們需要排序的元素自身已經實現了Comparable
         * 接口,并且定義好了比較規則,但這種比較規則不能
         * 滿足我們對于排序的需求是,我們就需要提供一種
         * 額外的比較規則,這時候我們就需要使用Comparator
         */
        List<String> list = new ArrayList<String>();        
        list.add("Killer");
        list.add("adam");
        list.add("cark");
        list.add("marry");
        list.add("Boss");
        list.add("Jazz");
        list.add("jason");
        list.add("mark");
        list.add("bill");       
        System.out.println(list);       
        Collections.sort(list);     
        System.out.println(list);       
        /*
         * 不能夠滿足我們的希求,我們希望字母少的在前
         * 字母多的在后
         */
        MyComparator comparator = new MyComparator();
        /*
         * 使用Collections的重載sort方法
         */
        Collections.sort(list, comparator);
        System.out.println(list);   
    }
}
/**
 * 為字符串提供額外的比較規則
 * @author admin
 *
 */
class MyComparator implements Comparator<String>{
    /**
     * 根據字符串的長度進行比較
     */
    public int compare(String o1, String o2) {
        return o2.length() - o1.length();
    }   
}

來自:http://seabiscuit-1992.iteye.com/blog/2174656

 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!