Java中数组、集合初始化及遍历方式
一、数组
一维数组两种初始化方式
-
静态初始化
int[] array = {1,2,3};
int[] array = new int[]{1,2,3};
-
动态初始化
int[] array = new int[3]; array[0]=1; array[1]=2; array[2]=3;
一维数组两种遍历方式
- 普通for循环
for (int i = 0; i < array.length; i++) { System.out.println(array[i]); }
- 增强for循环
for (int data : array) { System.out.println(data); }
二维数组两种初始化方式
-
静态初始化
int[][] array = {{1,2},{3,4}};
int[][] array = new int[][]{{1,2},{3,4}};
-
动态初始化
int[][] array = new int[2][1]; array[0][1]=1;
// 定义两个一维数组,每个一维数组长度待定 int[][] array = new int[2][]; // 必须事先分配长度,才可以访问 array[0] = new int[1]; array[0][0] = 1; array[1] = new int[2];
二维数组两种遍历方式
- 普通for循环
for (int i = 0; i < array.length; i++) { for (int j = 0; j < array[i].length; j++) { System.out.println(array[i][j]); } }
- 增强for循环
for (int[] ints : array) { for (int data : ints) { System.out.println(data); } }
Java 集合框架主要包括两种类型的容器,一种是集合(Collection),存储一个元素集合,另一种是图(Map),存储键/值对映射。
图引用:https://www.runoob.com/java/java-collections.html
Collection包含List、Set、Queue,下面以List为例
List5种初始化方式
- 创建List,使用List.add方法初始化
List<String> list = new ArrayList(); list.add("a"); list.add("b"); list.add("c");
- 双花括号初始化
List<String> list = new ArrayList<String>() {{ add("1"); add("2"); add("3"); }};
- Arrays.asList
List<String> list = Arrays.asList("1","2","3");
- Stream
List<String> list = Stream.of("1","2","3").collect(Collectors.toList());
- Java9新特性,使用List.of,生成不可变集合
List<String> list = List.of("1","2","3");
List5种遍历方式
-
普通for循环
for (int i = 0; i < list.size(); i++) { System.out.println(list.get(i)); }
-
增强for循环
for (String s : list) { System.out.println(s); }
-
迭代器
该方法可以不用担心在遍历的过程中会超出集合的长度
Iterator<String> ite = list.iterator(); while (ite.hasNext()) { System.out.println(ite.next()); }
-
forEach
list.forEach(System.out::println);
list.forEach(p -> { System.out.println(p); });
-
Java8新特性,Stream流
list.stream().forEach(System.out::println);
list.stream().forEach(p -> { System.out.println(p); });
Map3种初始化方式
-
新建Map,使用Map.put初始化
Map<String, String> map = new HashMap<String, String>(); map.put("1", "a"); map.put("2", "b"); map.put("3", "c");
-
Java8新特性,双花括号初始化
Map<String, String> map = new HashMap<String, String>() {{ put("1", "a"); put("2", "b"); put("3", "c"); }};
-
Java9新特性,Map.of生成不可变集合
Map<String, String> map = Map.of("1,"a","2","b","3","c");
Map5种遍历方式
-
Map.entrySet遍历
推荐,尤其是大容量的情况下
for (Map.Entry<String, String> entry : map.entrySet()) { System.out.println("key= " + entry.getKey() + " value= " + entry.getValue()); }
-
Map.keySet遍历
获取键,然后二次取值
for (String key : map.keySet()) { System.out.println("key= "+ key + " value= " + map.get(key)); }
-
Map.values遍历
只能遍历所有value,拿不到key
for (String value : map.values()) { System.out.println("value= " + value); }
-
迭代器(Iterator)
不能在遍历中使用集合map.remove()来删除数据,但可以使用迭代器的iterator.remove()来删除数据,数据安全
Iterator<Map.Entry<String, String>> iterator = map.entrySet().iterator(); while (iterator.hasNext()) { Map.Entry<String, String> entry = iterator.next(); System.out.println("key= " + entry.getKey() + " value= " + entry.getValue()); }
-
forEach
map.forEach((k, v) -> System.out.println("key= " + k + " value= " + v));
-
Java8中,Stream流
单线程
map.entrySet().stream().forEach(entry -> { System.out.println("key= " + entry.getKey() + " value= " + entry.getValue()); });
多线程,能够充分利用多核CPU的优势,底层是基于ForkJoinPool
map.entrySet().parallelStream().forEach(entry -> { System.out.println("key= " + entry.getKey() + " value= " + entry.getValue()); });