java中常见集合的遍历
java中常见的集合的遍历,其实也就是iterator的使用,或者说这块重点在于使用iterator的遍历。
下面开讲:
1、普通集合:Queue、Stack、Set,直接new个普通iterator遍历就行,下面以set举例
private static void testSetIterator() {
Set<Integer> set = new HashSet<>();
for (int i = 0; i < 10; i++) {
set.add(i);
}
/**
* 集合一般的遍历方式。Queue、Stack也可以这样。就不多写了。
*/
Iterator<Integer> iterator = set.iterator();
while (iterator.hasNext()){
System.out.println(iterator.next());
}
}
2、map的遍历
map的遍历有三种,只遍历key,只遍历value,遍历Entry
private static void testMapIterator() {
Map<Integer, Integer> map = new HashMap<>();
for (int i = 0; i < 10; i++) {
map.put(i, i + 10);
}
/**
* 遍历EntrySet
* 拿到k,v
*/
Iterator<Map.Entry<Integer, Integer>> kVIterator = map.entrySet().iterator();
while (kVIterator.hasNext()) {
Map.Entry<Integer, Integer> entry = kVIterator.next();
System.out.println("k & v :" + entry.getKey() + " " + entry.getValue());
}
System.out.println();
/**
* 遍历key
*/
Iterator<Integer> keyIterator = map.keySet().iterator();
while (keyIterator.hasNext()) {
System.out.println("key is " + keyIterator.next());
}
/**
* 遍历value
*/
Iterator<Integer> valueIterator = map.values().iterator();
while (valueIterator.hasNext()) {
System.out.println("v " + valueIterator.next());
}
}
3、list的遍历
list的遍历有两种,普通的iterator遍历,以及list独有的ListIterator的遍历
private static void testListIterator() {
List<Integer> list = new ArrayList<>();
for (int i = 0; i < 10; i++) {
list.add(i);
}
Iterator<Integer> iterator = list.iterator();
while (iterator.hasNext()) {
System.out.println("list normal" + iterator.next());
}
/**
* LIstIterator是一个更加强大的Iterator的子类型,它只能用于各种List类的访问,尽管Iterator只能向前移动,
* 但是ListIterator可以双向移动,它还可以产生相对于迭代器在列表指向的当前位置的前一个和后一个元素的索引,
* 并且可以使用set()方法替换它访问过的最后一个元素. 你可以通过ListIterator()方法产生一个指向List开始处的ListIteraor,
* 并且还可以通过调用ListIterator(n)方法创建一个一开始就指向索引列表n的元素处的ListIterator
*
*
* package java.util;
*
* public interface ListIterator<E> extends Iterator<E> {
* boolean hasNext(); //检查是否有下一个元素
* E next(); //返回下一个元素
* boolean hasPrevious(); //check是否有previous(前一个)element(元素)
* E previous(); //返回previous element
* int nextIndex(); //返回下一element的Index
* int previousIndex(); //返回当前元素的Index
* void remove(); //移除一个elment
* void set(E e); //set()方法替换访问过的最后一个元素 注意用set设置的是List列表的原始值
* void add(E e); //添加一个element
* }
*/
ListIterator<Integer> listIterator = list.listIterator();
/**
* 游标向后
*/
while (listIterator.hasNext()) {
System.out.println(" listiterator,next " + listIterator.next());
}
/**
* 游标向前遍历
*/
while (listIterator.hasPrevious()) {
System.out.println(" listiterator,previous " + listIterator.previous());
}
}