J2SE第七章——集合框架(容器)三

本文介绍了Java中利用Collections类进行List集合的操作方法,包括排序、逆序和随机排序等实用功能。同时深入探讨了Comparable接口的应用,展示了如何通过实现此接口使自定义类能够参与排序过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

4. Collections

         类java.util.Collections提供了一些静态方法基于List容器的一些算法

                   排序 voidsort(List)

                   逆序  void reverse(List)

                   随机  void shuffle(List)

                   折半查找 (先升序排列) intbinarySearch(List,Object) 

public class Test { 
	public static void main(String[] args) {
		m1();
	}

	public static void m1()  {
		List list = new Arraylist();

		for (int i=0;i<5;i++) {
			//Random类,产生随机数
			Random r = new Random();
			//nextInt(int n) 产生0~n-1之间的随机整数
			list.add(r.nextInt(100));
		}

		System.out.println("原始数据"+list);
		Collections.sort(list);
		System.out.println("sort:"+list); // 默认升序

		Collections.reverse(list);  // 逆序
		System.out.println("reverse:"+list); // 降序

		Collections.shuffle(list); // 随机排序
		System.out.println("shuffle:"+list); 

	}
}

5.comparable接口

         java.lang.Comparable 不用导入

public class Test {
	public static void main(String[] args) {
		m1();
		m2();
	}

	public static void m1() {
		List list = new ArrayList();
		list.add("Tom");
		list.add("Mike");
		list.add("Joke");

		Collections.sort(list);
		System.out.println(list);  // [Joke Mike  Tom]
	}

	public static void m2() {
		List list = new ArrayList();
		list.add(new Person("zhang","san"));
		list.add(new Person("li","si"));
		list.add(new Person("wang","wu"));

		Collections.sort(list);
		System.out.println(list);  //抛异常了~!
	}
}

 出错的原因:sort()排序方法,排序即比较排序对象的“大小, 那么sort()抛异常,可能的原因是不能确定待排序对象的“大小”

         为什么不知道大小:

                   约定如果“对象”之间比较大小,那么该对象所属的类必须实现comparable接口

                   并重写booleancomparaTo()方法

                   也就是说两个对象大小的比较,由comparaTo()的返回值决定

                   即String类实现了Comparable接口,并实现了comparaTo(),在该方法中定义了两个字符串对象大小的比较

源码:public int comparaTo(String anotherString) {
	< 0  当前对象 小于 参数对象
	= 0  当前对象 等于 参数对象
	> 0  当前对象 大于 参数对象
}

class Person implements Comparable {
	private String firstName;
	private String lastName;

	public Person(String firstName,String lastName) {
		this.firstName = firstName;
		this.lastName = lastName;
	}

	public int comparaTo(Object antherPerson) {
		Person antherPerson = (Person) obj;
			
		if (firstName.comparaTo(antherPerson.firstName) == 0) {
			return lastName.comparaTo(antherPerson.lastName);
		} else {
			return firstName.comparaTo(antherPerson.firstName);
		}
	}

	public String toString() {
		return firstName + "," + lastName;  	
	}
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值