zl程序教程

您现在的位置是:首页 >  Java

当前栏目

Java中数组、集合初始化及遍历方式

2023-04-18 15:26:09 时间

一、数组

1. 一维数组

一维数组两种初始化方式

  • 静态初始化

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

2.二维数组

二维数组两种初始化方式

  • 静态初始化

    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

在这里插入图片描述

1.Collection

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

2.Map

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