给你个思路。
class AddressCompare {
    public int compare(Object element1, Object element2) {
      return ...;
    }
}AddressCompare compare = new AddressCompare();
Collections.sort(_addresses, compare);

解决方案 »

  1.   

    AddressBook 怎么回使用array来实现的呢?不是应该用List更好吗?
    然后写一个Comparator class针对一个或多个member field进行比较,用java.util.Collections的sort就简单了。
      

  2.   

    import java.util.*;
    import java.io.*;public class AddressBook{
        private ArrayList addresses = new ArrayList();
        private AddressComparator compare=new AddressComparator();    public AddressBook(){}    public void add (String name,String houseNumber,String street) {
            add(addresses.size(),name,houseNumber,street);
        }    public void add (int index,String name,String houseNumber,String street) {
            addresses.add(index,new Address(name,houseNumber,street));
        }    public Address searchByName(String value){
            return search(value,null,null);
        }    public Address searchByHouseNumber(String value){
            return search(null,value,null);
        }    public Address searchByStreet(String value){
            return search(null,null,value);
        }
        public Address search(String name,String houseNumber,String street){
            sort();
            int i=Collections.binarySearch(addresses,new Address(name,houseNumber,street),compare);
            if(i>=0){
                System.out.println("\tFind first @"+(i+1));
            }else{
                System.out.println("\tNot Find!");
            }
            return i<0?null:(Address)addresses.get(i);
        }    public void sort(){
            Collections.sort(addresses,compare);
        }    public void delete(int index){
            addresses.remove(index);
        }    public void delete(Address address){
            addresses.remove(address);
        }    public void clear(){
            addresses.clear();
        }    public void printAddress(){
            for(int i=0;i<addresses.size();i++){
                printAddress(i);
            }
        }    public void printAddress(int index){
            ((Address)addresses.get(index)).print();
        }    public static void main(String[] args){
            AddressBook ab = new AddressBook();        //new
            for(int i=0;i<10;i++){
                ab.add("name "+(int)(Math.random()*5),"houseNumber "+(int)(Math.random()*10),"street "+(int)(Math.random()*20));
            }
            System.out.println("AddressBook List:");
            ab.printAddress();        //sort
            System.out.println("Sort:");
            ab.sort();
            ab.printAddress();        //search
            System.out.println("Search  Name=name 1:");
            Address a=ab.searchByName("name 1");
            if(a!=null){
                a.print();
            }
            System.out.println("Search  Name=name 1, HouseNumber=houseNumber 1:");
            Address b=ab.search("name 1","houseNumber 1",null);
            if(b!=null){
                b.print();
            }
            System.out.println("Search  Name=name 1, HouseNumber=houseNumber 1, Street=street 1:");
            Address c=ab.search("name 1","houseNumber 1","street 1");
            if(c!=null){
                c.print();
            }        //delete
            System.out.println("Delete two addresses:");
            ab.delete(0);
            ab.delete(0);
            ab.printAddress();
        }}
    class Address{
        private String name;
        private String houseNumber;
        private String street;    public Address(){
            this("","","");
        }    public Address (String aName, String aHouseNumber, String aStreet) {
            this.name=aName;
            this.houseNumber=aHouseNumber;
            this.street=aStreet;
        }    public String toString (){
            return "\tName: "+name+"\tHouseNumber: "+houseNumber+"\tStreet: "+street;
        }    public void print(){
            System.out.println(this);
        }    public String getName(){
            return this.name;
        }    public void setName(String aName){
            this.name=aName;
        }    public String getHouseNumber(){
            return this.houseNumber;
        }    public void setHouseNumber(String aHouseNumber){
            this.houseNumber=aHouseNumber;
        }    public String getStreet(){
            return this.street;
        }    public void setStreet(String aStreet){
            this.street=aStreet;
        }}class AddressComparator implements Comparator{ //是有点繁,如果字段比较多,就另行考虑
           public int compare(Object o1, Object o2){
            Address a1=(Address)o1;
            Address a2=(Address)o2;
            int result=0;
            String name=a2.getName();
            String houseNumber=a2.getHouseNumber();
            String street=a2.getStreet();
            if(name!=null){
                result=a1.getName().compareTo(name);
            }
            if(result==0){
                if(houseNumber!=null){
                    result=a1.getHouseNumber().compareTo(houseNumber);
                }
                if(result==0){
                    if(street!=null){
                        result=a1.getStreet().compareTo(street);
                    }
                }
            }
            return result;
        }
    }I/O就不帮你了