java中数组的相关操做
数组是相同类型变量的集合,可以使用共同的名字引用它。数组是一种特殊的数据类型,有以下的特点,一个数组所有的元素都是同一种数据类型,数组中的元素是有顺序的,数组的一个元素通过数组名和数组下标来确定。我想这几个特点我们都知道,我们学其他的语言时候,已经都知道了,但是java的数组和其他语言还是有不同的地方,在java中每一行的元素个数可以是不同的。
数组的创建需要两个步骤,1:声明一个数组;2:创建一个数组。在这里说明一下,什么一个数组,只是给声明的数组名分配了空间,并没有真正的数据。当我们创建一个数组时候,才将这个数组存储数据的地址指向数据的声明的名字。在java中数组可以是任意数据类型的。数组可以在创建的时候进行初始化,也可以在创建了之后对其初始化。下面就举例说明创建一个行列不等的二维数组。
int[][] arr = new int[3][];
arr[0] = new int[1];
arr[1] = new int[2];
arr[2] = new int[3];//具体的赋值读者自己实现
这样就创建了一个三行,第一行一个数据,第二行两个数据,第三行三个数据的int数组arr。
在Java中,所有的数组都有一个缺省的属性length,用于获取数组中元素的个数。在数组中我们用的比较多的就是后面的几个操做:1、数组的复制:System.arraycopy();2、数组的排序:Arrays.sort();3、在已排序的数组中查找某个元素:Arrays.binarySearch()。
下面先介绍System.arraycopy()方法,在java的帮助文档中:
public static void arraycopy(Object src,
int srcPos,
Object dest,
int destPos,
int length)
从指定源数组中复制一个数组,复制从指定的位置开始,到目标数组的指定位置结束。从 src 引用的源数组到 dest 引用的目标数组,数组组件的一个子序列被复制下来。被复制的组件的编号等于 length 参数。源数组中位置在 srcPos 到 srcPos+length-1 之间的组件被分别复制到目标数组中的 destPos 到 destPos+length-1 位置。
在运用这个方法的时候,注意数组复制的时候不要越界,比如我们数组中只有八个数据,但是我们赋值的时候长度写了九个,或者我们复制到的目的数组不能放下源数组想要赋值的数据,这样都会报出一个异常。还有一点需要注意,在java中的区间都是左开右闭的,比如我们写8到10,返回的结果是8和9。 下面有一个例子:
int[] num1=new int[]{1,2,3};
int[] num2=new int[10];
System.arraycopy(num1,1,num2,8,2);
for(int i=0;i<num2.length;i++)
{
System.out.println(num2[i]);
}
但是需要注意的如果数组是一个对象数组,在复制的时候,复制的数组的引用,虽然表面看着是复制出来了两个数组,但是操做的确实同一个地址空间中的数据,所以如果修改一个数组中的数据,同样也会影响另一个数组,这个大家自己写代码去实验。
在java中对于Arrays.sort()和arrays.bianrySearch()都进行了重载,大家可以自己参考java帮助手册去学习,注意一点,搜索函数是对一个已经排好序的数组进行搜索,所以这两个函数应该是配合使用的。下面我们举一个对象数组排序的例子(对象数组排序需要先实现Comparable接口中的compareTo()方法):
Student[] ss = new Student[]{
new Student(20, "zhanglan"),
new Student(23,"dafdsaf"),
new Student(32,"dadfads"),
new Student(20, "fjdaskfjk")
};
Arrays.sort(ss);
for(int i = 0;i<ss.length;i++)
{
System.out.println(ss[i]);
}
}
class Student implements Comparable
{
int num;
String name;
public Student(int num,String name)
{
this.num = num;
this.name = name;
}
public String toString()
{
return "nember="+num+","+"name="+name;
}
public int compareTo(Object o)
{
Student s = (Student)o;
//return num>s.num?1:(num == s.num?0:-1);//这句话实现的是按照学号排序,下面写的是如果学号相同的情况下按照姓名排序
int result = num>s.num?1:(num == s.num?0:-1);
if(0 ==result)
{
result = name.compareTo(s.name);
}
return result;
}
}
在compareTo()方法中,Object A.compareTo(Object B),如果A大于B返回1,A等于B返回0,A小于B返回-1。只要将compareTo()方法写好了,就能按照自己的方法对数组进行排序了。对于排序还可以实现java.util.Comparator接口。
数组对于我们编程很重要,希望对你有帮助。
------解决方案--------------------java没有多维数组。据说有个多维数组相关的jsr。
java中数组类型是被jre动态创建的。
------解决方案--------------------散分贴?
学习先
------解决方案--------------------
------解决方案--------------------善于总结的孩子前途无量啊
------解决方案--------------------学习啊!LZ无私。