整数字符串与 Java 中的字符串比较

Integer string compare to string in Java

我已经声明了一个 class 实现可比接口和 compareTo 方法来比较两个使用员工 ID 的员工。已创建 class 个插入数组列表的对象。现在,当我使用 Collections.sort(arrayList Object) 时,它正在工作 fine.I 对可比较和比较器之间的比较有何不同感到困惑 interface.I 想知道员工 ID 字符串之间的比较是如何发生的纯粹由数字和其他字符串组成,员工 ID 几乎没有字符和数字,同时使用了接口。

class Velraj implements Comparable<Velraj>{

    String id;
    String work;

    public Velraj(String id, String work){

        this.id = id;
        this.work = work;
    }
    public String getId() {
        return id;
    }
    public void setId(String id) {
        this.id = id;
    }
    public String getWork() {
        return work;
    }
    public void setWork(String work) {
        this.work = work;
    }

    @Override
    public int hashCode() {
        final int prime = 31;
        int result = 1;
        result = prime * result + ((id == null) ? 0 : id.hashCode());
        result = prime * result + ((work == null) ? 0 : work.hashCode());
        return result;
    }
    @Override
    public boolean equals(Object obj) {
        if (this == obj)
            return true;
        if (obj == null)
            return false;
        if (getClass() != obj.getClass())
            return false;
        Velraj other = (Velraj) obj;
        if (id == null) {
            if (other.id != null)
                return false;
        } else if (!id.equals(other.id))
            return false;
        if (work == null) {
            if (other.work != null)
                return false;
        } else if (!work.equals(other.work))
            return false;
        return true;
    }
    public int compareTo(Velraj o) {
        // TODO Auto-generated method stub
        return this.getWork().compareTo(o.getWork());
    }


}

public class AppMain {

    public static void main(String[] args) {


        Velraj v1 = new Velraj("16450","Security Specialist");
        Velraj v2 = new Velraj("245591","Consultant");
        Velraj v3 = new Velraj("RNJIV3664","Java Architecct");

        ArrayList<Velraj> a = new ArrayList<Velraj>();
        a.add(v1);
        a.add(v2);
        a.add(v3);

       Collections.sort(a);

       /*Collections.sort(a, new Comparator<Velraj>(){

    public int compare(Velraj o1, Velraj o2) {
        // TODO Auto-generated method stub
        return o1.getId().compareTo(o2.getId());
    }

   });*/

       for(Velraj v: a){

           System.out.println(v.getId() +"--> " +v.getWork()); 
       }
    }   
}

Output using comparable:
245591--> Consultant
RNJIV3664--> Java Architecct
16450--> System Security Specialist


Output using comparator:
16450--> System Security Specialist
245591--> Consultant
RNJIV3664--> Java Architecct

你在使用 ComparableComparator 时得到不同结果的原因是因为你在两种情况下比较不同的属性!

在 class 的重写 compareTo 方法中,您已指定对象应根据 Velrajwork 属性 class。但是在主函数的 compare 方法中,您已指定对象在 Velrajid 字段上排序。如果您在这两种情况下使用相同的 属性,那么您在排序时会得到相同的结果。

Strings 的比较使用 lexicographic order,也称为字母顺序。即按第一个字符排序,如果第一个字符相等则看第二个字符等。

各个字符根据其字符代码排序。基本上数字 < 大写字母 < 小写字母。