当前位置 : 主页 > 编程语言 > java >

Java中的数组

来源:互联网 收集:自由互联 发布时间:2022-07-04
1.数组的概述    数组英文:array。数组是多个相同类型数据的组合,实现对这些数据的统一管理 数组中的元素可以是任何数据类型,包括基本类型和引用类型。数组属引用类型,数

1.数组的概述

   数组英文:array。数组是多个相同类型数据的组合,实现对这些数据的统一管理
数组中的元素可以是任何数据类型,包括基本类型和引用类型。数组属引用类型,数组型数据是对象(object),数组中的每个元素相当于该对象的成员变量。

2.数组的基本要素

  • 数组名
  • 数组类型
  • 数组下标(索引):下标是从0开始计算的
  • 数组元素(存储的类型相同元素)
    Java中的数组_i++

3.数组的分类

  • 一维数组
  • 二维数组
  • 多维数组

4.一维数组

4.1一维数组的声明

type var[] 或 type[] var;
例如:
int a[];
int[] a1;
double b[];
Mydate[] c; //对象数组
Java语言中声明数组时不能指定其长度(数组中元素的数), 例如: int a[5]; //非法

4.2 一维数组初始化、赋值

Java中使用new关键字来初始化数组

1、先声明,再初始化 , 再赋值
int[] a;
a = new int[5];//这是真正为数组分配空间。一但分配,就不能再改变大小。
a[0]=11; a[1]=3; a[2]=8;a [3]=7; a[4]=5; //这种赋值方式叫做动态赋值

上面的代码可以写成 int[] a = new int[5];
a[0]=11;a[1]=3;a[2]=8;a[3]=7;a[4]=5;

2、声明,初始化,赋值,一个语句完成(静态赋值)
int[] a = new int[]{6,2,5,1,4};//注意:这种方式不能指定长度
甚至可以写成
int[] a = {6,2,5,1,4};

4.3 一维数组的使用

1、获得数组长度

数组名.length

2、访问数组元素
数组名[index]
index为数组下标,从0开始,到数组长度-1结束
Java中的数组_二维数组_02
Java中的数组_二维数组_03

4.4 一位数组遍历

for(int i=0;i<数组引用变量名.length;i++){
System.out.println(数组引用变量名[i]);
}

例如
for(int i=0;i<s.length;i++){
System.out.println(s[i]);
}

增强型for循环(foreach循环)

4.5 数组的默认值:

  • 数组定义好之后,如果对应的下标没有被赋值,那么数组将会使用其默认值。
  • 数组默认值:
    double类型的数组默认值: 0.0
    int类型、short类型、byte类型、long类型:默认值0
    boolean类型数组默认值是 false;
    float类型数组默认值是: 0.0
    char类型的数组默认值是: 空白字符
    String类型的数组默认值是: null

4.6 案例1:

  • 将以下的数组的元素值逆序输出
    int[] numbers={100,10,45,56,77,88,99,10000};
public class Demo1 {
public static void main(String[] args) {

// 最大下标是7
int[] numbers = { 100, 10, 45, 56, 77, 88, 99, 10000 };

for (int i = numbers.length - 1; i >= 0; i--) {
System.out.println(numbers[i]);
}

}
}

4.7案例2:

  • 查询数组中是否包含某个数,如果包含输出这个数所在的下标,如果不包含输出提示文字。
    int[] numbers={18,23,2,100,23,344,102}
public static void main(String[] args) {
Scanner input=new Scanner(System.in);
int[] numbers = { 18, 23, 2, 100, 23, 344, 102 };

System.out.print("请输入一个数字:");
int number=input.nextInt();

boolean flag=false; //默认false

for (int i = 0; i < numbers.length; i++) {
if(numbers[i]==number){
System.out.println("找到啦,下标是:"+i);
flag=true; //做一个标记 代表找到了
break; //找到了之后就退出
}
}

if(flag==false){
System.out.println("这个数组不包含这个元素!");
}

}

4.8案例3:

Java中的数组_二维数组_04

