Java实现List集合排序

解决List集合中装一般类对象或是数组排序的问题:
package com.study.entity;

import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;


/**
 * 实现List对象排序
 * 方法有二:
 * 一:List对象(类实现comparable<T>接口,实现compareTo方法,最后调用Collections.sort(new List<T>())即可
 * (注意这里比较的属性是引用类型不是基本数据类型,用Integer而不是int))
 * 
 * 二:调用Collection.sort()的重载的另一种方法
 * Collections.sort(new List<T>(),new Comparator<T>(){实现里面的compareTo});
 * @author pyi
 *
 */
class Person implements Comparable<Person>{
	
	private String userName;
	private Integer order;
	
	
	
	public Person() {
		
	}

	public Person(String userName, Integer order) {
		this.userName = userName;
		this.order = order;
	}
	
	public String getUserName() {
		return userName;
	}

	public void setUserName(String userName) {
		this.userName = userName;
	}

	public Integer getOrder() {
		return order;
	}

	public void setOrder(Integer order) {
		this.order = order;
	}

	@Override
	public int compareTo(Person arg0) {
		return this.getOrder().compareTo(arg0.getOrder());
	}

}

public class Test{
	
	public static void main(String[] args) {
		Person p1 = new Person("张三",1);
		Person p2 = new Person("李四",2);
		Person p3 = new Person("王五",3);
		
		List<Person> list = new ArrayList<>();
		list.add(p3);
		list.add(p2);
		list.add(p1);
		Collections.sort(list);
		/**
			 * 张三
			 * 李四
			 * 王五
		*/
		for(Person p : list){
			System.out.println(p.getUserName());
		}
		
		System.out.println("----------惹人喜爱的分割线-----------");
		
		/**
		 * 方法二(实现对Object数组的排序
		 * (在面对List里面装的不是类对象时,此时是不能用第一种方法的.无法实现类继承comparable<T>))
		 */
		Object[] obj1 = {"张三",1};
		Object[] obj2 = {"李四",2};
		Object[] obj3 = {"王五",3};
		
		List<Object[]> objList = new ArrayList<>();
		objList.add(obj3);
		objList.add(obj2);
		objList.add(obj1);
		for(Object[] o : objList){
			System.out.println(o[0]); //王五 李四 张三
		}
		Collections.sort(objList, new Comparator<Object[]>(){
			@Override
			public int compare(Object[] arg0, Object[] arg1) {
				return Integer.valueOf(arg0[1].toString()).compareTo(Integer.valueOf(arg1[1].toString()));
			}
		});
		System.out.println("----------惹人喜爱的分割线-----------");
		
		for(Object[] o : objList){
			System.out.println(o[0]); //张三 李四 王五
		}
		
	}
}

猜你喜欢

转载自blog.csdn.net/qq844579582/article/details/52689186
今日推荐