Java Arraylist 如何使用 Comparator排序

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java Arraylist 如何使用 Comparator排序相关的知识,希望对你有一定的参考价值。

Arraylist array = new ArrayList();
array.add("000001");
array.add("000003");
array.add("000005");
array.add("000004");
array.add("000002");
请问如何使用Comparator进行排序啊

参考技术A 用Comparator是策略模式(strategy design pattern),就是不改变对象自身,而用一个策略对象(strategy object)来改变它的行为。
比如:你想对整数采用绝对大小来排序,Integer是不符合要求的,你不需要去修改Integer类(实际上你也不能这么做)去改变它的排序行为,只要使用一个实现了Comparator接口的对象来实现控制它的排序就行了。

示例代码如下:

//AbsComparator.java
import java.util.*;
public class AbsComparator implements Comparator
public int compare(Object o1, Object o2)
int v1 = Math.abs(((Integer)o1).intValue());
int v2 = Math.abs(((Integer)o2).intValue());
return v1 > v2 ? 1 : (v1 == v2 ? 0 : -1);



//Test.java
import java.util.*;
public class Test
public static void main(String[] args)

//产生一个20个随机整数的数组(有正有负)
Random rnd = new Random();
Integer[] integers = new Integer[20];
for(int i = 0; i < integers.length; i++)
integers[i] = new Integer(rnd.nextInt(100) * (rnd.nextBoolean() ? 1 : -1));

System.out.println("用Integer内置方法排序:");
Arrays.sort(integers);
System.out.println(Arrays.asList(integers));

System.out.println("用AbsComparator排序:");
Arrays.sort(integers, new AbsComparator());
System.out.println(Arrays.asList(integers));

参考技术B import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;

public class Sort implements Comparator<String>
private final static int UP = 1;

private final static int DOWM = -1;

private int state;

public Sort(int state)
this.state = state;


public Sort()



public int compare(String o1, String o2)
if (state == Sort.DOWM)
return sortDown(o1, o2);

return sortUp(o1, o2);


private int sortUp(String o1, String o2)
if (o1.compareTo(o2) < 0)
return -1;
else if (o1.compareTo(o2) > 0)
return 1;
else
return 0;



private int sortDown(String o1, String o2)
if (o1.compareTo(o2) > 0)
return -1;
else if (o1.compareTo(o2) < 0)
return 1;
else
return 0;



public static void main(String[] args)
ArrayList<String> array = new ArrayList<String>();
array.add("000001");
array.add("000003");
array.add("000005");
array.add("000004");
array.add("000002");
Collections.sort(array, new Sort(Sort.DOWM));

for (String str : array)
System.out.println(str);


本回答被提问者和网友采纳

java中求几个字符串的最大公共子串 使用了比较器Compa

package com.swift;

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

public class Max_Substring_Test {

    public static void main(String[] args) {

        /*
         * 几个字符串的最大公共子字符串
         */

        String str1 = "eriousdfndnfdlk";
        String str2 = "dkgfdkgkdjgdjgjksjgksgjsdkjsdierioe";
        String str3 = "ldskfjdskierundsnfjerioejrejrheruer3j43j4hj3";
        String sub;
        
        List<String> list=new ArrayList<String>();

        for (int i = 0; i < str1.length(); i++) {
            sub = str1.substring(0, i);
            
            if(str2.indexOf(sub)!=-1&&str3.indexOf(sub)!=-1) {
//                System.out.println(sub);
                list.add(sub);
            }
        }
        
        Collections.sort(list, new Comparator<String>() {

            @Override
            public int compare(String arg0, String arg1) {
                int i=arg1.length()-arg0.length();
                return i;
            }
            
        });
        
            System.out.println("The max subString is "+list.get(0));
    }

}

 

以上是关于Java Arraylist 如何使用 Comparator排序的主要内容,如果未能解决你的问题,请参考以下文章

如何使用JAVA在Android中拆分ArrayList?

如何遍历java中对象的arrayList?

如何使用 Java Streams 从 HashMap 的 ArrayList 中获取字符串

Java Arraylist 如何使用 Comparator排序

如何序列化/反序列化(JSON)ArrayLIst wich has an ArrayLIst as field in Java

如何在 Java 中使用 String 类型的 ArrayList 搜索字符串值?