Chinaunix首页 | 论坛 | 博客
  • 博客访问: 203135
  • 博文数量: 73
  • 博客积分: 2010
  • 博客等级: 大尉
  • 技术积分: 750
  • 用 户 组: 普通用户
  • 注册时间: 2008-03-13 18:32
文章分类

全部博文(73)

文章存档

2009年(1)

2008年(72)

我的朋友

分类: Java

2008-03-28 19:06:17


1,数组
  i,Arrays类,System.arraycopy
 
常用方法:equals(),fill(),sort(),binarySearch(),asList()
 
#数组的复制
import java.util.Arrays;


  public class ArrayOperation{
    public static void printArray(int[] input){
        for(int i=0;i
            if(i!=input.length-1)
              System.out.print(input[i]+" ");
            else System.out.println(input[i]);
        }
    }
    public static void main(String[] args){
        int[] aa=new int[7];
        int[] ab=new int[10];
        Integer[] ac=new Integer[10];
        Arrays.fill(aa,47);
        Arrays.fill(ab,99);
        Arrays.fill(ac,new Integer(10));
        printArray(aa);
        printArray(ab);
        System.arraycopy(aa,0,ab,0,5);
        printArray(ab);
        #复制的是引用
        System.out.println(ac[0]==ac[1]);
        #对普通类型数组,asList将整个数组插入第一个位置
      System.out.println(Arrays.asList(ab));

        #对对象数组,asList产生期望的行为       
      System.out.println(Arrays.asList(ac));

    }
}


 
#数组的比较
    int[] a1=new int[10];
    int[] a2=new int[10];
    Arrays.fill(a1,47);
    Arrays.fill(a2,47);
    System.out.println(Arrays.equals(a1,a2));
    String[] s1=new String[5];
    Arrays.fill(s1,"hi");
    String[] s2={"hi","hi","hi","hi","hi",};
    System.out.println(Arrays.equals(s1,s2));
#两次比较都会输出true,注意对象数组的比较是基于内容的

#数组元素的比较Comparable接口|Comparator接口

#CompType.java
public class CompType implements Comparable{
    int i,j;
    public CompType(int i,int j){
        this.i=i;
        this.j=j;
    }
    public String toString(){
        return "["+i+","+j+"]";
    }
    public int compareTo(Object o){
        int oi=((CompType)o).i;
        return (i    }
    public static void main(String[] args){
        Random rand=new Random();
        CompType[] cts=new CompType[10];
        for(int i=0;i            cts[i]=new CompType(rand.nextInt(100),rand.nextInt(100));
        System.out.println(Arrays.asList(cts));
        Arrays.sort(cts);
        System.out.println(Arrays.asList(cts));
    }
}

#ComparatorTest.java
import java.util.*;

class CompTypeComparator implements Comparator{
    public int compare(Object o1,Object o2){
        int i=((CompType)o1).i;
        int j=((CompType)o2).i;
        return (i    }
}
  public class ComparatorTest{
    public static void main(String[] args){
     Random rand=new Random();
         CompType[] cts=new CompType[10];
         for(int i=0;i             cts[i]=new CompType(rand.nextInt(100),rand.nextInt(100));
             System.out.println(Arrays.asList(cts));
             Arrays.sort(cts,new CompTypeComparator());
             System.out.println(Arrays.asList(cts));
    }
}
#这里有一个疑惑,当CompType实现了Comparable接口时,比如当CompTypeComparator类与CompType在同一个文件,使用Arrays.sort(cts,new CompTypeComparator())进行排序就会给出出错信息。


#另外对于实现了Comparable接口的对象数组进行排序时,java提供了Collections.reverseOrder()方法返回一个Comparator,可以反转排序规则进行排序。
  Arrays.sort(cts,Collections.reverseOrder());

#在已经排序的数组中查找
import java.util.*;

public class ArraySearch{
    public static void main(String[] args){
        Random rand=new Random();
        #这里可以用一个数组实现同样的效果。
        int[] tmp=new int[15];

        int[] is=new int[15];
        for(int i=0;i
            tmp[i]=i;
        int index=0;
        for(int i=15;i>0;i--){
            index=rand.nextInt(i);
           
            is[15-i]=tmp[index];
            tmp[index]=tmp[i-1];
        }
        while(true){
            int i=rand.nextInt(15);
            System.out.println(i);
            int location=Arrays.binarySearch(is,i);
            if(location>=0){
                System.out.println(is[location]);
                break;
            }
        }
    }
}
#binarySearch方法:
1,如果数组中包含了重复元素则无法确定是哪个。该方法不是为包含重复元素的数组设计的。
2,如果排序中使用到了Comparator接口,则在使用binarySearch方法时也需要传入该接口
  Arrays.binarySearch(Array,obj,Comparator);












阅读(684) | 评论(0) | 转发(0) |
0

上一篇:RTTI

下一篇:jfreechart之旅 Pie Chart

给主人留下些什么吧!~~