|
1 |
| -## . Set集合遍历 |
| 1 | +## 一.Set集合遍历 |
2 | 2 |
|
| 3 | +### 1.迭代器遍历 |
3 | 4 |
|
| 5 | +```java |
| 6 | +// 1. 迭代器遍历 |
| 7 | +public static void getSet1(Set<String> set) { |
| 8 | + Iterator<String> iterator = set.iterator(); |
| 9 | + while (iterator.hasNext()) { |
| 10 | + String value = iterator.next(); |
| 11 | + System.out.print(value + " "); |
| 12 | + } |
| 13 | +} |
| 14 | +``` |
4 | 15 |
|
5 |
| -## 2. Map集合遍历 |
| 16 | +### 2.增强for |
6 | 17 |
|
7 |
| -**【方式一】通过map.keySet()获取key,通过key找到value** |
| 18 | +```java |
| 19 | +// 2. for-each |
| 20 | +public static void getSet2(Set<String> set) { |
| 21 | + for (String s : set) { |
| 22 | + System.out.print(s + " "); |
| 23 | + } |
| 24 | +} |
| 25 | +``` |
8 | 26 |
|
9 |
| - |
| 27 | +### 3. Collection中的toArray()方法遍历 |
10 | 28 |
|
11 |
| -**【方式二】通过Map.Entry(String,String)获取,然后使用entry.getKey()获取到键,通过entry.getValue()获取到值** |
| 29 | +```java |
| 30 | +// 3. 使用Collection中的toArray()方法遍历 |
| 31 | +public static void getSet3(Set<String> set) { |
| 32 | + Object[] objs = set.toArray(); |
| 33 | + for (int i = 0; i < objs.length; i++) { |
| 34 | + System.out.print(objs[i] + " "); |
| 35 | + } |
| 36 | +} |
| 37 | +``` |
12 | 38 |
|
13 |
| - |
| 39 | +### 4.Lambda表达式 |
14 | 40 |
|
15 |
| -**【方式三】先放入Set集合中,Iterator遍历获取** |
| 41 | +同理相同的代码可以遍历List集合 |
16 | 42 |
|
17 |
| - |
| 43 | +**遍历Set集合** |
18 | 44 |
|
19 |
| -**【方式四】只遍历键或者值,通过加强for循环** |
| 45 | +```java |
| 46 | +// 4.使用Collection中的toArray(T[] t)方法遍历 |
| 47 | +public static void getSet4(Set<String> set) { |
| 48 | + set.forEach(n -> System.out.println(n)); |
| 49 | + set.forEach(System.out::println); |
| 50 | +} |
| 51 | +``` |
20 | 52 |
|
21 |
| - |
| 53 | +**遍历List集合** |
| 54 | + |
| 55 | +```java |
| 56 | +list.forEach(n -> System.out.println(n)); |
| 57 | + |
| 58 | +System.out.println("=====4.使用lambda表达式遍历List集合====="); |
| 59 | + |
| 60 | +list.forEach(System.out::println); |
| 61 | +``` |
| 62 | + |
| 63 | +## 二.Map集合遍历 |
| 64 | + |
| 65 | + |
| 66 | + |
| 67 | +🔉Map集合是我们几乎每天都要使用的集合类,但是其无法像数组那样直接遍历,而是通过迭代器来遍历。以下列举五种遍历方式,推荐使用第一种。 |
| 68 | + |
| 69 | +### 1. EntrySet |
| 70 | +entrySet是 `key-value` 的集合,Set里面的类型是Map.Entry,就是存放Map中的某一对key-value,一般可以通过map.entrySet()得到。 |
| 71 | + |
| 72 | +- entrySet实现了Set接口,里面存放的是键值对。一个K对应一个V。 |
| 73 | + |
| 74 | +- 即通过`getKey()`得到K,`getValue()`得到V |
| 75 | + |
| 76 | +**for-each 和 迭代器两种遍历** |
| 77 | + |
| 78 | +```java |
| 79 | +/** |
| 80 | + * 【EntrySet】 |
| 81 | + * 通过Map.Entry(String,String)来映射结果集 |
| 82 | + * - 然后使用entry.getKey()获取到键 |
| 83 | + * - 通过entry.getValue()获取到值 |
| 84 | + */ |
| 85 | + |
| 86 | +@Test |
| 87 | +public void test1() { |
| 88 | + Map<String, String> map = new HashMap<>(); |
| 89 | + map.put("张三", "内蒙古"); |
| 90 | + map.put("李四", "北京"); |
| 91 | + map.put("王五", "上海"); |
| 92 | + map.put("赵六", "杭州"); |
| 93 | + map.put("田七", "南京"); |
| 94 | + |
| 95 | + //增强for遍历 |
| 96 | + //entry.getKey()获取到键,通过entry.getValue()获取到值 |
| 97 | + for (Map.Entry<String, String> entry : map.entrySet()) { |
| 98 | + System.out.println("key:" + entry.getKey() + " value:" + entry.getValue()); |
| 99 | + } |
| 100 | + |
| 101 | + System.out.println("========================分割线=============================="); |
| 102 | + |
| 103 | + //迭代器遍历 |
| 104 | + Iterator<Map.Entry<String, String>> it = map.entrySet().iterator(); |
| 105 | + while (it.hasNext()) { |
| 106 | + Map.Entry<String, String> entry = it.next(); |
| 107 | + System.out.println("键key :" + entry.getKey() + " value :" + entry.getValue()); |
| 108 | + } |
| 109 | +} |
| 110 | +``` |
| 111 | + |
| 112 | +<br> |
| 113 | + |
| 114 | +### 2. keySet获取key结果集 |
| 115 | +通过`map.keySet()`获取key的结果集,Set里面的类型即key的类型 |
| 116 | +- 通过key找到value |
| 117 | + |
| 118 | +**for-each 和 迭代器两种遍历** |
| 119 | + |
| 120 | +```java |
| 121 | +/** |
| 122 | + * 【KeySet】: 将HashMap中的key取出放入到Set集合中,根据key映射value |
| 123 | + * - 通过map.keySet()获取key |
| 124 | + * - 通过key找到value |
| 125 | + */ |
| 126 | + |
| 127 | +@Test |
| 128 | +public void test2() { |
| 129 | + Map<String, String> map = new HashMap<>(); |
| 130 | + map.put("张三", "内蒙古"); |
| 131 | + map.put("李四", "北京"); |
| 132 | + map.put("王五", "上海"); |
| 133 | + map.put("赵六", "杭州"); |
| 134 | + map.put("田七", "南京"); |
| 135 | + |
| 136 | + //通过map.keySet()获取key, 通过key找到value |
| 137 | + for (String key : map.keySet()) { |
| 138 | + String value = map.get(key); |
| 139 | + System.out.println("key:" + key + " value:" + value); |
| 140 | + } |
| 141 | + |
| 142 | + System.out.println("========================分割线=============================="); |
| 143 | + |
| 144 | + Iterator<String> iterator = map.keySet().iterator(); |
| 145 | + while (iterator.hasNext()) { |
| 146 | + String key = iterator.next(); |
| 147 | + System.out.println(key); |
| 148 | + System.out.println(map.get(key)); |
| 149 | + } |
| 150 | +} |
| 151 | +``` |
| 152 | + |
| 153 | +### 3. Lambda-forEach |
| 154 | +通过`Map.Entry(String,String)`来映射结果集,然后使用`entry.getKey()`获取到键,通过entry.getValue()获取到值 |
| 155 | + |
| 156 | +```java |
| 157 | +/** |
| 158 | + * 【Lambda】 |
| 159 | + * JDLK8 后Map默认的迭代 |
| 160 | + */ |
| 161 | + |
| 162 | +@Test |
| 163 | +public void test3() { |
| 164 | + Map<String, String> map = new HashMap<>(); |
| 165 | + map.put("张三", "内蒙古"); |
| 166 | + map.put("李四", "北京"); |
| 167 | + map.put("王五", "上海"); |
| 168 | + map.put("赵六", "杭州"); |
| 169 | + map.put("田七", "南京"); |
| 170 | + // key-value的类型省略 |
| 171 | + map.forEach((key, value) -> { |
| 172 | + System.out.println("key:" + key + " value:" + value); |
| 173 | + }); |
| 174 | +} |
| 175 | +``` |
| 176 | +<br> |
| 177 | + |
| 178 | +### 4. Stream-forEach |
| 179 | +```java |
| 180 | +/** |
| 181 | + * 【Streams API 单线程】 |
| 182 | + */ |
| 183 | + |
| 184 | +@Test |
| 185 | +public void test4() { |
| 186 | + Map<String, String> map = new HashMap<>(); |
| 187 | + map.put("张三", "内蒙古"); |
| 188 | + map.put("李四", "北京"); |
| 189 | + map.put("王五", "上海"); |
| 190 | + map.put("赵六", "杭州"); |
| 191 | + map.put("田七", "南京"); |
| 192 | + map.put("贾七", "南京"); |
| 193 | + // 遍历 |
| 194 | + map.entrySet().stream().forEach((entry) -> { |
| 195 | + System.out.println(entry.getKey()); |
| 196 | + System.out.println(entry.getValue()); |
| 197 | + }); |
| 198 | +} |
| 199 | +``` |
| 200 | + |
| 201 | + |
| 202 | +<br> |
| 203 | + |
| 204 | +### 5. key和value分开遍历 |
| 205 | + |
| 206 | +Set集合分别获取key与value -- **key不能重复, key-value顺序不对应** |
| 207 | +- 遍历map的键 |
| 208 | +- 获取map的值的集合 [map.values ->返回 Collections] |
| 209 | +```java |
| 210 | +/** |
| 211 | + * 【Set集合分别获取key与value -- key不能重复, key-value顺序不对应】 |
| 212 | + * - 遍历map的键[] |
| 213 | + * - 遍历map的值 |
| 214 | + */ |
| 215 | + |
| 216 | +@Test |
| 217 | +public void test5() { |
| 218 | + Map<String, String> map = new HashMap<>(); |
| 219 | + map.put("张三", "内蒙古"); |
| 220 | + map.put("李四", "北京"); |
| 221 | + map.put("王五", "上海"); |
| 222 | + map.put("赵六", "杭州"); |
| 223 | + map.put("田七", "南京"); |
| 224 | + map.put("郑八", "南京"); |
| 225 | + |
| 226 | + //第三种只遍历键或者值,通过加强for循环 |
| 227 | + //遍历map的键 |
| 228 | + for (String key : map.keySet()) { |
| 229 | + System.out.println("key: " + key); |
| 230 | + } |
| 231 | + |
| 232 | + //获取到 map的value集合 |
| 233 | + Collection<String> values = map.values(); |
| 234 | + for (String value : map.values()) { |
| 235 | + System.out.println("value: " + value); |
| 236 | + } |
| 237 | +} |
| 238 | +``` |
22 | 239 |
|
23 | 240 | ----------------------------------------------------------------------------------
|
24 | 241 |
|
|
47 | 264 | - put(key, 1)
|
48 | 265 |
|
49 | 266 | 5. 遍历Map集合,输出结果
|
50 |
| - |
51 |
| - |
|
0 commit comments