07-08
26
数组,Array
作者:Java伴侣 日期:2007-08-26
数组
每一个数组都有一个属性.length,可以用于获取数组中元素的个数,例如,定义了如下一个数组, int[] in=new int[]{12,3,4},则in.length等于3。
学习到了3个有用的对于数组进行操作的method,一个是在java.lang.system类下的arraycopy方法,其函数原型如下public static void arraycopy(Object src,int srcPos,Object dest, int destPos, int length),各参数的含义从左至右如下,来源数组名,开始拷贝的位置,目的数组名,目的位置,拷贝的长度(元素个数),使用这个方法必须注意数组的越界问题,而且必须捕获该函数抛出的一个IndexOutOfBoundsException异常。另在java.util.Arrays 类下,有Arrays.sort(),和Arrays.binarySearch(数组名,查找元素),前者用于实现数组排序,后者用于在已经实现排序的数组中进行查找,二者都有多个重载。
对于Arrays.sort()而言,如果要排序的数组中的元素是某个类的对象,则要求该类实现Comparable接口,该接口中仅有一个方法即public int compareTo(Object o),要求在子类中实现这个方法,注意它的返回值是一个int类型。
以下是我自己写的一个.java程序,包含了以上我讲到的所有知识点,并另重写了toString()方法用于实现类对象的输出,作为一个复习。在jdk1.5下编译运行通过。import java.util.Arrays;
class Student implements Comparable
{
int num;
String name;
Student(int n,String na)
{
this.num=n;
this.name=na;
}
public int compareTo(Object o) //用于实现引用类型比较的compareTo()方法
{
Student s=(Student)o;
int flag=(this.num>s.num)?1:(this.num-s.num);
if(flag==1)
{
return flag;
}
else
{
return this.name.compareTo(s.name);
}
}
public String toString() //重写用于打印的toString()方法
{
return ("num="+this.num+",name="+this.name);
}
}
class TestArray
{
public static void main(String[] args)
{
int[] in=new int[]{1,2,4,3};
Arrays.sort(in); //排序,在包java.util中
for(int i=0;i<in.length;i++) //数组的.length属性用于返回数组元素的个数
{
System.out.println(in[i]);
}
int[] in1=new int[4];
try
{
System.arraycopy(in,0,in1,0,in.length); //数组拷贝
}
catch(Exception e)
{
System.out.println(e.toString());
}
for(int i=0;i<in1.length;i++)
{
System.out.println(in1[i]);
}
int index=Arrays.binarySearch(in,3); //在已经排序好的数组中查找,在包java.until中
System.out.println("index="+index);
Student[] st=new Student[]{new Student(3,"li"),new Student(3,"wang"),new Student(2,"y")};
Student[] st1=new Student[3];
Arrays.sort(st);
for(int j=0;j<st.length;j++)
{
System.out.println(st[j]);
}
int index1=Arrays.binarySearch(st,new Student(3,"li"));
System.out.println("index1="+index1);
try
{
System.arraycopy(st,0,st1,0,st.length);
}
catch(IndexOutOfBoundsException e)
{
e.printStackTrace();
}
for(int j=0;j<st1.length;j++)
{
System.out.println(st1[j]);
}
}
}
每一个数组都有一个属性.length,可以用于获取数组中元素的个数,例如,定义了如下一个数组, int[] in=new int[]{12,3,4},则in.length等于3。
学习到了3个有用的对于数组进行操作的method,一个是在java.lang.system类下的arraycopy方法,其函数原型如下public static void arraycopy(Object src,int srcPos,Object dest, int destPos, int length),各参数的含义从左至右如下,来源数组名,开始拷贝的位置,目的数组名,目的位置,拷贝的长度(元素个数),使用这个方法必须注意数组的越界问题,而且必须捕获该函数抛出的一个IndexOutOfBoundsException异常。另在java.util.Arrays 类下,有Arrays.sort(),和Arrays.binarySearch(数组名,查找元素),前者用于实现数组排序,后者用于在已经实现排序的数组中进行查找,二者都有多个重载。
对于Arrays.sort()而言,如果要排序的数组中的元素是某个类的对象,则要求该类实现Comparable接口,该接口中仅有一个方法即public int compareTo(Object o),要求在子类中实现这个方法,注意它的返回值是一个int类型。
以下是我自己写的一个.java程序,包含了以上我讲到的所有知识点,并另重写了toString()方法用于实现类对象的输出,作为一个复习。在jdk1.5下编译运行通过。import java.util.Arrays;
class Student implements Comparable
{
int num;
String name;
Student(int n,String na)
{
this.num=n;
this.name=na;
}
public int compareTo(Object o) //用于实现引用类型比较的compareTo()方法
{
Student s=(Student)o;
int flag=(this.num>s.num)?1:(this.num-s.num);
if(flag==1)
{
return flag;
}
else
{
return this.name.compareTo(s.name);
}
}
public String toString() //重写用于打印的toString()方法
{
return ("num="+this.num+",name="+this.name);
}
}
class TestArray
{
public static void main(String[] args)
{
int[] in=new int[]{1,2,4,3};
Arrays.sort(in); //排序,在包java.util中
for(int i=0;i<in.length;i++) //数组的.length属性用于返回数组元素的个数
{
System.out.println(in[i]);
}
int[] in1=new int[4];
try
{
System.arraycopy(in,0,in1,0,in.length); //数组拷贝
}
catch(Exception e)
{
System.out.println(e.toString());
}
for(int i=0;i<in1.length;i++)
{
System.out.println(in1[i]);
}
int index=Arrays.binarySearch(in,3); //在已经排序好的数组中查找,在包java.until中
System.out.println("index="+index);
Student[] st=new Student[]{new Student(3,"li"),new Student(3,"wang"),new Student(2,"y")};
Student[] st1=new Student[3];
Arrays.sort(st);
for(int j=0;j<st.length;j++)
{
System.out.println(st[j]);
}
int index1=Arrays.binarySearch(st,new Student(3,"li"));
System.out.println("index1="+index1);
try
{
System.arraycopy(st,0,st1,0,st.length);
}
catch(IndexOutOfBoundsException e)
{
e.printStackTrace();
}
for(int j=0;j<st1.length;j++)
{
System.out.println(st1[j]);
}
}
}
评论: 0 | 引用: 0 | 查看次数: 576
发表评论