集合框架中有很多不同类型的集合可以根据实际需要存储不同的元素,同样,不同过的集合的遍历方式也有所不用,但是这些不同的遍历方式之间又有着千丝万缕的联系。
一、单列集合:
1最底层的方法:使用简单的 for 循环,根据元素索引遍历集合中的元素
2最常用的方式:Iterator迭代器
使用方式是,1.用集合本省调用Iterator迭代器,返回一个Iterator
2.使用while循环遍历此返回的迭代器,其核心是迭代器本身有 hasNext() 和 Next() 方法
3演变的常用便捷方式:增强 for 循环
使用方式是:1.首先集合本身调用Iterator迭代器,返回一个Iterator
2.使用增强 for 循环遍历,其第一个参数是迭代器中的元素,第二个元素是迭代器的引用
4注意:迭代器本身是将集合中的元素拷贝一份到自己的迭代中,实际上并没有直接操作集合本省的元素,
因此,如果在使用迭代器的过程中对集合中的元素进行了修改,就会报错——并发修改异常,为此java为我们提供了一个更便捷的迭代器——ListIterator
使用 ListIterator 可以避免在迭代遍历的过程中因修改集合中过的元素而产生的并发修改异常
<pre name="code" class="java">package blog;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Iterator;
import java.util.ListIterator;
public class Test1 {
public static void main(String[] args) {
// 定义一个单列集合
ArrayList<String> arrayList = new ArrayList<String>();
// 使用集合工具类向集合中添加元素
Collections.addAll(arrayList, "a","b","c","d","e");
// 打印下集合本身格式
System.out.println(arrayList);
// 调用遍历集合的方法
method1(arrayList);
System.out.println();
method2(arrayList);
System.out.println();
method3(arrayList);
System.out.println();
method4(arrayList);
System.out.println();
}
// 使用不同的方式遍历集合
public static void method1(ArrayList<String> arrayList){
// 使用索引遍历
for (int i = 0; i < arrayList.size(); i++) {
System.out.print(arrayList.get(i)+" ");
}
}
public static void method2(ArrayList<String> arrayList){
// 使用迭代器遍历aaaaa
Iterator<String> iterator = arrayList.iterator();
while (iterator.hasNext()) {
String string = (String) iterator.next();
System.out.print(string+" ");
}
}
public static void method3(ArrayList<String> arrayList){
// 使用增强for循环遍历集合
for (String string : arrayList) {
System.out.print(string+" ");
}
}
public static void method4(ArrayList<String> arrayList){
// 使用可在遍历过程修改的迭代器ListIterator
ListIterator<String> listIterator = arrayList.listIterator();
while (listIterator.hasNext()) {
String string = (String) listIterator.next();
if (string.equals("c")) {
listIterator.add("f");
}
System.out.print(string+" ");
}
}
}
二、双列集合:
双列集合中的元素是以键值对的关系存储的,虽然不可以使用迭代器进行遍历,但是双列集合提供了 keySet() 和 values() 方法,
其核心思想是通过该方法将获取到的键以 Set 类型的集合返回,将获取到的值以 collection 类型的集合返回,即可以使用单列集合的所有遍历方法对其键值进行遍历
注意:如果集合中的元素重写了 toString() 方法后,则可以直接打印集合引用获取固定的键值对关系,但是如果结合使用 keySet() 和 values() 方法,可以根据需求遍历出任意格式的结果。
<span style="font-size:14px;">package blog;
import java.util.HashMap;
import java.util.Set;
public class Test2 {
public static void main(String[] args) {
// 创建双列集合并添加元素
HashMap<String, String> hashMap = new HashMap<String, String>();
hashMap.put("A", "a");
hashMap.put("B", "b");
hashMap.put("C", "c");
// 获取键值对的Set集合
Set<String> keySet = hashMap.keySet();
for (String string : keySet) {
// 自定义格式输出集合元素
System.out.println(string+"="+hashMap.get(string));
}
}
}</span><span style="font-size:12px;">
</span>
以上代码是将双列集合中的键值对用双列集合中的特有的方法将其分开成单列集合,然后就可以使用单列结合中的遍历方式对其进行操作了
此外,不管是双列集合还是单列结合,只要所存储的元素对象重写了toString()方法,则可通过直接打印相应的集合对象引用可以进行默认输出集合中的元素,而不是其地址值