一维数组
1.什么是数组?
- 什么是数组?
- 数组是具有相同数据类型的一组数据的集合:如我们生活中的:球类(皮球,篮球,羽毛球等),在打个比方例如;电器类(电视机,洗衣机,电风扇等),在程序设计中,可以将这些集合为数组,数组中的每个元素具有相同的数据类型,在java中同样将数组看作一个对象,虽然基本数据类型不是对象,但由于基本数据类型组成的数据却是对象.在程序设计中引入数组可以更有效地管理和处理数据,可以根据数组的维数将数组分为一维数组,二维数组…
- 本章重点讲一维数组,
- 因为二维数组在日后学到集合会被替代而且二维数组对一些小白不太友好容易把人绕晕
2.一维数组的创建及使用
- 一维数组的介绍
- 一维数组实际上是一组相同类型数据的线性集合,当在程序中需要处理一组数据,或者传递一组数据时,可以应用这种类型的数组
- 创建一维数组
- **首先数组作为对象允许使用new 关键字进行内层分配.在使用数组之前.必须首先定义数据变量所属的数据类型.一维数组的创建有二种方式
- 第一种.先声明,再用new运算符进行内层分配
- 语法格式:
- 数据类型[] 对象名=new 数据类型[数组的长度]
- 解析
- 数据类型,它可以是Java中的任意的包括简单类和组合类型数组对象名为一个合法的标识符,符合"[]“指明该变量是一个数组的变量.单个[]表示要创建的数组是一个一维数组.new表示创建一个数组 ,”[数组的长度]"表示这个数组有多大
- 例如
- int[] a=new int[5];
- 解析
- 声明了一个int类型的数据类型 对象名为a new创建了一个数组 int[5]数组的长度表示创建了一个有5个元素的整型数组,并且将创建的数组对象赋给引用变量a,即引用变量a引用这个数组.如图所示:
- 在图中a为数组对象名,方括号[]中的值为数组的下标.数组通过下标来区分数组中的不同的元素,数组是下标是从0开始的,由于创建数组a中有5个元素,因此数组中的元素的下标为0-4;
- 在数组中元素没有被赋值的情况下都为0,String字符串为null;
初始化数组
- 数组于基本数据类型一样可以进行初始化操作.数组的初始化可分别初始化数组中的每个元素,数组的初始化有二种方法:
- int[] a=new int[]{1,2,3,5,25};//第一种初始化
- int a2[]={34,23,12,6};//第二种初始化
- 可以看成,数组的初始化就是包括在大括号之内用逗号分开的表达式列表.用逗号(,)分割数组中的各个元素,系统自动为数组分配一定的空间,用第一种初始化方式,将创建5个元素的数组依次为1,2,3,5,25.第二种初始化方式,会创建4个元素的数组,依次为34,23,12,6.
如何使用一维数组呢?
- 在Java集合中一维数组是常见的一种数据结构,我们用代码演示如何用数组打印1-12月各月的天数并输出
//类
public class MyNoo1{
//主函数
public static void main(String[] args) {
//创建一个一维数组
int[] day=new int[]{31,28,31,30,31,30,31,31,30,31,30,31};
//for循环
for(int i=0;i<day.length;i++){
//输出信息
System.out.println((i+1)+"月有"+day[i]+"天");
}
}
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 运行结果
1月有31天
2月有28天
3月有31天
4月有30天
5月有31天
6月有30天
7月有31天
8月有31天
9月有30天
10月有31天
11月有30天
12月有31天
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 解析
- 创建了一个一维数组数组里有12个元素 数组的下标是0-11;
- int[] day=new int[]{31,28,31,30,31,30,31,31,30,31,30,31};
- 创建for循环 通过数组的length属性可获得数组的长度!
- for(int i=0;i<day.length;i++){
- 输出信息
- System.out.println((i+1)+“月有”+day[i]+“天”);
3.数组的基本操作
- java.uitl包中Arrays类包含了用来操作数组(如排序和搜索)的各种方法
3.1.遍历数组
- 什么是遍历数组?
- 遍历数组就是获取数组中的每个元素.通常遍历数组都是使用for循环来实现.
- 案例:请输入五位数字分别存储到数组里并且打印
public class MyNoo1{
public static void main(String[] args) {
//创建键盘扫描仪
Scanner in=new Scanner(System.in);
//创建一个一维数组
int[] day=new int[5];
//for循环
for(int i=0;i<day.length;i++){
System.out.println("请输入第"+i+"位数字");
//循环输入信息 i为数组下标 此时i=0 那么day[i]-->day[0]
//等下一次循环day[i]--->day[1].......
day[i]=in.nextInt();
}
//for遍历数组
for(int i=0;i< day.length;i++){
System.out.println("遍历数组第"+i+"位"+day[i]);
}
//直接打印数组
System.out.println("直接打印数组"+ Arrays.toString(day));
}
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 运行结果
请输入第0位数字
1
请输入第1位数字
2
请输入第2位数字
3
请输入第3位数字
4
请输入第4位数字
5
遍历数组第0位1
遍历数组第1位2
遍历数组第2位3
遍历数组第3位4
遍历数组第4位5
直接打印数组[1, 2, 3, 4, 5]
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- i所以打印的数字就是数组的下标
- 试试用增强for循环(foreach语句)
//导入包
import java.util.Scanner;
//类
public class MyNoo1{
//主函数
public static void main(String[] args) {
//创建键盘扫描仪
Scanner in=new Scanner(System.in);
//创建一个一维数组
int[] day=new int[5];
//for循环
for(int i=0;i<day.length;i++){
System.out.println("请输入第"+i+"位数字");
//循环输入信息 i为数组下标 此时i=0 那么day[i]-->day[0]
//等下一次循环day[i]--->day[1].......
day[i]=in.nextInt();
}
//创建一个计数器
int J=0;
//增强for遍历数组
for(int i:day){
//自增+1
J++;
//输出语句
System.out.println("遍历数组第"+J+"数字"+i);
}
//直接打印数组
System.out.println("直接打印数组"+ Arrays.toString(day));
}
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 运行结果
请输入第0位数字
1
请输入第1位数字
2
请输入第2位数字
3
请输入第3位数字
4
请输入第4位数字
5
遍历数组第1位1
遍历数组第2位2
遍历数组第3位3
遍历数组第4位4
遍历数组第5位5
直接打印数组[1, 2, 3, 4, 5]
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
3.2.填充替换数字元素
1.填充替换数组全部元素
语法格式
- Arrays.fill(数字对象名,要替换的值)
- 例如:Arrays.fill(day,4)—>替换day数组中的全部元素–>替换为4
- 代码演示
//导入包
import java.util.Arrays;
import java.util.Scanner;
//类
public class MyNoo1{
//主函数
public static void main(String[] args) {
//创建键盘扫描仪
Scanner in=new Scanner(System.in);
//创建一个一维数组
int[] day=new int[5];
//for循环
for(int i=0;i<day.length;i++){
System.out.println("请输入第"+i+"位数字");
//循环输入信息 i为数组下标 此时i=0 那么day[i]-->day[0] 等下一次循环day[i]--->day[1].......
day[i]=in.nextInt();
}
//直接打印数组
System.out.println("替前打印数组"+ Arrays.toString(day));
//创建填充(替换)-->替换day数组里的全部元素替换为10
Arrays.fill(day,10);
//提示打印
System.out.println("填充替换数组中....");
//直接打印数组
System.out.println("替换成功...打印数组"+ Arrays.toString(day));
}
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 运行结果
请输入第0位数字
1
请输入第1位数字
2
请输入第2位数字
3
请输入第3位数字
4
请输入第4位数字
5
替换前
替换成功..打印数组[1, 2, 3, 4, 5]
填充替换数组中....
替换成功..打印数组[10, 10, 10, 10, 10]
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 可以看到当使用Arrays.fill时候替换了数组里的全部元素
2.指定填充替换数组元素
- 语法格式
- Arrays.fill(数组对象名,从哪里开始,到哪里结束,存储的值);
- 例如:Arrays.fill(day,2,4,5)—>数组下标2-4的下标位置的元素替换成5
- 假设数组(day)里有五个元素风别为45.12.1.47.10下标分别为0.1.2.3.4
- 指定替换元素Arrays.filll(day,1,2,8)—数组下标从1开始到2结束的元素替换成8
- 那么数组(day)就变成了45.8.1.47.10
- 代码演示
//导入包
import java.util.Arrays;
import java.util.Scanner;
//类
public class MyNoo1{
//主函数
public static void main(String[] args) {
//创建键盘扫描仪
Scanner in=new Scanner(System.in);
//创建一个一维数组
int[] day=new int[5];
//for循环
for(int i=0;i<day.length;i++){
System.out.println("请输入第"+i+"位数字");
//循环输入信息 i为数组下标 此时i=0 那么day[i]-->day[0]
//等下一次循环day[i]--->day[1].......
day[i]=in.nextInt();
}
//直接打印数组
System.out.println("指定替换前"+ Arrays.toString(day));
//指定填充数组 从数组下标2开始到数组下标4结束 替换为5
Arrays.fill(day,2,4,5);
//提示用户
System.out.println("指定替换中....");
//直接打印数组
System.out.println("替换成功...打印数组"+ Arrays.toString(day));
}
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 运行结果
请输入第0位数字
1
请输入第1位数字
2
请输入第2位数字
45
请输入第3位数字
35
请输入第4位数字
17
指定替换前[1, 2, 45, 35, 17]
指定替换中....
替换成功...打印数组[1, 2, 5, 5, 17]
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
4.数组排序
- 通过Arrays类的静态sort()方法可以实现对数组的排序.sort()方法提供了多种重载形式,可对任意类型的数组进行升序排序
- 语法格式
- Arrrays.sort(数组对象名)---->例如:Arrays.sort(day)
- 代码演示
public class MyNoo1{
public static void main(String[] args) {
//创建键盘扫描仪
Scanner in=new Scanner(System.in);
//创建一个一维数组
int[] day=new int[5];
//for循环
for(int i=0;i<day.length;i++){
System.out.println("请输入第"+i+"位数字");
//循环输入信息 i为数组下标 此时i=0 那么day[i]-->day[0]
//等下一次循环day[i]--->day[1].......
day[i]=in.nextInt();
}
//直接打印数组
System.out.println("数组排序前"+ Arrays.toString(day));
//排序
Arrays.sort(day);
//提示用户
System.out.println("排序中....");
//直接打印数组
System.out.println("排序成功...打印数组"+ Arrays.toString(day));
}
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 运行结果
请输入第0位数字
54
请输入第1位数字
20
请输入第2位数字
45
请输入第3位数字
64
请输入第4位数字
71
数组排序前[54, 20, 45, 64, 71]
排序中....
排序成功...打印数组[20, 45, 54, 64, 71]
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 注意:上面代码是对整数型数组进行排序,java中的String类型数组的排序算法是根据字典编排顺序的,因为数字排在字母前面,大写字母排在小写字母前面.