Java工具类排序
Java工具类排序
一、直接调用工具类
sort(排序目标,排序算法),这个方法直接来自Collections工具类;
Collections.sort(list);//自然顺序的升序进行排序
Collections.sort(al, new Comparator<Interval>() {
public int compare(Interval b1, Interval b2) {
return b1.start - b2.start;//用匿名类的方式做好1,0,-1规则
}
});
二、在实体中实现Comparable接口,接口方法中做好1,0,-1规则,结合conllections.sort();使用即这里之后直接用这个方法即可不需再写规则
public class User implements Comparable<Object>{
int id;
String name;
@Override
public int compareTo(Object o) {
if(this ==o){
return 0;
}
else if (o!=null && o instanceof User) {
User u = (User) o;
if(id<=u.id){
return -1;
}else{
return 1;
}
}else{
return -1;
}
}
}
public class Test {
// 编写Comparator,根据User的id对User进行排序
private static final Comparator<User> COMPARATOR = new Comparator<User>() {
public int compare(User o1, User o2) {
return o1.compareTo(o2);// 运用User类的compareTo方法比较两个对象
}
};
public static void main(String[] args) {
ArrayList<User> student = new ArrayList<User>();
User user1 = new User(1, "yueliming");
User user2 = new User(5, "yueliming");
User user3 = new User(2, "yueliming");
student.add(user1);
student.add(user2);
student.add(user3);
Collections.sort(student, COMPARATOR);// 用我们写好的Comparator对student进行排序
for (int i = 0; i < student.size(); i++) {
System.out.println(student.get(i).getId() + student.get(i).getName());
}
}
}
三、比for循环高效一点的搜素
binarySearch
使用二分搜索法搜索指定列表,以获得指定对象。
binarySearch(List(T) list)
注意:在进行此调用之前,必须根据列表元素的自然顺序对列表进行升序排序(通过 sort(List) 方法)。
binarySearch(List(T) list,Comparator())
注意:在进行此调用之前,必须根据指定的比较器对列表进行升序排序(通过 sort(List, Comparator) 方法)///之前没有排序的list这里还是要排序
public static void demo()
{
List<String> list=new ArrayList<String>();
list.add("abcd");
list.add("aaaaa");
list.add("23415");
list.add("qq");
list.add("abcd");
list.add("23410");
list.add("mmm");
list.add("abcd");
Collections.sort(list);//自然顺序的升序进行排序
//Collections.sort(list,new StrlenComparator());//必须先排序
sop(list);
int index_1=Collections.binarySearch(list,"qq");//若不存在返回的是最后查找的插入点
int index_2=halfSerch2(list,"23400",new StrlenComparator());//调用比较器比较
sop("index_1="+index);
sop("index_2="+index_2);
}