08-数组

在这里插入图片描述

把握住自己能把握住的点滴。

概述:数组是一种数据结构,在连续的内存空间中,存储一组相同类型的元素。

元素: 存储的内容(整型数组的初始值为0)。

索引:存储元素相对的位置,即数组存储元素的下标(数组的下标从0开始)。


1、创建数组


方式一:静态初始化

int[] a = {1,2,3};

方式二:静态初始化

int[] b = new int[]{1,2,3};

方式三:动态初始化

// 创建一个整型数组,数组名为c,数组长度为3
int[] c = new int[3];
// 通过索引向数组中添加元素
c[0] = 1;
c[1] = 2;
c[2] = 3;

方式四:使用动态数组(ArrayList)

// 创建一个ArrayList对象
ArrayList<Integer> d = new ArrayList<Integer>();
// 添加元素
d.add(1);
d.add(2);
d.add(3);

2、添加元素


  • 数组:数组名[索引]=内容;
  • ArrayList:对象名.add(内容);

3、访问元素


  • 数组:数组名[索引];
  • ArrayList:对象名.get(索引);

4、更新元素


  • 数组:通过索引重新为元素赋值。如: int[] a = {1,2,3};a[0]=7;
  • ArrayList:对象名.set(索引,内容);

5、删除元素


  • 数组删除元素。
  • 使用ArrayList的remove()方法来删除元素。

6、数组长度


  • 数组长度:数组名.length;
  • ArrayList大小:对象名.size();

7、遍历数组


  • for 循环
  • 增强for (for-each,jdk1.5新特性)

8、数组排序


  • 数组排序:Arrays.sort(数组名);
  • ArrayList排序:Collections.sort(对象名);

9、查找元素


数组:

int[] arr = {1,9,6,3};
// 顺序查找,时间复杂度T(n)=O(n),大O表示法
for(int i=0;i<arr.length;i++){
	if(arr[i]==3){
		//数组中有3这个元素
	}else{
		//数组中没有3这个元素
	}
}

ArrayList:

ArrayList<Integer> d = new ArrayList<Integer>();
d.add(1);
d.add(2);
d.add(3);
boolean flag = d.contains(2); //contains:包含
System.out.println(flag); //true

10、练习


例1:打印除小红以外所有同学姓名。

System.out.println("-------begin--------");
String[] str = {"小明", "小红", "小黄", "小绿", "小黑"};
for (String name : str) {
    if ("小红".equals(name)){
        continue;
    }
    System.out.println(name);
}
System.out.println("-------end--------");

例2:逆向输出数组的值。

System.out.println("-------begin--------");
String[] str = {"小明", "小红", "小黄", "小绿", "小黑"};
for (int i = str.length - 1; i >= 0; i--) {
    System.out.println(str[i]);
}
System.out.println("-------end--------");

例3:逐位计算两个数组,并将值赋给第三数组。

System.out.println("-------begin--------");
int[] nums1 = {9, 8, 7};
int[] nums2 = {3, 1, 2};
int[] nums3 = new int[nums1.length];
for (int i = 0; i < nums1.length; i++) {
    nums3[i] = nums1[i] + nums2[i];
}
System.out.println(Arrays.toString(nums3));
System.out.println("-------end--------");

例4:查找数组中最大值。

System.out.println("-------begin--------");
int[] nums = {3, 1, 2, 9, 8, 7};
int max = 0;
for (int i = 0; i < nums.length; i++) {
    int n = nums[i];
    if (n > max) {
        System.out.println(n+"比目前的最大值大"+max+",因此更新最大值为"+n);
        max = n;
    }else {
        System.out.println(n+"不比目前的最大值"+max+"大");
    }
}
System.out.println(max);
System.out.println("-------end--------");

11、多维数组


多维数组:可以看成是数组的数组,比如二维数组就是一个特殊的一维数组,其中每一个元素都是一个一维数组;

二维数组:

int[][] arr = new int[4][2];

这个二维数组 arr 可以看成一个4行2列的数组;

在这里插入图片描述

在这里插入图片描述

/*
		四行两列
		arr[0]:1,2 
		arr[1]:2,3 
		arr[2]:3,4 
		arr[3]:4,5 
*/
int[][] arr = {{1, 2}, {2, 3}, {3, 4}, {4, 5}};

System.out.println(arr[0][0]); // 1
System.out.println(arr[0][1]); // 2
System.out.println(arr[2][0]); // 3
System.out.println(arr[2][1]); // 4

System.out.println("外面的长度: "+arr.length); // 4
System.out.println("里面的长度: "+ arr[0].length); // 2

遍历二维数组:

int[][] arr = {{1, 2}, {2, 3}, {3, 4}, {4, 5}};
for(int i =0;i<arr.length;i++) {
	for(int j=0;j<2;j++) {
		System.out.print(arr[i][j]+"\t");
	}
	System.out.println();
}

运行结果如下:
在这里插入图片描述


「扩展」锯齿数组


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

白豆五

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值