public static void main(String[] args) {

double[] moneys = new double[5];
Scanner input = new Scanner(System.in);
System.out.println("请输入会员消费记录:");
double sum = 0.0;

for (int i = 0; i < moneys.length; i++) {
System.out.print("请输入第" + (i + 1) + "笔购物金额:");
double m = input.nextDouble();
moneys[i] = m; // 将每个值顺序存入数组中
sum = sum + m; // 累加和
}

System.out.println("序号 金额(元)");
for (int i = 0; i < moneys.length; i++) {
System.out.println((i + 1) + " " + moneys[i]);
}
System.out.println("总金额是:" + sum);
}

5.数组内存分析

Java中的数组_i++_05

6.数组基本算法

6.1求数组中最大值和最小值

/*
* 01-数组中查找最大值和最小值
*/
public class Demo1 {

public static void main(String[] args) {
int[] numbers = { 213, 34, 54, 657, 8, 78, 789, 3243, 56, 9, 1 };
int max = numbers[0]; // 初始值 放第一个元素
int min = numbers[0]; // 初始值 放第一个元素
for (int i = 0; i < numbers.length; i++) {
if (numbers[i] > max) {
max = numbers[i];
}
if (numbers[i] < min) {
min = numbers[i];
}
}
System.out.println("最大值是:" + max);
System.out.println("最小值是:" + min);
}
}

6.2数组的插入算法

  • 数组开始的时候是有顺序的,插入一个元素后,使得这个数组保持原来的顺序。
/*
* 02-数组的插入算法
*/
public class Demo2 {
public static void main(String[] args) {

Scanner input = new Scanner(System.in);

int[] numbers = new int[6]; // 待插入的数组
numbers[0] = 99;
numbers[1] = 85;
numbers[2] = 82;
numbers[3] = 63;
numbers[4] = 60;

System.out.print("请输入要插入的数字:");
int num = input.nextInt(); // 80

int index = numbers.length-1; // 初始值,认为最后一个是插入的位置

// 1.寻找要插入的位置
for (int i = 0; i < numbers.length-1; i++) {
if (numbers[i] < num) {
index = i; // 记录下标
break;
}
}

System.out.println("插入的下标是:"+index);

// 2.数组的元素移动
for (int i = numbers.length - 1; i > index; i--) {
numbers[i] = numbers[i - 1];
}

numbers[index] = num; // 把数字插入到指定的下标中

// 3. 输出插入完毕后的数组
for (int i = 0; i < numbers.length; i++) {
System.out.print(numbers[i] + "\t");
}
}
}

6.3数组的删除算法

  • 数组开始的时候是有顺序的,指定删除其中的某一个元素,删除完毕之后。还能保证数组有序。
/*
* 03-数组中删除元素
*/
public class Demo3 {

public static void main(String[] args) {

int[] numbers = { 100, 78, 45, 44, 30, 20, 10 };

Scanner input = new Scanner(System.in);
System.out.print("请输入要删除的元素:");
int num = input.nextInt(); // 44

// 1.寻找要删除的位置
int index = -1; // 默认值 存储删除的位置
for (int i = 0; i < numbers.length; i++) {
if (numbers[i] == num) {
index = i;
break;
}
}

if (index == -1) {
System.out.println("输入的元素不存在!!无法删除!!");

} else {
System.out.println("要删除元素的下标是:" + index);
// 依次移动数组
for (int i = index + 1; i < numbers.length; i++) {
numbers[i - 1] = numbers[i];
}
numbers[numbers.length - 1] = 0; // 最后空白的位置归0

// 输出
for (int i = 0; i < numbers.length; i++) {
System.out.print(numbers[i] + "\t");
}
}
}
}

6.4 交换两个变量的值

/*
* 交换两个变量的值
*/
public class Demo5 {

public static void main(String[] args) {

int a = 1000;
int b = 10;

int temp; //中间变量

temp = a; // temp=1000 a=1000 b=10
a = b; // temp=1000 a=10 b=10
b = temp; // temp=1000 b=1000 a=10

System.out.println("a=" + a);
System.out.println("b=" + b);
}
}

6.5 数组排序算法-冒泡排序

Java中的数组_i++_06

