JAVA小知识——比较器Comparator

在Java中,我们常用到Collections.sort(arraylist);来对一个动态数组排序。但是有的时候,排序的规则并不是我们想要的规则,可不可以自定义一个规则来对数组进行排序呢。答案当然可以的,这里需要用的一个比较器Comparator类。
新建一个Comparator类的实例,该实例中重写compare(A s1, A s2)方法,可以在其中自定以比较的逻辑,Collection.sort默认是升序排列,所以compare方法如果返回值为-1,则表示s1s2小,s1排在前面;反之如果返回1,则表示s2s1小,s2排在前面。最后在调用排序时,使用Collections.sort(arraylist, comparator)即可按照新的规则排序了。
示例如下:

import java.util.*;

public class MeachineandTask
{
	static Comparator c = new Comparator<String>()
	{
		@Override
		public int compare(String s1, String s2)
		{
			if (s1.length() == 0)
				return -1;
			if (s2.length() == 0)
				return 1;
			if (s1.length() <= s2.length())
			{
				if (s1.equals(s2.substring(0, s1.length())))
				{
					return compare(s1, s2.substring(s1.length()));
				}
				else
				{
					if (s1.compareTo(s2)>0)
						return 1;
					else
						return -1;
				}
				
			}
			else
			{
				if (s2.equals(s1.substring(0, s2.length())))
				{
					return compare(s1.substring(s2.length()), s2);
				}
				else
				{
					if (s1.compareTo(s2)>0)
						return 1;
					else
						return -1;
				}
			}
		}
	};
	
	 public static void main(String[] args)
	 {
		LinkedList<String> numList = new LinkedList<>();
		
		numList.add("333");
		numList.add("321");
		numList.add("32");
		Collections.sort(numList,c);
		System.out.println(numList);
	 }
}

这是针对剑指Offer上的题目 把数组排成最小的数 的解法。在其中我们自定义了一个比较器c,其比较的规则我们可以不关心,主要注意这里定义Comparator对象的方法。在主程序中,我们调用Collections.sort(numList,c);来使用新的比较规则排序,就可以将字符串动态数组排序为想要的顺序。

你可能感兴趣的:(Java)