Java提升學習(七):Java集合類、迭代器

Java提升學習(七):Java集合類、迭代器

一、Java集合類

(一)集合的概念

Java提供了一種類,這種類相當於容器,可存儲一系列對象,統稱爲集合。
集合與數組相近,但區分於數組

  • 數組的長度是固定的。集合的長度是可變的。
  • 數組中存儲的是同一類型的元素,可以存儲基本數據類型值。集合存儲的都是對象。而且對象的類型可以不 一致。在開發中一般當對象多的時候,使用集合進行存儲。

(二)Collection接口

Collection:單列集合類的根接口,用於存儲一系列符合某種規則的元素,它有兩個重要的子接口,分別是 java.util.Listjava.util.Set 。其中, List 的特點是元素有序、元素可重複。 Set 的特點是元素無序,而且不可重複。 List 接口的主要實現類有 java.util.ArrayListjava.util.LinkedListSet 接口 的主要實現類有 java.util.HashSetjava.util.TreeSet
在這裏插入圖片描述
可以說Collection接口是最基本的集合類接口,在定義Collection中,定義了單列集合(List和Set)通用的一些方法。

方法 描述
public boolean add(E e) 把給定的對象添加到當前集合中
public void clear() 清空集合中所有的元素
public boolean remove(E e) 把給定的對象在當前集合中刪除
public boolean contains(E e) 判斷當前集合中是否包含給定的對象
public boolean isEmpty() 判斷當前集合是否爲空
public int size() 返回集合中元素的個數
public Object[] toArray() 把集合中的元素,存儲到數組中

(三)List集合

java.util.List 接口繼承自 Collection 接口,是單列集合的一個重要分支,習慣性地會將實現了 List 接口的對 象稱爲List集合。在List集合中允許出現重複的元素,所有的元素是以一種線性方式進行存儲的,在程序中可以通過 索引來訪問集合中的指定元素。另外,List集合還有一個特點就是元素有序,即元素的存入順序和取出順序一致。

  • 元素存取有序的集合,怎麼入怎麼出
  • 帶有索引的集合,通過索引就可以訪問元素
  • 元素可重複

List中的常用方法:

方法 描述
public void add(int index, E element) 將指定的元素,添加到該集合中的指定位置上
public E get(int index) :返回集合中指定位置的元素
public E remove(int index) 移除列表中指定位置的元素, 返回的是被移除的元素
public E set(int index, E element) 用指定元素替換集合中指定位置的元素,返回值的更新前的元素

List的子類:ArrayList集合

java.util.ArrayList 集合數據存儲的結構是數組結構。元素增刪慢,查找快,由於日常開發中使用多的功能爲 查詢數據、遍歷數據,所以 ArrayList 是常用的集合。

List的子類:LinkedList集合

java.util.LinkedList 集合數據存儲的結構是鏈表結構。方便元素添加、刪除的集合。
在這裏插入圖片描述

方法 描述
public void addFirst(E e) 將指定元素插入此列表的開頭
public void addLast(E e) 將指定元素添加到此列表的結尾
public E getFirst() 返回此列表的第一個元素
public E getLast() 返回此列表的後一個元素
public E removeFirst() 移除並返回此列表的第一個元素
public E removeLast() 移除並返回此列表的後一個元素
public E pop() 從此列表所表示的堆棧處彈出一個元素
public void push(E e) 將元素推入此列表所表示的堆棧
public boolean isEmpty() 如果列表不包含元素,則返回true

(四)Set接口

java.util.Set 接口和 java.util.List 接口一樣,同樣繼承自 Collection 接口,它與 Collection 接口中的方 法基本一致,並沒有對 Collection 接口進行功能上的擴充,只是比 Collection 接口更加嚴格了。與 List 接口不同的是, Set 接口中元素無序,並且都會以某種規則保證存入的元素不出現重複。

  1. HashSet集合介紹
    java.util.HashSetSet 接口的一個實現類,它所存儲的元素是不可重複的,並且元素都是無序的(即存取順序不一致)。
    HashSet 是根據對象的哈希值來確定元素在集合中的存儲位置,因此具有良好的存取和查找性能。保證元素唯一性 的方式依賴於: hashCodeequals 方法。
    在這裏插入圖片描述
    (五)Collections

常用功能

方法 描述
public static <T> boolean addAll(Collection<T> c, T... elements) 往集合中添加一些元素
public static void shuffle(List<?> list) 打亂集合順序
public static <T> void sort(List<T> list) 將集合中元素按照默認規則排序
public static <T> void sort(List<T> list,Comparator<? super T> ) 將集合中元素按照指定規則排序
  1. Comparator比較器
public static <T> void sort(List<T> list,Comparator<? super T> ) 

可以方便的設定比較規則並實現排序等功能。

(三)Map集合
學習過python的小夥伴們都知道,python裏面有個叫做 字典 的傻孩子,它被用於存儲鍵值對兒。
而Java裏面的map集合就是實現這樣的功能的。
在這裏插入圖片描述
上圖明確的告訴大家,鍵值對的一些特點與性質。

  • 相比collection中的集合,元素是孤立存在的(理解爲單身),向集合中存儲元素採用一個個元素的方式存儲。
  • map中,元素是成對存在的(理解爲夫妻)。每個元素由鍵與值兩部分組成,通過鍵可以找對所對應的值。Map 中的集合不能包含重複的鍵,值可以重複;每個鍵只能對應一個值。