/*
* 04-冒泡排序算法
*/
public class Demo4 {

public static void main(String[] args) {

int[] numbers = { 213, 34, 54, 657, 8, 78, 789 }; // 升序排列

for (int i = 0; i < numbers.length - 1; i++) {
for (int j = 0; j < numbers.length - 1 - i; j++) {
if (numbers[j] > numbers[j + 1]) {
int temp = numbers[j];
numbers[j] = numbers[j + 1];
numbers[j + 1] = temp;
}
}
}

for (int i = 0; i < numbers.length; i++) {
System.out.print(numbers[i] + "\t");
}

}
}
  • 排序中如果是 if (numbers[j] > numbers[j + 1]) 那么就是升序
  • 排序中如果是 if (numbers[j] < numbers[j + 1]) 那么就是降序

6.6 选择法排序

Java中的数组_数组_07

6.7 二分查找法(折半查找法)

Java中的数组_i++_08
1.二分查找又称折半查找,它是一种效率较高的查找方法。
2.二分查找要求(前提):
(1)必须采用顺序存储结构
(2).必须按关键字大小有序排列
3.原理:将数组分为三部分,依次是中值(所谓的中值就是数组中间位置的那个值)前,中值,中值后;将要查找的值和数组的中值进行比较,若小于中值则在中值前面找,若大于中值则在中值后面找,等于中值时直接返回。然后依次是一个递归过程,将前半部分或者后半部分继续分解为三部分。
4.代码实现

public static void main(String[] args) {
int[] array = { 1, 4, 7, 9, 10, 44, 78, 101, 203, 500 };
int index = binarySearch(array,78);
System.out.println(index);
}

/*
* 循环实现二分查找算法arr 已排好序的数组x 需要查找的数-1 无法查到数据
*/
public static int binarySearch(int[] arr, int x) {
int low = 0;
int high = arr.length - 1;
while (low <= high) {
int middle = (low + high) / 2;
if (x == arr[middle]) {
return middle;
} else if (x < arr[middle]) {
high = middle - 1;
} else {
low = middle + 1;
}
}
return -1;
}

7.二维数组
7.1 二维数组定义
    二维数组其实就是数组的数组。
    二维数组中的每个元素又是一个数组。

  • 二维数组的定义:
    Java中的数组_二维数组_09
  • 二维数组的声明和赋值
    Java中的数组_i++_10
  • 二维数组的注意事项:
    Java中的数组_数组_11
    创建二维数组的时候,一定要定义第一维的长度。

7.2 二维数组定义-定义并赋值

  • 写法一
    注意不能定义长度:
    Java中的数组_二维数组_12
    注意不能定义长度:
    Java中的数组_i++_13
  • 写法二
    Java中的数组_i++_14
    存储的结构:
    Java中的数组_i++_15

7.3 二维数组的遍历

/*
* 循环遍历二维数组
*/
public class Demo3 {

public static void main(String[] args) {

int[][] scores = new int[][] { { 90, 85, 92, 78, 54 }, { 76, 63, 80 },{ 87, 70 } };
for (int i = 0; i < scores.length; i++) {
for (int j = 0; j < scores[i].length; j++) {
System.out.print(scores[i][j] + "\t");
}
System.out.println("");
}

}
}

7.4 二维数组案例

Java中的数组_i++_16

