目录
这里主要介绍我们的增强的for循环 :for-each遍历法:
学习大纲
一维数组
一维数组的概念
数组的定义:
数组是相同类型数据的有序集合。其中,每一个数据称作一个元素,每个元素可以通过一个索引(下标)来访问它们。数组的四个基本特点:
1、长度是确定的,数组一旦被确定,长度就不可以被改变;
2、其元素类型必须是相同类型的元素,不允许出现混合类型。
3、数组类型可以是任何数据类型,包括基本类型和引用类型。
4、数组变量属于引用类型,数组也是对象,数组中的元素相当于对象的属性。
数组的使用
创建数组以及初始化
//数组声明方式,以一维数组为例
{
type[] arr_name;
type arr_name[];
}
需要注意的是:
(1)数组在声明时候没有实例化任何对象,JVM不会分配空间给它,只有在实例化对象的时候 ,JVM才会分配空间,这时才与长度有关。
(2)声明一个数组的时候并没有数组真正被创建。
(3)构造一个数组,必须指定长度。
package com;
public class Array {
public static void main(String[] args) {
int[] arr; //声明数组
arr = new int[10]; //给数组分配空间
for(int i = 0;i<10;i++){
arr[i] = i*2+1; //给数组赋值,数组是对象,数组中的元素就是对象的属性
}
for(int i = 0;i<10;i++){
System.out.println(arr[i]); //输出数组
}
}
}
输出结果:
图示上述运行过程中内存变化:
我们来创建一个引用型一维数组:
package com;
public class quoteArray {
public static void main(String[] args) {
Stu[] s; //声明引用类型数组
s = new Stu[10];
Stu s1 = new Stu(1,10);
Stu s2 = new Stu(2,20);
s[0] = s1;
s[1] = s2;
System.out.println(s[0]);
System.out.println(s[0].getAge());
System.out.println(s[0].getId());
}
}
class Stu{
private int id;
private int age;
public Stu(int id, int age) {
this.id = id;
this.age = age;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
存储结构中的改变:
运行结果:
数组的三种初始化方法:
(1)静态初始化;
int[] arr3 = {1,2,3,4,5};
Stu[] s3 = {new Stu(3,40),new Stu(4,40)};
(2)动态初始化;
Stu s1 = new Stu(1,10);
Stu s2 = new Stu(2,20);
s[0] = s1;
s[1] = s2;
int[] arr; //声明数组
arr = new int[10]; //给数组分配空间
(3)默认初始化;
String[] arr4 = new String[2];//默认值: 0,0
boolean[] arr5 = new boolean[2]; //默认值:false,false
数组的遍历
这里主要介绍我们的增强的for循环 :for-each遍历法:
package com;
public class traverseArray {
public static void main(String[] args) {
String[] location = {"北京","上海","广州","深圳"};
// for循环遍历
for(int i = 0;i<4;i++){
System.out.println(location[i]);
}
// for-each增强的for循环 遍历法
// for-each专门用于读取数组或容器中所有的元素。
for (String t:location) {
System.out.println(t);
}
}
}
这是java提供给我们比较便利的读取容器或数组的遍历方法,这就相当于我们在for循环中这样写:
for(int i = 0;i<4;i++){
String t = location[i];
System.out.println(location[i]
}
数组的拷贝
System.arraycopy(object src,int srcpos,object dest, int destpos,int length)
该方法可以将src数组中的值复制给dest数组,其中srcops指定从第几个元素开始赋值,length指定将多少个元素赋值给dest数组。
package com;
public class traverseArray {
public static void main(String[] args) {
int a[] = { 13, 14,33 ,45 ,65,98,52,65,85};
int[] b = new int[10];
System.arraycopy(a,0,b,0,a.length);
for(int i:b){
System.out.print(i+"\t");
}
}
}
运行结果:
java.util.Arrays类
Arrays类包含了:排序、查找、填充、打印内容等常见的数组操作。
【示例】使用Arrays类输出数组中的元素
package com;
import java.util.Arrays;
public class traverseArray {
public static void main(String[] args) {
int a[] = { 13, 14,33 ,45 ,65,98,52,65,85};
// 打印数组引用地址值
System.out.println(a);
// 打印数组的值
System.out.println(Arrays.toString(a));
}
}
/*
* 此处的Arrays.toString()方法是Arrays类的静态方法,不是前面讲的Object的toString()方法。
*
*/
输出结果:
利用Arrays数组方法进行排序:
package com;
import java.util.Arrays;
import static java.util.Arrays.sort;
public class traverseArray {
public static void main(String[] args) {
int a[] = { 13, 14,33 ,45 ,65,98,52,65,85};
// 使用Arrays数组对所有元素进行排序
System.out.println(Arrays.toString(a));
sort(a);
System.out.println(Arrays.toString(a));
}
}
输出结果:
【示例】使用Arrays类实现二分法查找法:
package com;
import java.util.Arrays;
import static java.util.Arrays.sort;
public class traverseArray {
public static void main(String[] args) {
int a[] = { 13, 14,33 ,45 ,65,98,52,65,85};
// 使用Arrays数组对所有元素进行排序
System.out.println(Arrays.toString(a));
// static方法
Arrays.sort(a);
// 用二分法查找必须先对数组进行排序
System.out.println(Arrays.toString(a));
System.out.println("该元素的索引:"+Arrays.binarySearch(a,65));
}
}
运行结果:
示例】使用Arrays类对数组进行填充
package com;
import java.util.Arrays;
import static java.util.Arrays.sort;
public class traverseArray {
public static void main(String[] args) {
int a[] = { 13, 14,33 ,45 ,65,98,52,65,85};
// 使用Arrays数组对所有元素进行排序
System.out.println(Arrays.toString(a));
// static方法
Arrays.sort(a);
// 用二分法查找必须先对数组进行排序
System.out.println(Arrays.toString(a));
Arrays.fill(a,2,4,0); //将数组a数组的索引序列[2,4)的元素替换为0
System.out.println(Arrays.toString(a));
}
}
运行结果为:
二维数组
二维数组属于多维数组的范畴:多维数组可以看成以数组为元素的数组。可以有二维、三维、甚至更多维数组,但是实际开发中用的非常少。最多到二维数组(学习容器后,我们一般使用容器,二维数组用的都很少)。
二维数组的声明:
package com.TwoDimensionArray;
public class doubleArray {
public static void main(String[] args) {
// 二维数组的声明
// Java中多维数组的声明和初始化应该从低维到高维的顺序进行
int [][] a = new int[3][];
a[0] = new int[2];
a[1] = new int[3];
a[2] = new int[4];
// int a1[][] = new int[][4];非法
}
}
二维数组的静态初始化:
package com.TwoDimensionArray;
public class doubleArray {
public static void main(String[] args) {
//二维数组的静态初始化
int a[][] = {{1,2,3},{4,5},{7,88,99,18}};
System.out.println(a[2][3]);
}
}
//输出18
上述代码在内存中的存储模型如下所示:
接下来讲解一下二维数组的动态初始化:
package com.TwoDimensionArray;
import java.util.Arrays;
public class doubleArray {
public static void main(String[] args) {
// 二维数组的动态初始化
int[][] a = new int[3][];
// a[0] = {1,2,5};语法错误,未声明类型
a[0] = new int[]{1,2,3};
a[1] = new int[]{11,12,13};
a[2] = new int[]{21,22,23};
System.out.println(a[2][1]);
System.out.println(a[2][2]);
System.out.println(Arrays.toString(a[1]));
}
}
运行结果:
数组存储表格数据
表格是计算机世界最普遍的模型。大家在互联网上看到的所有数据本质上都是“表格”。
ID | 姓名 | 年龄 | 职能 | 入职日期 |
---|---|---|---|---|
1001 | 码子哥 | 18 | 校长 | 02-14 |
1002 | 小码子 | 19 | 老师 | 01-10 |
1003 | 码子弟 | 20 | 学员 | 05-15 |
我们观察表格,发现每一行可以使用一个一维数组存储。
注意事项
- 此处基本数据类型
1001
,本质不是Object对象。JAVA编译器会自动把基本数据类型“自动装箱”成包装类对象。package com.TwoDimensionArray; import java.util.Arrays; /* * Object制造二维数组 * */ public class Test { public static void main(String[] args) { Object[] a1 = {1001,"码子哥",18,"校长","02-14"}; Object[] a2 = {1002,"小码子",18,"老师","01-10"}; Object[] a3 = {1003,"码子弟",18,"学生","05-15"}; Object[][] arr = new Object[3][]; arr[0] = a1; arr[1] = a2; arr[2] = a3; System.out.println(Arrays.toString(arr[0])); System.out.println(Arrays.toString(arr[1])); System.out.println(Arrays.toString(arr[2])); } }
运行结果:
我们用JavaBean和一维数组表示表格数据:
package com.TwoDimensionArray; import java.util.EmptyStackException; /* * 用javaBean和数组保存表格数据 * * */ public class Test { public static void main(String[] args) { Emp[] emps = { new Emp(1001, "码子哥", 18, "校长", "02-14"), new Emp(1002, "小码子", 18, "老师", "01-10"), new Emp(1003, "码子弟", 18, "学生", "05-15") }; for (Emp e:emps){ System.out.println(e); } } } class Emp{ private int id; private String name; private String major; private int age; private String date; @Override public String toString() { return "Emp{" + "id=" + id + ", name='" + name + '\'' + ", major='" + major + '\'' + ", age=" + age + ", date='" + date + '\'' + '}'; } public int getId() { return id; } public void setId(int id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getMajor() { return major; } public void setMajor(String major) { this.major = major; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } public String getDate() { return date; } public void setDate(String date) { this.date = date; } public Emp(int id, String name, int age, String major, String date) { this.id = id; this.name = name; this.age = age; this.major = major; this.date = date; } } //
运行结果:
-
以上Java中数组使用的多种方式的讲解了,有问题评论私信我,我们一起讨论!