为什么要有数组?
在生活当中,比如一箱牛奶有12包,你是整箱买还是单独买12包? -般情况下都是整箱购买,便于携带。
可以将数组理解为一个箱子,在数组里面可以存储同种数据类型的多个值,这样便于数据的使用。比如在
进行方法的参数传递时,需要传递10个in类型的参数,如果没有数组的话,需要写10个参数非常麻烦,使
用数组后,传递一-个数组即可。
什么是数组?
■数组是存储同一种数据类型多个元素的集合。也可以看成是一个容器。
.数组里面既可以存储基本数据类型,也可以存储引用数据类型,但是只能存储同-种数据类型。
■数组是一种简单的数据结构,线性的结构
■数组一旦创建其长度是不可变的
■数组是引用数据类型
数组的分类
■一维数组
■二维数组
■三维数组
■多维数组
如何定义数组?
示例:静态初始化-维数组
package com . monkey1024.arry;
public class ArrayTest01 {
public static void main (String[] args) {
/ /使用静态初始化的方式创建一维数组
int[] i = {1024, 2048, 256};
string[] str = {"java", "python", "C++", "php"};
object o1 = new Object() ;
Object o2 = new object() ;
object o3
= new object() ;
object[] obj = {01,02,03};|
I
}
一维数组
静态数组公式
package com . monkey1024.arry;
public class ArrayTest02 {
//静态初始化
public static void main (String[] args) {
int[] intArray = {10, 12,8};
Sys tem. out. println (intArray[0]) ;
System. out. println (intArray[1]) ;
Sys tem. out. println (intArray[2]) ;
// ArrayIndexOutofBoundsExcept ion数组越界
// System. out. println (intArray[3]) ;
System. out . println (intArray.length) ;
/ /遍历数组中的元素
for(int i=0; i<intArray. length; i++) {
System. out. println (intArray[i]) ;
}
}
}
动态数组
public class ArrayTest03 {
public static void main(String[] args) {
/ /动态创建一个长度是4的数组
int[] intArray = new int[4] ;
for(int i=0; i<intArray. length; i++) {
System. out. print1n (intArray[i]) ;
没有给数组值的话打印结果是0;doub类型是0.0;别的类型是null、
intArray[0] = 1024;
intArray[1] = 1025;
intArray[2] = 1026;
intArray[3] = 1027;
for(int i=0; i<intArray. length; i++) {
System. out. println (intArray[i]) ;
}
}
}
如何选择数组的初始化方式?
如果在创建数组的时候,知道数组中应该存储什么数据,这个时候当然采用静态初始化方式。
.如果在创建数组的时候,无法预测到数组中存储什么数据,只是先开辟空间,则使用动态初始化方
式。
两者最终的内存分布都是一样的。
方法调用传递数组
public class
ArrayTest04 {
public static void main (String[] args) {
int[] intArray = {10,15,8, 7};
m1 (intArray) ;
for (int i=0; i<intArray. length; i++) {
Sys tem. out. println (intArray[i]) ;
}
public static void m1 (int[] a) {
//for(int i=0; i<a. length;i++) {
//System. out. println(a[i]) ;
//}
a[1] = 55;
}
}
练习
获取一个int类型数组中的最大值
无参的
public class MaXArray {
public static void main (String[] args) {
int[] arr = {8,19,20,100, 6, 10};
int max = arr[0]; / /假设数组中的第-个元素的值是最大的
for (int i=1; i<arr.length; i++) {//从数组中的第二个元素开始遍历
if (max < arr[i]){/ /如果max小于数组中的值时
max=arr[i];//将数组中的值赋值给max
}
}
System. out. println (max) ;
}
}
有参的 有返还值
public static void main (String[] args) {
int[] arr = {8,19, 20,100,6, 10};
int max = getMax(arr) ;
System. out. println (max) ;
}
publid static int getMax(int[] arr) {
int max = arr[0]; / /假设数组中的第一个元素的值是最大的
for (int i=1; i<arr.length; i++) {//从数组中的第二个元素开始遍历
if (max < arr[i]) { / /如果max小于数组中的值时
max=arr[i];//将数组中的值赋值给max
}
}
return max;
}
}
练习
将数组元素的值对调,比如将array[0]与最后一个元素对调,array[1]与倒数第二个对调
无参构造
public static void main (String[] args) {
int[] arr = {8,19, 88,20, 100,6,10};
// arr[0]和arr [arr. length-1 - 0]对调
// arr[1]和arr [arr. length-1 - 1]对调
// arr[2]和arr [arr.length-1 - 2]对调
// arr[4]和arr [arr. length-1 - 3]对调
for (int i=0; i<arr .length/2; i++) {
int temp = arr[i] ;
arr[i] = arr [arr. length-1 - i] ;
arr [arr. length-1一i] =temp;
}
for (int i=0; i<arr.length; i++) {
System. out.print (arr[i]) ;
System. out.print(",") ;
}
}
有参构造 无返还值
public static void main (String[] args) {
int[] arr = {8,19,88,20, 100,6,10};
reverseArray(arr) ;
for(int i=0; i<arr.length; i++) {
System. out.print (arr[i]) ;
System. out.print(",") ;
}
}
public static void reverseArray (int[] arr) {
for (int i=0; i<arr .length/2; i++) {
int temp = arr[i] ;
arr[i] = arr [arr. length-1 - i] ;
arr [arr. length-1 - i] = temp;
}
}
}