初识JAVA---排序 Collections类(有例程)(8)

 系统已有的排序和查找  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

但是确实找到了

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值