题记:
对于java数组的整理,使调理化。个人理解是数组是一个存储数据容器,优点是内存大小可控,这也恰恰是它缺点,容器容量是不变的。解决这问题便是集合。好久好久不用了,有种莫名的感觉……
一、初始化:(定义,分配空间,赋值这三步;注意堆与栈之间的关系,定义---栈,赋值---堆)
1.动态初始化:数组定义与为数组分配空间和赋值的操作分开进行;
2.静态初始化:在定义数字的同时就为数组元素分配空间并赋值;
3.默认初始化:数组是引用类型,它的元素相当于类的成员变量,因此数组分配空间后,每个元素也被按照成员变量的规则被隐士初始化。
参考:http://developer.51cto.com/art/200906/128274.htm
二、二维数组
对二维复合数据类型的数组,必须首先为最高维分配引用空间,然后再顺次为低维分配空间。而且,必须为每个数组元素单独分配空间。
例如:
int a[][] = new int[2][];
//a[0] = 1; //错误
a[0] = new int[2];//分配堆空间
a[0][0] = 1;//真实存值
a[0][1] = 2;
a[1] = new int[2];
a[1][0] = 21;
a[1][1] = 22;
多维数组在二维数组基础上迭代
理解:
一维数组是一行队列
二维数组是多行队列
三、工具类
java.util.Arrays类能方便地操作数组,它提供的所有方法都是静态的。具有以下功能:(增删改查,多了排序,比较相等)
1.给数组赋值:通过fill方法。
2.对数组排序:通过sort方法,按升序。(据说是一种优化了算法,反正看源码看的头疼……)
3.比较数组:通过equals方法/hashCode方法比较数组中元素值是否相等。
4.查找数组元素:通过binarySearch方法能对排序好的数组进行二分查找法操作
例如:
int[] array = new int[5];
//填充数组
Arrays.fill(array, 5);
System.out.println("填充数组:Arrays.fill(array, 5):");
TestArrays.output(array);
//将数组的第2和第3个元素赋值为8,必须的连续
Arrays.fill(array, 2, 4, 8);
System.out.println("将数组的第2和第3个元素赋值为8:Arrays.fill(array, 2, 4, 8):");
TestArrays.output(array);
int[] array1 = {7,8,3,2,12,6,3,5,4};
//对数组的第2个到第6个进行排序进行排序
Arrays.sort(array1,2,7);
System.out.println("对数组的第2个到第6个元素进行排序进行排序:Arrays.sort(array,2,7):");
TestArrays.output(array1);
//对整个数组进行排序
Arrays.sort(array1);
System.out.println("对整个数组进行排序:Arrays.sort(array1):");
TestArrays.output(array1);
//比较数组元素是否相等
System.out.println("比较数组元素是否相等:Arrays.equals(array, array1):"+"\n"+Arrays.equals(array, array1));
int[] array2 = array1.clone();
System.out.println("克隆后数组元素是否相等:Arrays.equals(array1, array2):"+"\n"+Arrays.equals(array1, array2));
//使用二分搜索算法查找指定元素所在的下标(必须是排序好的,否则结果不正确)
Arrays.sort(array1);
System.out.println("元素3在array1中的位置:Arrays.binarySearch(array1, 3):"+"\n"+Arrays.binarySearch(array1, 3));
//如果不存在就返回负数
System.out.println("元素9在array1中的位置:Arrays.binarySearch(array1, 9):"+"\n"+Arrays.binarySearch(array1, 9));
}
细节:
1.java中 数组a = 数组b 中仅仅是地址的传递,而不是值的复制
import org.junit.Test;
public class ArrayTest {
@Test
public void add()
{
int[] a = new int[5];
System.out.println(a);
for(int i=0; i<5; i++)
{
System.out.print("第" + i + "=" + a[i]+"; ");
}
int[] b = {1,2,3,4,5};
a = b;//把b赋值给a
System.out.println(a);
for(int i=0; i<5; i++)
{
System.out.print("第" + i + "=" + a[i]+"; ");
}
a[4]=10;//改变a中元素
for(int i=0; i<5; i++)
{
System.out.print("第b" + i + "=" + b[i]+"; ");
//返回中b中的元素也改变了,说明是b给a之是传递了地址
//而值存在堆中,a,b共用一个堆
}
}
}
本文详细介绍了Java数组的基础概念,包括一维数组与二维数组的初始化、默认初始化方式、数组的使用及注意事项,并深入探讨了如何利用java.util.Arrays工具类对数组进行高效操作。
215

被折叠的 条评论
为什么被折叠?



