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);
}