【Java学习4.6】深入数组(未完成)

来源:互联网 发布:webdriver调用js 编辑:程序博客网 时间:2024/06/06 03:16

这一节讲的是数组在内存中的存储机制。首先需要区分一组概念,什么是数组,什么是数组引用变量。

答:对于这个问题,可以这么解释。有这么一个东西,只要让他动起来,只要让他指向一个有效内存,他就可以访问数组元素。

其次,两者的存储方式似乎也不太一样。数据对象被存储在堆(heap)内存中,然而引用该数组对象的引用变量是存储在占栈内存中的。特别要说明的是在局部变量中,都是放在栈内存中的,用完即被销毁。堆内存会被反复利用最后清除。只有当一个引用变量没有被任何东西引用的时候,系统的垃圾回收器才会回收他。

package homework;public class mydemo {public static void main(String[] args) {int[] a = {5,7,20};int[] b = new int[4];System.out.println("b数组的长度是" + b.length);for(int i = 0 ,len = a.length ; i < len ; i++){System.out.println(a[i]);}for(int i = 0 ,len = b.length ; i < len ; i++){System.out.println(b[i]);}    //将a的数值给了b//b = a ;//b引用指向a引用指向的数组//System.out.println("b数组的长度是" + b.length);}}
输出的效果:b数组的长度是457200000b数组的长度是3

这一段其实就讲了两个东西。数组引用变量和数组本身。不知道这个例子解释的正确不正确:a[1] = 10。a[1]被称为数组引用变量,10代表数组本身。

二、基本类型数组的初始化

下面这个东西定义了int[]初始化,采用动态初始化的方式初始化了该数组。

package homework;public class mydemo {public static void main(String[] args) {    //定义一个int[]类型的数组变量//int[] iArr;iArr = new int[5];//在这里处理的时候所有的数据全是0.//for(int i = 0 ; i < iArr.length ; i++){iArr[i] = i + 10 ;}}}

三、引用类型数组的初始化

举个例子,这里使用了一个Person类,这是一个person类数组。

package homework;class Person{public int age;public double height ;public void info(){System.out.println("我的年龄是:" + age + ",我的身高是:" + height);}}public class mydemo {public static void main(String[] args) {    Person[] students;    students = new Person[2];    Person zhang = new Person();    zhang.age = 15 ;    zhang.height = 158 ;    Person lee = new Person();    lee.age = 16 ;    lee.height = 161 ;    students[0] = zhang ;    students[1] = lee ;    lee.info();    students[1].info();}}

四、没有多维数组

它的意思就是,本质上,二维数组就是一维数组的变形。

package homework;public class mydemo {public static void main(String[] args) {  int[][] a ;  a = new int[4][];  for(int i = 0 , len = a.length ; i < len ; i++)  {  System.out.println(a[i]);  }  a[0] = new int[2];  a[0][1] = 6 ;  for(int i = 0 , len = a[0].length;i<len;i++)  {  System.out.println(a[0][i]);  }}}


五、Java8增强工具类:Arrays

这是一个数据包。你可以通过调用这个数据包来去使用这里面的工具函数,下面依次举例说明。(大多是static的函数)

1.int binarySearch(type[ ] a,type key):利用二分法去寻找key元素在a中的索引。如果不包含key元素,则返回-1。(当然这也说明其中的必须得是升序排列。)

2.int binarySearch(type[ ] a,int fromIndex,int toIntex,type key):类似于上面的函数,但是这个是只在fromIndex到toIndex之间的数据中查找。

3.type[] copyOf(type[] orginal,int length):这个程序是复制一个original数组,新的长度为length。如果说original的长度比legnth大的话,把original数据length长度的保存在新的数据之中;如果original数据比length的数据小的话,把多余的赋值为0(数据类型),false(布尔类型),或者null(引用类型)。


原创粉丝点击