map接口中的常用方法

方法 描述
put(K key , V value) 把指定的鍵與指定的值添加到Map集合中。
putAll(Map<? extends K , ? extends V> m) 將指定的Map集合全部添加到該集合
clear() 將集合內所有的鍵值對清除
containsKey(Object key ) 返回類型爲布爾型,判斷該Key中是否包含指定的對象
containsValue(Object value) 返回類型爲布爾型,判斷該集合中的Value是否百翰指定對象
isEmpty() 判斷是否爲空
remove(Object key) 將指定key-value映射從該集合中刪除
size() 返回該集合包含的key-value映射的個數
entrySet() 返回該集合包含的所有鍵值對的Set集合
keySet() 返回集合中的所有的key的Set集合
get(Object key) 返回指定的key映射的值,若不存在該key則返回null
hashCode() 返回該值的哈希值

map的用法:

public class MapDemo {
     public static void main(String[] args) {
              //創建 map對象         
              HashMap<String, String>  map = new HashMap<String, String>();           //添加元素到集合         
              map.put("黃曉明", "楊穎");         
              map.put("文章", "馬伊琍");         
              map.put("鄧超", "孫儷");         
              System.out.println(map);           
              //String remove(String key)         
              System.out.println(map.remove("鄧超"));         
              System.out.println(map);           
              // 想要查看 黃曉明的媳婦 是誰         
              System.out.println(map.get("黃曉明"));         
              System.out.println(map.get("鄧超"));         
      }
 }

map遍歷的方法:

public class MapDemo01 {
     public static void main(String[] args) {
              //創建Map集合對象          
              HashMap<String, String> map = new HashMap<String,String>();         
              //添加元素到集合          
              map.put("胡歌", "霍建華");         
              map.put("郭德綱", "于謙");         
              map.put("薛之謙", "大張偉");           
              //獲取所有的鍵  獲取鍵集
              Set<String> keys = map.keySet();         
              // 遍歷鍵集 得到 每一個鍵         
              for (String key : keys) {            
              //key  就是鍵                
              //獲取對應值             
              	String value = map.get(key);             
              	System.out.println(key+"的CP是:"+value);         
              }
    } 
}

在這裏插入圖片描述
Entry鍵值對對象

我們已經知道, Map 中存放的是兩種對象,一種稱爲key(鍵),一種稱爲value(值),它們在 Map 中是一一對應關 系,這一對對象又稱做 Map 中的一個 Entry(項) 。 Entry 將鍵值對的對應關係封裝成了對象。即鍵值對對象,這 樣我們在遍歷 Map 集合時,就可以從每一個鍵值對( Entry )對象中獲取對應的鍵與對應的值。

public Set<Map.Entry<K,V>> entrySet() : 獲取到Map集合中所有的鍵值對對象的集合(Set集合)

使用

public class MapDemo02 {
     public static void main(String[] args) {         
     // 創建Map集合對象          
     HashMap<String, String> map = new HashMap<String,String>();         
     // 添加元素到集合          
     map.put("胡歌", "霍建華");         
     map.put("郭德綱", "于謙");         
     map.put("薛之謙", "大張偉");           
     // 獲取 所有的 entry對象  entrySet         
     Set<Entry<String,String>> entrySet = map.entrySet();           
     // 遍歷得到每一個entry對象         
     for (Entry<String, String> entry : entrySet) {
                  // 解析                
          String key = entry.getKey();             
          String value = entry.getValue();               
          System.out.println(key+"的CP是:"+value);         
      }     
	} 
}

在這裏插入圖片描述

二、迭代器

在程序開發中,經常需要遍歷集合中的所有元素。針對這種需求,JDK專門提供了一個接口 java.util.Iterator 。 Iterator 接口也是Java集合中的一員,但它與 Collection 、 Map 接口有所不同, Collection 接口與 Map 接口主要用於存儲元素,而 Iterator 主要用於迭代訪問(即遍歷) Collection 中的元 素,因此 Iterator 對象也被稱爲迭代器。

想要遍歷Collection集合,那麼就要獲取該集合迭代器完成迭代操作。

  • public Iterator iterator() : 獲取集合對應的迭代器,用來遍歷集合中的元素
  • public E next() :返回迭代的下一個元素
  • public boolean hasNext() :如果仍有元素可以迭代,則返回 true

使用:

public class IteratorDemo {
    public static void main(String[] args) {            
    // 使用多態方式 創建對象         
    Collection<String> coll = new ArrayList<String>();           
    // 添加元素到集合         
    coll.add("串串星人");         
    coll.add("吐槽星人");         
    coll.add("汪星人");         
    //遍歷         
    //使用迭代器 遍歷   每個集合對象都有自己的迭代器         
    Iterator<String> it = coll.iterator();         
    //  泛型指的是 迭代出 元素的數據類型         
    while(it.hasNext()){ //判斷是否有迭代元素
                 String s = it.next();//獲取迭代出的元素             
                 System.out.println(s);
    }
	}
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章