系统已有的排序和查找 Arrays Collections类
Arrays.asList(10,7,6,5,9) 的方法可以直接得到一个List对象
Arrays类提供了sort()和binarySearch() 排序和搜索的方法
执行binarySearch()之前应该调用sort()
package equals;
import java.util.*;
class TestArraySort{
static Random r=new Random();
static String
ssource="ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
static char[] src=
ssource.toCharArray();//内容没有变 可能变成了Array对象
static String randString(int length) {
char[] buf=new char[length];
for(int i=0;i<length;i++) {
int rnd=Math.abs(r.nextInt())%src.length;
buf[i]=src[rnd];
}
return new String(buf);
}
static String[]randStrings(int length,int size){
String[] s=new String[size];
for(int i=0;i<size;i++)
s[i]=randString(length);
return s;
}
public static void print(String[] s) {
for(int i=0;i<s.length;i++)
System.out.print(s[i]+" ");
System.out.println();
}
public static void main(String[] args)
{
String[] s=randStrings(4,10);
//测试代码
System.out.print(r.nextInt());//这个r.nextInt 是每次输出的都是一个随机数
System.out.print("\n");
System.out.print(src[5]);//这个r.nextInt 是每次输出的都是一个随机数
System.out.print("\n");
//System.out.print(ssource[5]);//这个r.nextInt 是每次输出的都是一个随机数 字符串是不能ssource[5] 这样访问的
//System.out.print("\n");
System.out.print(src);//这个r.nextInt 是每次输出的都是一个随机数
System.out.print("\n");
print(s);
Arrays.<String>sort(s);
print(s);
int loc=Arrays.<String>binarySearch(s,s[2]);
System.out.println("Location of "+s[2]+" is " +loc);
}
}
关于比较 java.lang.Comparable 有实现方法 他返回了一个>0还是<0的数字,
Collectins类 完全再collection上进行操作静态方法组成 如 sort binarySerach reverse等
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
class TestCollectionsSort{
public static void main(String[] args) {
List<Person>school=new ArrayList<Person>();
//这个列表是person person再下面定义了
school.add(new Person("Li",23));
school.add(new Person("Wang",28));
school.add(new Person("Zhang",21));
school.add(new Person("Tang",19));
school.add(new Person("Chen",22));
school.add(new Person("Zhao",27));
System.out.println(school);
Collections.sort(school,new PersonComparator());//按年龄排序
//可以改写成Lambda表达式
Collections.sort(school,(p1,p2)->p1.age-p2.age);
System.out.println(school);
int index=Collections.binarySearch(school, new Person("Li",23),new PersonComparator());
if(index>=0)
System.out.println("Found:"+school.get(index));
else
System.out.println("Not Found!");
}
}
class Person
{
String name;
int age;
public Person(String name,int age) {
this.name=name;
this.age=age;
}
public String toStrong() {
return name+":"+age;
}
}
class PersonComparator implements Comparator
//class PersonComparator implements Comparator<Object>//这个比较器这里实际上实现了一个接口
{
public int compare(Object obj1,Object obj2) {
Person p1=(Person)obj1;
Person p2=(Person)obj2;
if(p1.age>p2.age)return 1;//这里按年龄排序
else if(p1.age<p2.age)return -1;
return p1.name.compareTo(p2.name);
}
}
输出结果有问题 :[Person@15db9742, Person@6d06d69c, Person@7852e922, Person@4e25154f, Person@70dea4e, Person@5c647e05]
[Person@4e25154f, Person@7852e922, Person@70dea4e, Person@15db9742, Person@5c647e05, Person@6d06d69c]
Found:Person@15db9742
但是确实找到了