数组是一种非常常见的数据结构,在java中,数组属于引用型数据,所以在数组的操作过程中,会有分配内存问题.
1.一维数组
2.数组的定义格式(动态操作格式).
格式一:声明并开辟数组(也可称为实例化数组)
数据类型 数组名称 []=new 数据类型 [长度];
数据类型 [] 数组名称 =new 数据类型 [长度];
格式二:分步完成.
声明数组: 数据类型 数组名称 []=null;
开辟数组: 数据名称 =new 数据类型[长度];
当数组开辟完空间后,可以利用"数组名称[索引]“的方式来操作数组,而索引的范围为0~数组长度-1,数组的长度取得为"数组名称.length”.
3.下面我们采用格式一定义使用数组.
运行结果
定义了int数组,我们使用new开辟内存空间,栈内存(data),堆内存保存的索引元素的值.
为数组进行内存分配及操作流程和对象操作几乎是一样的,只不过对象之中保存的是属性,在在数组之中保存的是各个索引元素的数值.
4.既然数组是引用数组类型,则也一定可以进行引用传递.
运行结果
采用了数组引用传递操作修改了数组的内容,当程序执行到了"int temp[]=data"语句时,就表示了temp和data同时指向同一块的堆内存空间,而后通过temp数组名称修改了里面第一个元素的内容,而data数组第一个元素也会改变.
5.我们采用格式二定义数组
先声明后开辟空间的方式完成,栈内存为(data),堆内存为null.使用数组前必须开辟空间.
运行结果
6.数组的静态初始化
数组的动态初始化在开辟空间后的所有内容都是其对应数据类型的默认值,那么也可以使用静态初始化方式为数组开辟空间时设置好指定的内容.
简写格式一:
数据类型 数组名称[]={值,值,…};
数据类型[] 数组名称={值,值,…};
完整格式(推荐使用).
数据类型 数组名称 []=new 数据类型 []{值,值,…};
数据类型 [] 数组名称 =new 数据类型[]{值,值,…};
7.下面代码讲解
运行结果
采用静态方式对数组进行定义,默认的内容就不再是其对应数据类型默认值.开发中使用何种数组初始化的方式并没有一个明确的定义,还是看功能,如果知道了所有的操作数据,那么使用静态的初始化比较合适;如果数据还需要单独配置,那么使用动态初始化比较合适.
8.判断数据是否在数组中.
运行结果
9.在方法里修改数组的内容
运行结果
是将数组传递到了in()方法之中,而在in()方法里面会将每一个元素称2在保存,最后在使用print()方法输出修改后的数组内容.
10.数组的排序操作
数组排序指的是将一个无序的数组,按照由小到大的顺序排列的一种操作,可以使用冒泡算法,对数组进行排序操作,冒泡算法指的是每次取出的一个数据与后面的数据进行两两比较,将数值小的数据放到前面.
运行结果
数组排序
运行结果
11.二维数组
之前所定义的数组只有一个"[]",表示一维数组,如果有两个"[]"就表示二维数组.
一维数组是一个行的话,那么二维数组就是一张表的形式,需要通过行和列两个索引才能定位一个数据.
格式一:
动态初始化
数据类型 数组名称 [][]=new 数据类型 [行数][列数];
格式二:
静态初始化
数据类型 数组名称 [][]=new 数据类型[][]{ {值,值,…},{值,值,…},{值,值,…},…};
定义二维数组
运行结果
本程序采用二维数组,但是这个二维数组定义的列数据的个数并不相同,通过两层循环输出全部数组内容.
12.对象数组
前面所讲的全部数组,都属于基本的数组,但是如果想要表达对象,那么就需要对象数组的概念,而对象数组定义个数和之前完全一样,只要把数据类型换成类即可.
格式一:对象数组的动态初始化,默认情况里面元素值null.对对象实例化操作.
类名称 对象数组名称 =new 类名称[长度];
格式二:对象数组的静态初始化操作
类名称 对象数组名称 =new 类名称[]{实例化对象,实例化对象,…};
13.动态对象数组初始化
package lesson11;
class Person6{
private String name;
private int age;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public Person6(String n,int a){
name=n;
age=a;
}
public String getInfo(){
return "姓名"+name+",年龄:"+age;
}
}
public class TestDemo20 {
public static void main(String[] args) {
Person6 person6[]=new Person6[3]; //对象数组
person6[0]=new Person6("芷若",18); //实例化对象
person6[1]=new Person6("谢逊",60); //实例化对象
person6[2]=new Person6("张三丰",100); //实例化对象
for (int x=0;x<person6.length;x++){
System.out.println(person6[x].getInfo());
}
}
}
运行结果
14.对象数组的静态初始化
package lesson11;
class Person6{
private String name;
private int age;
// public String getName() {
// return name;
// }
//
// public void setName(String name) {
// this.name = name;
// }
//
// public int getAge() {
// return age;
// }
//
// public void setAge(int age) {
// this.age = age;
// }
//
public Person6(String n,int a){
name=n;
age=a;
}
public String getInfo(){
return "姓名"+name+",年龄:"+age;
}
}
public class TestDemo20 {
public static void main(String[] args) {
Person6 person6[]=new Person6[]{
new Person6("芷若",18),new Person6("谢逊",60),
new Person6("张三丰",100)} ;//对象输出数组
for(int x=0;x<person6.length;x++){ //循环输出
System.out.println(person6[x].getInfo()); }; //对象数组
// person6[0]=new Person6("芷若",18); //实例化对象
// person6[1]=new Person6("谢逊",60); //实例化对象
// person6[2]=new Person6("张三丰",100); //实例化对象
// for(int x=0;x<person6.length;x++){ //循环输出
// System.out.println(person6[x].getInfo());
// }
}
}
运行结果
对象数组最大的好处是将多个对象进行了统一管理,只是除了数据类型改变之外,和之前的数组也没有任何区别,而且数组本身就属于引用数据类型,那么对象数组就是在一个引用数据类型中嵌入了其他的引用数据类型.