Java中ArrayList的排序操作(二)--自定义排序规则

之前写的一篇博文直接使用Collections.sort()对一个ArrayList进行排序操作。这篇博文再加一点点进阶的操作,自定义排序规则

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

public class T_00 {
    
    
	public static void main(String[] args) {
    
    
		ArrayList<Integer> a = new ArrayList<Integer>();
		a.add(1);
		a.add(3);
		a.add(5);
		a.add(2);
		a.add(4);
		
		for (int i = 0; i < a.size(); i++) {
    
    
			System.out.println(a.get(i));
		}
		System.out.println("====================");
		// 自定义排序规则,使其降序排列
		Collections.sort(a, new Comparator<Integer>() {
    
    
			@Override
			public int compare(Integer o1, Integer o2) {
    
    
				if(o1>o2)
					return -1;
				else if(o1<o2)
					return 1;
				return 0;
			};
		});
		
		for (int i = 0; i < a.size(); i++) {
    
    
			System.out.println(a.get(i));
		}
	}
}

在这里插入图片描述

总结一下

使用Collections.sort(List,Comparator),可以自定义排序规则。首先我们需要实现Comparator接口,重写public int compare(Object o1, Object o2) 方法。在这个方法中写下自定义的排序规则。

数据中有负数时,要注意数据的处理方式

还有一点就是,只能对集合类型进行排序,对int数组不能直接这样操作,要先转成集合类型

if(o1>o2)
	return -1;
else if(o1<o2)
	return 1;
return 0;

做个题,巩固下------拼接字符串产生的最小序列

参考解法

import java.util.*;

public class Test {
    
    
    public String minString (String[] strs) {
    
    
    	// 这里如果直接使用数组进行冒泡排序,会超时
    	// 所以这里转换成ArrayList,并使用Collections.sort(list,Comparator);排序
        ArrayList<String> list = new ArrayList<>();
        for(String s:strs) list.add(s);    
        Collections.sort(list,new Comparator<String>(){
    
    
            public int compare(String o1,String o2){
    
    
                return (o1+o2).compareTo(o2+o1);
            }
        });
        
        StringBuilder sb = new StringBuilder();
        for(String s:list)
            sb.append(s);
        return sb.toString();
    }
}

再来一个题------数组的合并

参考解法

/**
 * Definition for an interval.
 * public class Interval {
 *     int start;
 *     int end;
 *     Interval() { start = 0; end = 0; }
 *     Interval(int s, int e) { start = s; end = e; }
 * }
 */
import java.util.Collections;
import java.util.Comparator;
import java.util.ArrayList;
public class Solution {
    
    
    public ArrayList<Interval> merge(ArrayList<Interval> intervals) {
    
    
        if (intervals.size() <= 1)
			return intervals;
		// 排序规则,升序排列,若左边界相等,则比较右边界
		Collections.sort(intervals, new Comparator<Interval>() {
    
    
			@Override
			public int compare(Interval o1, Interval o2) {
    
    
				if (o1.start == o2.start) {
    
    
					return o1.end - o2.end;
				} else {
    
    
					return o1.start - o2.start;
				}
			}
		});

		ArrayList<Interval> res = new ArrayList<Interval>();
		res.add(intervals.get(0));
		for (int i = 1; i < intervals.size(); i++) {
    
    
			if(res.get(res.size()-1).start==intervals.get(i).start) {
    
    
				res.get(res.size()-1).end = Math.max(res.get(res.size()-1).end, intervals.get(i).end);
				continue;
			}
					
			if(res.get(res.size()-1).end<intervals.get(i).start)
				res.add(intervals.get(i));
			else {
    
    
				res.get(res.size()-1).end = Math.max(res.get(res.size()-1).end, intervals.get(i).end);
			}
		}
		return res;
    }
}

猜你喜欢

转载自blog.csdn.net/Awt_FuDongLai/article/details/109742265