日期:2017/10/10
一、Java数组的相关知识
1.1 一维数组
(1)数组:存储同一种数据类型的多个元素的集合,每个元素都有编号,从0开始,最大编号是数组的长度-1
(2)数组的格式:
A:数据类型[] 数组名;
B:数据类型 数组名[];
(3)数组的初始化:
A:动态初始化 只给长度,不给元素
int[] arr = new int[3];
B:静态初始化 不给长度,给元素
int[] arr = new int[]{1,2,3};
简化版:int[] arr = {1,2,3};
(4)java中的内存分配
A:栈 存储局部变量
B:堆 new出来的
C:方法区
D:本地方法区
E:寄存器
(5)两个常见小问题
A:数组越界
B:空指针异常
(6)数组常见操作 获取数组长度:数组名.length
A:数组遍历
B:获取最值
C:数组反转
D:查表法
E:查找指定元素第一次出现的索引
练习代码:
package com.java.myself;
import java.util.Scanner;
public class ArrayTest {
public static void main(String[] args){
int[] arr = {1,2,3,4,6,5,7,8};
String[] strarray = {"","星期一","星期二","星期三","星期四","星期五","星期六","星期日"};
//查表法
Scanner sc = new Scanner(System.in);
System.out.println("Please input num(1-7): ");
int index = sc.nextInt();
System.out.println("Your searching date is: "+ strarray[index]);
// printArray(arr);
// getMax(arr);
// reverse(arr);
int index1 = indexOfArray(arr,8);
System.out.println(index1);
}
public static void printArray(int[] arr) {
System.out.print("[");
for (int i=0; i<arr.length; i++) {
if (i <= arr.length-1) {
System.out.print(arr[i] +", ");
}
System.out.print(arr[i]);
}
System.out.println("]");
}
//最值
public static int getMax(int[] arr) {
int max = arr[0];
for (int i=0; i<arr.length; i++) {
if (arr[i] > max) {
max = arr[i];
}
}
return max;
}
public static void reverse(int[] arr){
for (int start=0,end=arr.length-1; start<=end; start++,end--){
int temp = arr[start];
arr[start] = arr[end];
arr[end] = temp;
}
int i = 0;
while(i<arr.length){
System.out.println(arr[i]);
i++;
}
}
public static int indexOfArray (int[] arr,int key){
int index = -1;
for (int i=0; i<arr.length; i++){
if (arr[i] == key){
index = i;
}
}
return index;
}
}
1.2 二维数组
(2)格式:
A:数据类型[][] 变量名 = new 数据类型[m][n];
B:数据类型[][] 变量名 = new 数据类型[m][];
C:数据类型[][] 变量名 = new 数据类型[][]{{元素...},{元素...},{元素...}};
数据类型[][] 变量名 = {{元素...},{元素...},{元素...}};
(3)常见操作:
A:数组遍历
B:求和案例
练习代码:
package com.test;
public class TwoDemension {
public static void main(String[] args){
int[][] arr = new int[3][2];
System.out.println(arr);//[[I@7d3598c3
System.out.println(arr[0]); //[I@57125f92
System.out.println(arr[2]);
System.out.println(arr[1]);
System.out.println("***********");
int [][] arr1 = new int[3][];
System.out.println(arr1);//[[I@7d3598c3
System.out.println(arr1[0]);//null
System.out.println(arr1[2]);//null
System.out.println(arr1[1]);//null
/*
* 从输出log可以看到,当二维数组没有声明二维元素数量时,内存并未分配相应的
* 空间,当二维元素确定数量后,首地址便会被分配,即Java的堆内存。
* */
arr[0] = new int[3];
arr[1] = new int[1];
arr[2] = new int[2];
System.out.println(arr[0]);
System.out.println(arr[2]);
System.out.println(arr[1]);
arr[2][1] = 100;
arr[0][2] = 200;
System.out.println(arr[0][2]);
System.out.println(arr[2][1]);
System.out.println("***********");
Demo demo = new Demo();
demo.test(null);
}
}
class Demo{
public static void test(String[] args){
/*
* 当初始化时直接分配变量时,内地址也会分配,跟第一个情况一样。
* */
int [][] arr = {{4,5,6},{5,5,5,6},{5,4}};
System.out.println(arr);
System.out.println(arr[0]);
System.out.println(arr[1]);
System.out.println(arr[2]);
}
}
输出情况:
[[I@15db9742
[I@6d06d69c
[I@7852e922
[I@4e25154f
***********
[[I@70dea4e
null
null
null
[I@5c647e05
[I@33909752
[I@55f96302
200
100
***********
[[I@3d4eac69
[I@42a57993
[I@75b84c92
[I@6bc7c054
END.