/*
* 使用二维数组存储数据
*/
public class Demo4 {

public static void main(String[] args) {

int[][] scores=new int[3][5]; //定义一个二维数组
Scanner input=new Scanner(System.in);

//动态从键盘上输入所有数组的值
for (int i = 0; i < scores.length; i++) {
System.out.println("***********第"+(i+1)+"个班*************");
for (int j = 0; j < scores[i].length; j++) {
System.out.print("请输入第"+(j+1)+"个学生成绩:");
int num=input.nextInt();
scores[i][j]=num; //动态从键盘输入值 按顺序存入数组
}
}


//计算每个班的总成绩
for (int i = 0; i < scores.length; i++) {
int sum=0; //求和 每个班的成绩
for (int j = 0; j < scores[i].length; j++) {
sum=sum+scores[i][j];
}
System.out.println((i+1)+"班的总成绩是:"+sum);
}

}
}
  • 下面数组由个0~9之间的数字组成,分别统计每个数字出现了多少次?
    例如
    0出现3次
    1出现4次
    2出现 ?次
    ……
    int score[]={0,0,1,2,3,5,4,5,2,8,7,6,9,5,4,8,3,1,0,2,4,8,7,9,5,2,1,2,3,9,2,2,5,1};
  • public class Demo7 {

    public static void main(String[] args) {

    int[] score = { 0, 0, 1, 2, 3, 5, 4, 5, 2, 8, 7, 6, 9, 5, 4, 8, 3, 1,
    0, 2, 4, 8, 7, 9, 5, 2, 1, 2, 3, 9, 2, 2, 5, 1 };

    for (int i = 0; i <= 9; i++) {
    int count = 0;
    for (int j = 0; j < score.length; j++) {
    if (score[j] == i) {
    count++;
    }
    }
    System.out.println(i+"出现"+count+"次!");
    }
    }
    }

    3、现在有如下一个数组:int oldArr[]={1,3,4,5,0,0,6,6,0,5,4,7,6,7,0,5};
    要求将以上数组中的0项去掉,将不为0的值存入一个新的数组,生成新的数组为:
    int newArr[]={1,3,4,5,6,6,5,4,7,6,7,5};

    public static void main(String[] args) {

    int oldArr[] = { 1, 3, 4, 5, 0, 0, 6, 6, 0, 5, 4, 7, 6, 7, 0, 5, 1 }; //原来数组
    int count=0;
    for (int i = 0; i < oldArr.length; i++) {
    if(oldArr[i]!=0){
    count++;
    }
    }
    System.out.println("非0的数字个数为:"+count);
    int[] newArr=new int[count]; //创建一个新的新数组
    int index=0; //作为新数组的下标
    for (int i = 0; i < oldArr.length; i++) {
    if(oldArr[i]!=0){
    newArr[index]=oldArr[i];
    index++;
    }
    }
    //------------------输出-----------------------
    for (int i = 0; i < newArr.length; i++) {
    System.out.print(newArr[i]+"\t");
    }
    }

    4、编写一个程序,从键盘输入10个数字。求这个整数数组的最大值、最小值、平均值和所有数组元素的和。

    public static void main(String[] args) {

    int[] numbers = new int[10];
    Scanner input = new Scanner(System.in);

    for (int i = 0; i < numbers.length; i++) {
    System.out.print("请输入第" + (i + 1) + "个数:");
    int num = input.nextInt();
    numbers[i] = num;
    }

    int max = numbers[0];
    int min = numbers[0];
    for (int i = 0; i < numbers.length; i++) {
    if (numbers[i] > max) {
    max = numbers[i];
    }
    if (numbers[i] < min) {
    min = numbers[i];
    }
    }

    System.out.println("最大值是:" + max);
    System.out.println("最大值是:" + min);

    }

    8.数组工具类

    • 在Java中JDK开发库提供了一个专门进行数组操作的工具类Arrays类,方便开发人员对数组进行一些常见操作。
    • 在Java中一个类如果有s结尾,那么这个类一般都是工具类。
    • Arrays类位于 java.util包提供的工具类
    • java.util.Arrays类包含了用来操作数组(比如排序和搜索)的各种方法。
      Java中的数组_二维数组_17

    8.1 数组工具类使用

    • boolean equals(array1,array2):比较两个数组中的内容是否相同
      Java中的数组_i++_18
    • sort(array) : 将数组进行升序排列
      Java中的数组_i++_19
    • String toString(array) :将数组中的元素拼接成一个字符串
      Java中的数组_二维数组_20
    • void fill(array,val) :把数组中的所有元素替换成一个新的元素
      Java中的数组_二维数组_21
    • copyOf(array,length) 复制一个原数组,得到一个新的数组
      Java中的数组_i++_22
    • int binarySearch(array, val) 二分查找法 查询一个元素在数组中所在的下标
      Java中的数组_二维数组_23


    【文章原创作者:阿里云代理 http://www.558idc.com/aliyun.html处的文章,转载请说明出处】
    上一篇:初识Java
    下一篇:没有了
    网友评论