List
遍历方法有三种:
1. for-each
2. 迭代器 Iterator(ListIterator)
3. for
- 首选for-each
- 需要用到迭代器方法时用迭代器,比如next,remove(,add,set)
- 在遍历过程中需要利用索引进行计算,或显示控制索引
- for 循环的时候用到了list.get(i),如果这个list不是ArrayList,而是LinkedList,效率会很慢,因为get方法每次都要遍历一次
// 初始化
List<Integer> list = new ArrayList<>();
for (int i = 0; i < 10; i++) {
list.add(i);
}
// for-each 因为没有索引,无法修改元素
for (Integer value : list) {
System.out.println(value);
}
// Iterator, 可以在遍历过程中删除
for (Iterator<Integer> it = list.iterator(); it.hasNext(); ) {
Integer value = it.next();
System.out.println(value);
if (value == 1) {
it.remove();
}
}
// ListIterator, 可以在遍历过程中删除,添加和修改
for (ListIterator<Integer> listIterator = list.listIterator(); listIterator.hasNext(); ) {
Integer value = listIterator.next();
if (value == 1) {
listIterator.remove(); // 下一次next,指向的是2
listIterator.add(-1); // 下一次next,指向的依然是2
} else {
listIterator.set(value + 1);
}
}
// for 可以修改元素和显示控制索引
for (int i = 0; i < list.size(); i++) {
Integer value = list.get(i);
System.out.println(value);
list.set(i, value + 1); // value + 1
if (i == list.size() - 1) {
list.set(0, 0); // list[0] = 0
}
}
Map
遍历方法有三种:
1. for-each
2. 迭代器 Iterator(ListIterator)
3. for 先遍历key,再使用get方法获取,效率低下,不建议使用
- 首选for-each
- 需要用到迭代器方法时用迭代器,比如next,remove
// 初始化
Map<Integer, Integer> map = new HashMap<>();
for (int i = 0; i < 10; i++) {
map.put(i, i);
}
// 同时使用key和value
for (Map.Entry<Integer, Integer> entry : map.entrySet()) {
System.out.println("key: " + entry.getKey() + ", value: " + entry.getValue());
}
// 只使用key
for (Integer key : map.keySet()) {
System.out.println("key = " + key);
}
// 只使用value
for (Integer value : map.values()) {
System.out.println("value = " + value);
}
// 使用迭代器,需要在遍历过程中删除
Iterator<Map.Entry<Integer, Integer>> iterator = map.entrySet().iterator();
while (iterator.hasNext()) {
Map.Entry<Integer, Integer> entry = iterator.next();
System.out.println("key: " + entry.getKey() + ", value: " + entry.getValue());
// remove 1
if (entry.getValue() == 1) {
iterator.remove();
}
}
System.out.println("after remove 1");
for (Map.Entry<Integer, Integer> entry : map.entrySet()) {
System.out.println("key: " + entry.getKey() + ", value: " + entry.getValue());
}