Java里常用的遍历

List 遍历

// 1.fori循环遍历
// 效率最高 也是java官方推荐的用法
for (int i = 0; i < list.size(); i++) {
    
    
	Integer a = list.get(i);
}
// 2.增强for循环
for (int i : list) {
    
    
	Integer a = i;
}
// 3.iterator 迭代器
for (Iterator<Integer> iterator = list.iterator(); iterator.hasNext();) {
    
    
	Integer a = (Integer) iterator.next();
}

// while 循环写法
Iterator<Integer> iterator = list.iterator();
while (iterator.hasNext()) {
    
    
	Integer a = (Integer) iterator.next();
}
// 4.lambda
// lambda 最慢不推荐 java8 lambda
list.forEach(item -> {
    
    
	Integer a = item;
});
// 5.stream foreach java8 特有
list.stream().forEach(item -> {
    
    
	Integer a = item;
});
		
// 6.parallelStream foreach java8 特有
list.parallelStream().forEach(item -> {
    
    
	Integer a = item;
});

在这里插入图片描述

List 删除元素

fori循环遍历
这种方式的问题在于,删除某个元素后,list的大小发生了变化,而你的索引也在变化,所以会导致你在遍历的时候漏掉某些元素。
这种方式可以用在删除特定的一个元素时使用,但不适合循环删除多个元素时使用

增强for循环
删除元素后继续循环会报错误信息ConcurrentModificationException,因为元素在使用的时候发生了并发的修改,导致异常抛出。
但是删除完毕马上使用break跳出,则不会触发报错

iterator 迭代器
iterator遍历可以正常的循环及删除。但要注意的是,使用iterator的remove方法,
如果用list的remove方法同样会报上面提到的ConcurrentModificationException错误

Iterator<Integer> iterator = list.iterator();
while (iterator.hasNext()) {
    
    
	Integer a = (Integer) iterator.next();
	iterator.remove();
}

以上3中循环的总结:
(1)循环删除list中特定一个元素的,可以使用三种方式中的任意一种,但在使用中要注意上面分析的各个问题。
(2)循环删除list中多个元素的,应该使用迭代器iterator方式。
在这里插入图片描述

HashMap 遍历

// 1.迭代器 EntrySet
Iterator<Map.Entry<Integer, Integer>> entries = map.entrySet().iterator();
while (entries.hasNext()) {
    
    
	Map.Entry<Integer, Integer> entry = entries.next();
	Integer key = entry.getKey();
	Integer value = entry.getValue();
}
// 2.迭代器 KeySet
Iterator<Integer> iterator = map.keySet().iterator();
while (iterator.hasNext()) {
    
    
	Integer key = iterator.next();
	Integer value = map.get(iterator.next());
}
// 3.ForEach EntrySet 这是最常用的方式
for (Map.Entry<Integer, Integer> entry : map.entrySet()) {
    
    
	Integer key = entry.getKey();
	Integer value = entry.getValue();
}
// 4.ForEach KeySet
for (Integer key : map.keySet()) {
    
    
	Integer key1 = key;
	Integer value = map.get(key1);;
}
// 5.Lambda
map.forEach((key, value) -> {
    
    
	Integer key1 = key;
	Integer value1 = value;
});
// 6.Streams API 单线程
map.entrySet().stream().forEach((entry) -> {
    
    
	Integer key = entry.getKey();
	Integer value1 = entry.getValue();
});
// 7.Streams API 多线程
map.entrySet().parallelStream().forEach((entry) -> {
    
    
	Integer key = entry.getKey();
	Integer value1 = entry.getValue();
});
for (Integer value : map.values()) {
    
    
	Integer value1 = value;
}
Iterator<Integer> iteratorValues = map.values().iterator();
while (iteratorValues.hasNext()) {
    
    
	Integer value1 = iteratorValues.next();
}

在这里插入图片描述

HashMap 删除元素

		Iterator<Map.Entry<Integer, String>> iterator = map.entrySet().iterator();
		while (iterator.hasNext()) {
    
    
			Map.Entry<Integer, String> entry = iterator.next();
			if (entry.getKey() == 1) {
    
    
				// 删除
				System.out.println("del:" + entry.getKey());
				iterator.remove();
			} else {
    
    
				System.out.println("show:" + entry.getKey());
			}
		}
		for (Map.Entry<Integer, String> entry : map1.entrySet()) {
    
    
			if (entry.getKey() == 1) {
    
    
				// 删除
				System.out.println("del:" + entry.getKey());
				map1.remove(entry.getKey());
			} else {
    
    
				System.out.println("show:" + entry.getKey());
			}
		}
		map2.forEach((key, value) -> {
    
    
			if (key == 1) {
    
    
				System.out.println("del:" + key);
				map2.remove(key);
			} else {
    
    
				System.out.println("show:" + key);
			}
		});
		map2.keySet().removeIf(key -> key == 1);
		map2.forEach((key, value) -> {
    
    
		    System.out.println("show:" + key);
		});
		map2.entrySet().stream().forEach((entry) -> {
    
    
		    if (entry.getKey() == 1) {
    
    
		        System.out.println("del:" + entry.getKey());
		        map2.remove(entry.getKey());
		    } else {
    
    
		        System.out.println("show:" + entry.getKey());
		    }
		});
		map2.entrySet().stream().filter(m -> 1 != m.getKey()).forEach((entry) -> {
    
    
		    if (entry.getKey() == 1) {
    
    
		        System.out.println("del:" + entry.getKey());
		    } else {
    
    
		        System.out.println("show:" + entry.getKey());
		    }
		});

Set 循环

		Iterator<String> it = set.iterator();
		while (it.hasNext()) {
    
    
			String str = it.next();
			System.out.println(str);
		}
		for (String str : set) {
    
    
			System.out.println(str);
		}

Property 遍历

            System.out.println("---------(方式一)------------");
            Set<Object> keys = properties.keySet();//返回属性key的集合
            for (Object key : keys) {
    
    
                System.out.println(key.toString() + "=" + properties.get(key));
            }
            System.out.println("---------(方式二)------------");
            Set<Map.Entry<Object, Object>> entrySet = properties.entrySet();//返回的属性键值对实体
            for (Map.Entry<Object, Object> entry : entrySet) {
    
    
                System.out.println(entry.getKey() + "=" + entry.getValue());
            }
            System.out.println("---------(方式三)------------");
            Set<String> p = properties.stringPropertyNames();
            for (String key : p) {
    
    
                System.out.println(key + "=" + properties.getProperty(key));
            }

            System.out.println("---------(方式四)------------");
            Enumeration<?> e = properties.propertyNames();
            while (e.hasMoreElements()) {
    
    
                String key = (String) e.nextElement();
                String value = properties.getProperty(key);
                System.out.println(key + "=" + value);
            }

猜你喜欢

转载自blog.csdn.net/weixin_37646636/article/details/120612385