开发者

如何使用Comparator比较接口实现ArrayList集合排序

开发者 https://www.devze.com 2022-12-27 10:21 出处:网络 作者: 惟念依
目录使用Comparator比较接口实现排序开发者_开发培训Comparator接口定义如下我们定义一个“person”类创建按年龄排序的比较器实现Comparator接口使用ArrayList进行排序测试以名字长度排序的Comparator比较
目录
  • 使用Comparator比较接口实现排序
    • 开发者_开发培训Comparator接口定义如下
    • 我们定义一个“person”类
    • 创建按年龄排序的比较器实现Comparator接口
    • 使用ArrayList进行排序测试
    • 以名字长度排序的Comparator比较器
  • 总结

    使用Comparator比较接口实现排序

    Comparator是比较接口,当我们需要对某个类进行排序而此类本身没有时Comparable时,我们可以php建立一个该类的比较器来实现Comparator接口即可实现排序。

    Comparator接口定义如下

    	public interface Comparator<T>{
    		int compara(T o1 ,T o2);
    		boolean equals(Object obj);
    	}
    

    备注:若实现Comparator接口,必须实现compara(T o1,To2)函数,但可以不实现equals函数。

    例子:

    我们定义一个“person”类

    	public class person {
    	
    	private String name;  //姓名
    	private int age;	  //年纪
    	
    	//构造函数
    	public person(String jsget_name , int get_age) {
    		thissgcwIwKCF.name = get_name;
    		this.age = get_age;
    	}
    	
    	public int get_age() {
    		return this.age;
    	}
    	
    	public String get_name() {
    		return this.name;
    	}
    	
    }
    

    创建按年龄排序的比较器实现Comparator接口

    	//创建根据年龄排序的比较器	
    	public class compare_byAge implements Comparator<person> {
    			
    			//重写compare方法
    			@Override
    			
    			//此处为按年龄升序排序
    			public int compare(person o1, person o2) {
    				if(o1.get_age() > o2.get_age() ) {
    					return 1;
    				}
    				else if(o1.get_age() == o2.get_age()) {
    					return 0;
    				}	
    				else {
    					return -1;
    				}
    			}
    
    	}
    

    使用ArrayList进行排序测试

    	public class test {
    
    	public static void main(String[] args) {
    		
    		//创建person对象
    		person p1 = new person("li",15);
    		person p2 = new person("ping",18);
    		person p3 = new person("liao",13);
    		person p4 = new person("long",23);
    		person p5 = new person("xu",12);
    		
    		//创建peson类的ArrayList集合
    		ArrayList<person> per = new ArrayList<person>();
    		
    		//将实例化的person对象加入到ArrayList集合中
    		per.add(p1);
    		per.add(p2);
    		per.add(p3);
    		per.add(p4);
    		per.add(p5);
    		
    		//排序前的顺序(其实就是按照插入顺序)
    		System.out.println("排序前:");
    		for(int i =0;i<per.sizandroide();i++) {
    			System.out.println(per.get(i).get_age()+"	"+per.get(i).get_name());
    		}
    		
    		System.out.println();
    		
    		//用Collection.sort()排序
    		Collections.sort(per,new compare_byAge());
    		
    		System.out.println("排序后:");
    		for(int i 编程客栈=0;i<per.size();i++) {
    			System.out.println(per.get(i).get_age()+"	"+per.get(i).get_name());
    		}
    	}
    
    }
    

    输出结果:

    如何使用Comparator比较接口实现ArrayList集合排序

    以名字长度排序的Comparator比较器

    	
    	//设置以名字长度为判断标准的比较器
    	public class compare_bynameLen implements Comparator<person> {
    	
    	public int compare(person o1, person o2) {
    		
    		//按名字长度升序排序
    		if(o1.get_name().length() > o2.get_name().length()) {
    			
    			return 1;      
    			
    		}
    		
    		//名字长度相同的情况下按照年龄升序排序
    		else if( o1.get_name().length() == o2.get_name().length() ) {
    			if(o1.get_age() > o2.get_age() ) {
    				return 1;
    			}
    			else if(o1.get_age() == o2.get_age()) {
    				return 0;
    			}	
    			else {
    				return -1;
    			}
    		}
    		
    		else {
    			return -1;
    		}
    		
    	}
    }
    
    

    运行结果为:

    如何使用Comparator比较接口实现ArrayList集合排序

    总结

    以上为个人经验,希望能给大家一个参考,也希望大家多多支持我们。

    0

    精彩评论

    暂无评论...
    验证码 换一张
    取 消

    关注公众号