1. 程式人生 > >JAVA通幽(二)容器類

JAVA通幽(二)容器類

前言

       本章將講解集合的基本概念

基礎

1.陣列的優劣

優勢:是一種簡單的線性序列,可以快速的訪問陣列元素,效率高。如果從效率和型別檢查的角度講,陣列是最好的。

劣勢:不靈活。陣列的容量需要事先定義好,無法隨著需求的變化而擴容。

2.容器類

綜上所述,我們需要一個更為強大的容器來儲存所需要的資料物件集合,基本容器類如下所示:

 為了更好的學習容器,這裡先行說一下泛型的概念:

泛型是jdk1.5之後新增加的特性,它可以幫助我們建立型別安全的集合,在使用了泛型的集合中,遍歷無需進行強制轉換,泛型簡單的理解就是標記本集合存放的資料型別。如 LIst<String> list = new ArrayList<String>();

定義集合中<String>就是一個泛型,它告訴編譯器,我宣告的LIst集合存放的是String型別的物件。

3.Collection容器類的常用方法(ArrayList為例)

Collection集合的介面有兩個子介面(List和Set),基本方法大致相同,這裡我們以List的一個實現類:ArrayList進行講解

  • public boolean add(E e):表示向集合中按順序新增元素
  • public void add(int index,E element):表示向集合指定索引處新增元素,使用該方法注意陣列越界(0=<index<=集合長度),還需要注意的是,向同一索引處新增不同的值,最後一個語句的值才能真正新增至指定索引,其他值從尾部向上排列顯示
  • public boolean addAll(Collection<? extends E> c):表示向集合中新增另外一個集合,需注意型別一致或繼承關係
  • public boolean addAll(int index,Collection<? extends E> c):表示向集合指定索引處中新增另外一個集合,注意陣列越界

  • public void clear():表示清空該集合,移除所有元素。

  • public boolean contains(Object o):判斷集合中是否包含某個元素,底層需元素物件的equals方法支援

  • public int indexOf(Object o):從前往後判斷物件在集合中的索引位置,底層需元素物件equals方法支援
  • public int lastIndexOf(Object o):從後往前判斷物件在集合中的索引位置,底層需元素物件equals方法支援

  •  public E get(int index):表示從集合中獲取指定索引的元素,注意陣列越界;該方法Set實現類中沒有

  • public E set(int index,E element):替換某個下標位置的元素值

  • public boolean isEmpty():判斷集合是否為空,即size()為0
  • public int size():返回集合的長度值

 

  • public E remove(int index):表示從集合中移除某個索引下的元素
  • public boolean remove(Object o):表示從集合中移除某個元素

4.Map容器類的常用方法(HashMap為例) 

Map集合,儲存的是鍵值對,即key:value的形式如{1=aa, 2=bb},這裡我們以Map的一個實現類:HashMap進行講解

  • public V put(K key,V value):用於向Map集合中加入元素,以key-value形式儲存

  • public V get(Object key):獲取Map集合中指定key的value值

  • public Set<K> keySet():用於獲取Map集合中的key值集合,該集合為Set型別

  •  public Set<Map.Entry<K,V>> entrySet():獲取Map物件的鍵值對集合,該集合為Set型別

要點:

1.List和Set的區別

  • Set其中的值不允許重複,無序的資料結構
  • List其中的值允許重複,因為其為有序的資料結構

2.ArrayList和LinkedList的區別

  • ArrayList是實現了基於動態陣列的資料結構,LinkedList基於連結串列的資料結構
  • 對於隨機訪問get和set,ArrayList覺得優於LinkedList,因為LinkedList要移動指標
  • 對於新增和刪除操作add和remove,LinedList比較佔優勢,因為ArrayList要移動資料

3.HashSet和TreeSet的區別 

  • TreeSet 是二差樹實現的,Treeset中的資料是自動排好序的,不允許放入null值。 
  • HashSet 是雜湊表實現的,HashSet中的資料是無序的,可以放入null,但只能放入一個null,兩者中的值都不能重複,就如資料庫中唯一約束。 
  • HashSet要求放入的物件必須實現HashCode()方法,放入的物件,是以hashcode碼作為標識的,而具有相同內容的 String物件,hashcode是一樣,所以放入的內容不能重複。但是同一個類的物件可以放入不同的例項 。

4.HashMap和Hashtable的區別

  • HashMap中鍵值 允許為空 並且是非同步的
  • Hashtable中鍵值 不允許為空 是同步的
  • 繼承不同,但都實現了Map介面