“嗨,阿米戈。”
“你好,里希。”
“艾莉告诉我,你想要更多的集合示例。我会给你几个。下面是集合和接口的列表:”
接口 | 类/实现 | 说明 |
---|---|---|
List | ArrayList | List |
LinkedList | List | |
Vector | Vector | |
Stack | Stack | |
Set | HashSet | Set |
TreeSet | Set | |
SortedSet | Sorted set | |
Map | HashMap | Map/dictionary |
TreeMap | Map/dictionary | |
SortedMap | Sorted dictionary | |
Hashtable | Hash-table |
“嗯。非常多。四个列表、三个集和四个映射。”
“是的,它们都是列表、集和映射接口的不同实现。”
“这些实现之间有什么区别?”
“这正是我们今天要讨论的内容。别着急。”
“你还有其他问题吗?”
“我知道如何在屏幕上显示列表。那么如何显示集或映射呢?”
“列表的元素有固定的顺序,因此可以只使用索引来显示它们。而集和映射则没有特定顺序。实际上,在删除项目或添加新项目时,它们的元素顺序可以改变。”
“太神奇了。”
“因此发明了名为迭代器的特殊对象来处理集合元素。迭代器允许你浏览集合中的所有元素,即使它们只有名称而不是索引(映射),或者既没有名称也没有索引(集)。”
“下面是一些示例:”
public static void main(String[] args)
{
Set<String> set = new HashSet<String>();
set.add("西班牙");
set.add("的");
set.add("雨");
// 获取集的迭代器
Iterator<String> iterator = set.iterator();
while (iterator.hasNext()) // 检查是否存在另一个元素
{
// 获取当前元素并移至下一个
String text = iterator.next();
System.out.println(text);
}
}
public static void main(String[] args)
{
List<String> list = new ArrayList<String>();
list.add("西班牙");
list.add("的");
list.add("雨");
Iterator<String> iterator = list.iterator();// 获取列表的迭代器
while (iterator.hasNext()) // 检查是否存在另一个元素
{
// 获取当前元素并移至下一个
String text = iterator.next();
System.out.println(text);
}
}
public static void main(String[] args)
{
// 所有元素成对存储
Map<String, String> map = new HashMap<String, String>();
map.put("第一个", "西班牙");
map.put("第二个", "的");
map.put("第三个", "雨");
Iterator<Map.Entry<String, String>> iterator = map.entrySet().iterator();
while (iterator.hasNext())
{
// 获取键-值对
Map.Entry<String, String> pair = iterator.next();
String key = pair.getKey(); // 键
String value = pair.getValue(); // 值
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("西班牙");
set.add("的");
set.add("雨");
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("西班牙");
set.add("的");
set.add("雨");
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("西班牙");
set.add("的");
set.add("雨");
for (String text : set)
{
System.out.println(text);
}
}
public static void main(String[] args)
{
List<String> list = new ArrayList<String>();
list.add("西班牙");
list.add("的");
list.add("雨");
for (String text : list)
{
System.out.println(text);
}
}
public static void main(String[] args)
{
Map<String, String> map = new HashMap<String, String>();
map.put("第一个", "西班牙");
map.put("第二个", "的");
map.put("第三个", "雨");
for (Map.Entry<String, String> pair : map.entrySet())
{
String key = pair.getKey(); // 键
String value = pair.getValue(); // 值
System.out.println(key + ":" + value);
}
}
“你讲的有道理!”
“很高兴你能喜欢。”
GO TO FULL VERSION