“嗨,阿米戈。”
“餵,里希。”
“Ellie 告訴我你想要更多集合的例子。我會給你一些。這裡是集合和接口的列表:”
界面 | 類/實現 | 描述 |
---|---|---|
列表 | 數組列表 | 列表 |
鍊錶 | 列表 | |
向量 | 向量 | |
堆 | 堆 | |
放 | 哈希集 | 放 |
樹集 | 放 | |
排序集 | 排序集 | |
地圖 | 哈希表 | 地圖/字典 |
樹圖 | 地圖/字典 | |
排序圖 | 排序字典 | |
哈希表 | 哈希表 |
“嗯,挺多的,四張榜單,三套,四張地圖。”
“對,都是List、Set、Map接口的不同實現。”
“這些實現之間有什麼區別?”
“這正是我們今天要談論的內容。請耐心等待。”
“你還有別的問題嗎?”
“我知道如何在屏幕上顯示列表。如何顯示集合或地圖?”
“List的元素有固定的順序,所以你可以用索引來顯示它們。對於Set或Map,沒有特定的順序。實際上,它們的元素順序可以隨著項目的刪除或新增而改變添加項目。”
“驚人的。”
“這就是為什麼發明了稱為迭代器的特殊對象來處理集合元素。它們使您可以遍歷集合中的所有元素,即使它們只有名稱而不是索引(Map),或者既沒有名稱也沒有索引(放)。”
“這裡有些例子:”
public static void main(String[] args)
{
Set<String> set = new HashSet<String>();
set.add("Rain");
set.add("In");
set.add("Spain");
// Get an iterator for the set
Iterator<String> 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<String> list = new ArrayList<String>();
list.add("Rain");
list.add("In");
list.add("Spain");
Iterator<String> 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 有使用迭代器的簡寫符號。遵循while和for的模式,添加了一個更特殊的語句:for each。它也使用關鍵字for表示。”
“for-each 語句僅用於處理集合和容器。它隱式地使用迭代器,但我們只能看到返回的元素。”
“讓我向您展示使用迭代器的普通方式和速記方式:”
public static void main(String[] args)
{
Set<String> set = new HashSet<String>();
set.add("Rain");
set.add("In");
set.add("Spain");
Iterator<String> iterator = set.iterator();
while (iterator.hasNext())
{
String text = iterator.next();
System.out.println(text);
}
}
public static void main(String[] args)
{
Set<String> set = new HashSet<String>();
set.add("Rain");
set.add("In");
set.add("Spain");
for (String text : set)
{
System.out.println(text);
}
}
“請注意,右側部分沒有以紅色或綠色突出顯示的單詞。實際上,三行由一行代替:”
Iterator<String> iterator = set.iterator();
while (iterator.hasNext())
{
String text = iterator.next();
for (String text : set)
“這看起來很漂亮。我更喜歡這樣。”
“讓我們看一下上面示例的簡寫版本:”
public static void main(String[] args)
{
Set<String> set = new HashSet<String>();
set.add("Rain");
set.add("In");
set.add("Spain");
for (String text : set)
{
System.out.println(text);
}
}
public static void main(String[] args)
{
List<String> list = new ArrayList<String>();
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);
}
}
“現在你說!”
“我很高興你喜歡它。”
GO TO FULL VERSION