“嗨,阿米戈。”

“餵,里希。”

“Ellie 告訴我你想要更多集合的例子。我會給你一些。這裡是集合和接口的列表:”

界面 類/實現 描述
列表  數組列表  列表
 鍊錶  列表
 向量  向量
 堆  堆
 放    哈希集  放
 樹集  放
 排序集  排序集
地圖  哈希表 地圖/字典
 樹圖  地圖/字典
 排序圖  排序字典
 哈希表  哈希表

“嗯,挺多的,四張榜單,三套,四張地圖。”

“對,都是List、Set、Map接口的不同實現。”

“這些實現之間有什麼區別?”

“這正是我們今天要談論的內容。請耐心等待。”

“你還有別的問題嗎?”

“我知道如何在屏幕上顯示列表。如何顯示集合或地圖?”

“List的元素有固定的順序,所以你可以用索引來顯示它們。對於Set或Map,沒有特定的順序。實際上,它們的元素順序可以隨著項目的刪除或新增而改變添加項目。”

“驚人的。”

“這就是為什麼發明了稱為迭代器的特殊對象來處理集合元素。它們使您可以遍歷集合中的所有元素,即使它們只有名稱而不是索引(Map),或者既沒有名稱也沒有索引放)。”

“這裡有些例子:”

顯示集合的元素
 public static void main(String[] args)
{
    Set&ltString> set = new HashSet&ltString>();
    set.add("Rain");
    set.add("In");
    set.add("Spain");

     // Get an iterator for the set
     Iterator&ltString> iterator = set.iterator();

    while (iterator.hasNext())        // Check if there is another element
    {
       // Get the current element and move to the next one
       String text = iterator.next();

        System.out.println(text);
    }
}
 
顯示列表的元素
public static void main(String[] args)
{
    List&ltString> list = new ArrayList&ltString>();
    list.add("Rain");
    list.add("In");
    list.add("Spain");

    Iterator&ltString> iterator = list.iterator();// Get an iterator for the list

    while (iterator.hasNext())      // Check if there is another element   
    {
        // Get the current element and move to the next one
        String text = iterator.next();

        System.out.println(text);
    }
}
地圖的顯示元素
public static void main(String[] args)
{
    // All elements are stored in pairs
    Map<String, String> map = new HashMap<String, String>();
    map.put("first", "Rain");
    map.put("second", "In");
    map.put("third", "Spain");

    Iterator<Map.Entry<String, String>> iterator = map.entrySet().iterator();

   while (iterator.hasNext())
    {
        // Get a key-value pair
        Map.Entry<String, String> pair = iterator.next();
        String key = pair.getKey();            // Key
        String value = pair.getValue();        // Value
        System.out.println(key + ":" + value);
    }
}

“哇。我想知道那是什麼意思。”

“其實很簡單。首先,我們從集合中得到一個特殊的對象,一個迭代器。迭代器只有兩個方法。

1. next() 方法返回集合中的下一個元素。

2. hasNext() 方法檢查是否還有未被next() 返回的元素。

“好的。我想現在越來越清楚了。讓我試著向你重複我的理解。”

“所以……首先,我們需要調用集合的 iterator() 方法來獲取這個神奇的迭代器對象。”

“然後我們一個一個地獲取元素,只要有剩餘的元素。我們通過調用 next() 獲取集合中的下一個元素,我們通過調用 hasNext() 檢查集合中是否還有元素迭代器。對嗎?

“是的,或多或少。但等待好的部分。”

“Java 有使用迭代器的簡寫符號。遵循whilefor的模式,添加了一個更特殊的語句:for each。它也使用關鍵字for表示。”

“for-each 語句僅用於處理集合和容器。它隱式地使用迭代器,但我們只能看到返回的元素。”

“讓我向您展示使用迭代器的普通方式和速記方式:”

手寫
public static void main(String[] args)
{
  Set&ltString> set = new HashSet&ltString>();
    set.add("Rain");
    set.add("In");
    set.add("Spain");

    Iterator&ltString> iterator = set.iterator();
  while (iterator.hasNext())
  {
    String text = iterator.next();
    System.out.println(text);
  }
}
速記
public static void main(String[] args)
{
    Set&ltString> set = new HashSet&ltString>();
    set.add("Rain");
    set.add("In");
    set.add("Spain");

   for (String text : set)   
    {
        System.out.println(text);
    }
}


“請注意,右側部分沒有以紅色或綠色突出顯示的單詞。實際上,三行由一行代替:”

手寫
Iterator&ltString> iterator = set.iterator();
while (iterator.hasNext())
{
    String text = iterator.next();
速記

for (String text : set)


“這看起來很漂亮。我更喜歡這樣。”

“讓我們看一下上面示例的簡寫版本:”

顯示集合的元素
public static void main(String[] args)
{
    Set&ltString> set = new HashSet&ltString>();
    set.add("Rain");
    set.add("In");
    set.add("Spain");

    for (String text : set)   
    {
        System.out.println(text);
    }
}
顯示列表的元素
public static void main(String[] args)
{
    List&ltString> list = new ArrayList&ltString>();
    list.add("Rain");
    list.add("In");
    list.add("Spain");

     for (String text : list)        
    {
        System.out.println(text);
    }
}
地圖的顯示元素
public static void main(String[] args)
{
    Map<String, String> map = new HashMap<String, String>(); 
    map.put("first", "Rain");
    map.put("second", "In");
    map.put("third", "Spain");

    for (Map.Entry<String, String> pair : map.entrySet())
    {
        String key = pair.getKey();                      // Key
        String value = pair.getValue();                  // Value
        System.out.println(key + ":" + value);
    }
}

“現在你說!”

“我很高興你喜歡它。”