list集合的排序

一、直接调用Collections.sort()方法进行排序

1.对字母集合进行排序

Collections.sort(要排序的集合对象);

public class LetterListSort {

	@SuppressWarnings({ "unchecked", "rawtypes" })
	public static void main(String[] args) {
		List list = new ArrayList();
		
		list.add("sdfsdf");
		list.add("asdafdf");
		list.add("tdsadfgf");
		list.add("jcfgf");
		list.add("jbgh");
		Collections.sort(list);
		for (Object object : list) {
			System.out.println(object);
		}
	}	
}

根据以下排序结果可见对于字母进行排序首先会对首字母、第二个字母依次进行排序(若jcfgf中的c变成b,jbgh中的b变成c排序结果将会不同):测试结果

asdafdf
jbgh
jcfgf
sdfsdf
tdsadfgf

2.对数字集合进行排序

Collections.sort(要排序的集合对象);

public class NumberListSort {

	@SuppressWarnings({ "unchecked", "rawtypes" })
	public static void main(String[] args) {
		List list = new ArrayList();
		
		list.add("122");
		list.add("456");
		list.add("152");
		list.add("1223");
		list.add("12321");
		Collections.sort(list);
		for (Object object : list) {
			System.out.println(object);
		}
	}	
}

根据以下排序结果可见:直接调用Collections.sort方法 对数字进行排序首先会对首位数字、第二个数字依次进行排序而不在乎值的实迹大小:测试结果

122
1223
12321
152
456

二、自定义排序方式实体类需要实现Comparable接口中的compareTo()方法

public class mm implements Comparable<mm>{

	private String name;
	private Integer age;
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public Integer getAge() {
		return age;
	}
	public void setAge(Integer age) {
		this.age = age;
	}
	public mm() {
		super();
	}
	public mm(String name, Integer age) {
		super();
		this.name = name;
		this.age = age;
	}
	@Override
	public String toString() {
		return "[name=" + name + ", age=" + age + "]";
	}
	public int compareTo(mm o) {
		if(o instanceof mm) {
			mm m1=o;
			return this.name.compareTo(m1.getName());       //对字母进行正序排列
			//return m1.getName().compareTo(name);       	  //对字母进行倒序排列
			//return this.age-m1.getAge();                    //对数字进行正序排列
			//return m1.getAge()-this.age;                    //对数字进行倒序排列
		}
		throw new ClassCastException();
	}
}

1.直接排序(解开以上代码中对应的排序方式即可)

		return this.name.compareTo(m1.getName());       //对字母进行正序排列
		//return m1.getName().compareTo(name);       	  //对字母进行倒序排列
		//return this.age-m1.getAge();                    //对数字进行正序排列
		//return m1.getAge()-this.age;                    //对数字进行倒序排列

1.1****测试类代码

public class ListSort {

	@SuppressWarnings("rawtypes")
	static List list = new ArrayList();
	@SuppressWarnings("unchecked")
	@BeforeClass//junit单元测试依赖支持
	public static void init() {
		list.add(new mm("fsdfsd",17721));
		list.add(new mm("dsdfsd",186));
		list.add(new mm("asdfsd",1335));
		list.add(new mm("esdfsd",133));
	}
	@SuppressWarnings("unchecked")
	@Test
	public void sorts() {
		Collections.sort(list);
		for (Object object : list) {
			System.out.println(object);
		}
	}
}	

1.2 return this.name.compareTo(m1.getName()); //对字母进行正序排列:测试结果

[name=asdfsd, age=1335]
[name=dsdfsd, age=186]
[name=esdfsd, age=133]
[name=fsdfsd, age=17721]	

1.3 return this.age-m1.getAge(); //对数字进行正序排列:测试结果

[name=esdfsd, age=133]
[name=dsdfsd, age=186]
[name=asdfsd, age=1335]
[name=fsdfsd, age=17721]

三、匿名内部类排序方式 需要new Comparator并重写compare方法自定义排序

public class ListSort {

	@SuppressWarnings("rawtypes")
	static List list = new ArrayList();
	@SuppressWarnings("unchecked")
	@BeforeClass
	public static void init() {
		list.add(new mm("fsdfsd",17721));
		list.add(new mm("dsdfsd",186));
		list.add(new mm("asdfsd",1335));
		list.add(new mm("esdfsd",133));
	}
	@SuppressWarnings("unchecked")
	@Test
	public void sort() {
		//关键代码实现
		Collections.sort(list, new Comparator<mm>() {
			public int compare(mm o1, mm o2) {
				if(o1 instanceof mm && o2 instanceof mm) {
					mm m1 = o1;
					mm m2 = o2;
					return m1.getAge().compareTo(m2.getAge());    //根据age进行正序排列
					//return m2.getAge().compareTo(m1.getAge());    //根据age进行倒序排列
					//return m1.getName().compareTo(m2.getName());    //根据name进行正序排列
					//return m2.getName().compareTo(m1.getName());	//根据name进行倒序排列
				}
				throw new ClassCastException("不能转换为对象");
			}
		});
		for (Object object : list) {
			System.out.println(object);
		}
	}
}

根据以下age排序结果表明重写后的排序方式数字会按照实迹数值的大小进行排序

1.1 return m1.getAge().compareTo(m2.getAge()); //根据age进行正序排列: 测试结果

[name=esdfsd, age=133]
[name=dsdfsd, age=186]
[name=asdfsd, age=1335]
[name=fsdfsd, age=17721]

1.2 return m2.getAge().compareTo(m1.getAge()); //根据age进行倒序排列 :测试结果

[name=fsdfsd, age=17721]
[name=asdfsd, age=1335]
[name=dsdfsd, age=186]
[name=esdfsd, age=133]

1.3 return m1.getName().compareTo(m2.getName()); //根据name进行正序排列:测试结果

[name=asdfsd, age=1335]
[name=dsdfsd, age=186]
[name=esdfsd, age=133]
[name=fsdfsd, age=17721]

1.4 return m2.getName().compareTo(m1.getName()); //根据name进行倒序排列:测试结果

[name=fsdfsd, age=17721]
[name=esdfsd, age=133]
[name=dsdfsd, age=186]
[name=asdfsd, age=1335]
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值