p59
数组基础数组是相同类型(但可以是引用类型也可以是基本类型)数据的有序集合,其中的每一个数据称为数组元素,每个数组元素可以通过一个下标来访问它们。
声明数组变量:数据类型[] 数组名(常用)/但也可数据类型 数组名[](不推荐,此为c中常用)
使用new创建数组:数据类型[] 数组名=new 数据类型[数组长度]
数组的元素通过索引访问,数组索引从0开始。
获取数组长度可用 数组名.length(数组的长度是不可变的,如果下标越界则会报错:ArrayIndexOutofBoundsException
内存分析java的内存分为:
-
堆:存放new的对象和数组,可被所有的线程(?)共享,不会存放别的线程引用。
-
栈:存放基本变量类型(包含这个变量的基础数值)和引用对象的变量(会存放这个引用在堆里的具体数值)
-
方法区:(没细讲,先不管)
静态初始化:int[] a={1,2,3} 或 Man[] mans={New Man(1,1),New Man(2,2)}(后者我还不理解)
动态初始化:int[] a= new int[3]
数组的默认初始化:数组是引用类型,它的元素相当于类的实例变量,因此数组一经分配空间,其中的每个元素也按照实例变量的方式被隐式初始化。(数组本身就是对象,数组元素相当于对象的成员变量,数组对象本身是在堆中的)
数组的使用-
普通的for循环
-
for-each循环(即之前提到过的用于数组的增强型for循环:for (元素类型 要循环的元素名称:要循环的数组),但是没有下标,只能遍历数组中的每一个元素)
-
数组作方法入参
-
数组做返回值
定义方式如int a[] [] =new int[2] [5] (可看作一个二行五列的数组)
Arrays类数组的工具类java.util.Arrays
具有且不止具有以下功能:(可查看API帮助文档)
-
给数组赋值:通过fill方法。
-
对数组排序:通过sort方法,按照升序。
-
比较数组:通过equals方法比较数组中元素值是否相等。
-
查找数组元素:通过binarySearch对排序好的数组进行二分法查找法操作。
-
打印数组元素:toString
就当先简单了解一下吧,大数字不断向一段浮动,小数字不断向一段浮动,形同冒泡,故称之为冒泡排序。简单的代码如下(时间复杂度为O(n2)啥意思我也不懂):
public static void main(String[] args) {
int[] array={1,4,6,7,9,45,2,7,8};
for(int a:bubbleArray(array)) {
System.out.println(a);
}
}
public static int[] bubbleArray(int[] arrays){
int temp;
for(int a=0;a //冒泡轮数是数组元素数减一
for(int b=0;b
if(arrays[b]>arrays[b+1]){
temp=arrays[b+1];
arrays[b+1]=arrays[b];
arrays[b]=temp;
}
}
}
return arrays;
}
稀疏数组
我真的得说,这真是我目前写过的最长最复杂的代码…
public static void main(String[] args){
int[] [] array1=new int[11] [11];//原始棋盘数组
array1[1] [2]=1;
array1[2] [3]=2;
for(int[] a:array1){
for(int b:a){
System.out.print(b+"t");
}
System.out.println();
}
System.out.println("===============================");
int sum=0;//输出稀疏数组
for(int[] s:array1){
for(int su:s){
if(su!=0){
sum++;
}
}
}
System.out.println("有效元素数量为:"+sum);
int[] [] array2=new int[sum+1] [3];
array2[0] [0]=array1.length;
array2[0] [1]=array1.length;
array2[0] [2]=sum;
int c=0;
for(int i=0;i
for(int j=0;j
if(array1[i] [j]!=0){
c++;
array2[c] [0]=i;
array2[c] [1]=j;
array2[c] [2]=array1[i] [j];
}
}
}
System.out.println("稀疏数组为:");
for(int[] a:array2){
for(int b:a){
System.out.print(b+"t");
}
System.out.println();
}
System.out.println("===============================");
int[] [] array3=new int[array2[0] [0]] [array2[0] [1]];//还原棋盘数组
for(int i=1;i
array3[array2[i] [0]] [array2[i] [1]]=array2[i] [2];
}
System.out.println("还原数组:");
for(int[] a:array3){
for(int b:a){
System.out.print(b+"t");
}
System.out.println();
}
}
于是再附一段运行结果吧:
0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 =============================== 有效元素数量为:2 稀疏数组为: 11 11 2 1 2 1 2 3 2 =============================== 还原数组: 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
累辽,本来今天想直接开面向对象的,没想到数组这么猛(当然也有可能是因为我摸鱼打了好几把ygo嘿嘿嘿)



