给你个思路。
class AddressCompare {
public int compare(Object element1, Object element2) {
return ...;
}
}AddressCompare compare = new AddressCompare();
Collections.sort(_addresses, compare);
class AddressCompare {
public int compare(Object element1, Object element2) {
return ...;
}
}AddressCompare compare = new AddressCompare();
Collections.sort(_addresses, compare);
解决方案 »
- 基础题
- swing html
- 代号x 为什么int数据写入不进文本里 解决直接给分
- 切词系统中关于未登陆词处理的方法研究
- sun.net.ftp.FtpClient类上传和下载的问题
- 帮忙看看这个程序怎么了?解决立即给分~~~~~~
- java Runtime.getRuntime(),exec() 启动tomcat问题
- 我装不上jdk,够苯的了.
- 请问 这样装载String 类Class clString = Class.forName( "String" );有何用途?
- 请问:“synchronized”的用法?
- JExcelApi生成Excel 文件的问题
- 那位仁兄熟 jface, swing 的 谈谈?有前途吗?哪个好用?
然后写一个Comparator class针对一个或多个member field进行比较,用java.util.Collections的sort就简单了。
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就不帮你了