java 中的数组

来源:互联网 发布:eclipse更改端口号 编辑:程序博客网 时间:2024/05/16 16:22


引用:http://blog.csdn.net/dly215011/article/details/52575253

1.看待数组时,要把数组看成两部分:一部分是数组引用,即在代码中定义的数组引用变量;另一部分是实际的数组对象,这部分是在堆内存里运行的,通常无法直接访问,只能通过数组引用变量来访问。

2.定义并初始化一个数组之后,在内存中分配了两个空间,一个用于存放数组的引用变量,另一个用于存放引用变量所指向的数组本身。

栈内存中存储所定义并初始化的引用变量arr,堆内存中存储arr指向的4个数组arr[0],arr[1],arr[2],arr[3]

                                                                                      

1.       如果堆内存中数组不再有任何引用变量指向自己,则这个数组将变成垃圾,会被系统的自动回收机制回收。为了让垃圾回收机制回收一个数组所占用的内存空间,可以将该数组变量赋值为null

2.       数组的初始化:

(1)  声明和初始化分开

                  //声明

                  //int[]a;

                  inta[];

                  //申请空间,int数组默认初始值为0

                  a= newint[5];

                  //根据下标单个赋值初始化

                  a[0] =2;

                  //循环赋值

                  for(int i = 0; i < a.length; i++) {

                              a[i]= i;

                  }

(2) 声明初始化同时进行

                                                //int [] c ={1,3,4,5,6};

                                                //int c[] ={1,3,4,5,6};

                                                int c[] = new int[]{1,3,4,5,6};

静态初始化:初始化时由程序员显式指定每个数组元素的初始值,由系统决定数组长度,如:

 //只是指定初始值,并没有指定数组的长度,但是系统为自动决定该数组的长度为4

 String[] computers = {"Dell","Lenovo", "Apple", "Acer"};  //①

 //只是指定初始值,并没有指定数组的长度,但是系统为自动决定该数组的长度为3

String[] names = newString[]{"多啦A梦", "大雄", "静香"};  //②

动态初始化:初始化时由程序员显示的指定数组的长度,由系统为数据每个元素分配初始值,如:

//只是指定了数组的长度,并没有显示的为数组指定初始值,但是系统会默认给数组数组元素分配初始值为null

 String[] cars = new String[4];  //③

3.       数组和ArrayList比较

数组高效但是其容量固定且无法动态改变;长度不够就得再复制到另一个比较长的新数组中再使用。数组的效率比集合的效率高,各有侧重点

ArrayList底层是变长数组维护的,不需要定义其大小,如果长度不够了就会自动扩展为原来长度的一倍。

4.       数组的APIjava.util.Arrays  

常用方法

asList(T... a) //将输入的参数转换成List类型的数据

binarySearch(Object[] a, Object key)//通过二分查找方法,在指定的数组中查找指定的元素,并返回下标

copyOf(Object[] original, int newLength) //将数组复制到另外一个数组中

copyOfRange(Object[] original, int from,int to) //将给定数组的给定区间元素复制到新数组中

equals(Object[] a, Object[] a2) //判断两个数组是否相等,也就是长度和元素值是否一致

deepEquals(Object[] a1, Object[] a2) //常用来比较多维数组

fill(Object[] a, Object val) //将指定的基本数据类型值分配到指定基本类型数组的每一项

fill(Object[] a, int fromIndex, inttoIndex, Object val) //指定分配到指定的区间

sort(Object[] a)//增序排列

sort(Object[] a, int fromIndex, inttoIndex) //指定需要排序的数组区间

toString(Object[] a) //转换成字符串类型

 

附:栈内存:

     所有方法中定义的局部变量都是放在栈内存中的,随着方法的结束,这个方法的内存栈也将自然销毁

       堆内存:

      在程序中创建一个对象时,这个对象会被保存在一运行时的数据区里,以便反复利用,此数据区即为堆内存。

      每一个实体都有内存地址值,此内存地址存储在栈内存里。

原创粉丝点击