当前位置: 首页 > 知识库问答 >
问题:

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

颜乐
2023-03-14

我已经声明了一个实现可比较接口和compareTo方法的类,使用employee ID比较两个员工。创建的类对象插入数组列表。现在,当我使用collections.sort(arrayList对象)时,它工作得很好。我对collective和comparator接口之间的比较有何不同感到困惑。我想知道如何在纯粹由数字组成的employee id字符串和其他字符串employee id之间进行比较,后者只有很少的字符和数字,同时使用inerface。

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

共有1个答案

卢俭
2023-03-14

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

在您的类的重写的Compareto方法中,您已经指定了对象应该基于Velraj类的Work属性进行排序。但是在main函数中的compare方法中,您已经指定了在velrajid字段中对对象进行排序。如果在这两种情况下使用相同的属性,那么在排序时将得到相同的结果。

 类似资料:
  • 我在客户端将一些参数存储在HTML中,然后需要将它们作为整数进行比较。不幸的是,我遇到了一个我无法解释的严重错误。bug似乎是我的JS将参数作为字符串而不是整数读取,导致我的整数比较失败。 我生成了一个错误的小例子,我也无法解释。运行时,以下返回“true”:

  • 问题内容: 我有一个String和一个int,可以说:和。什么是如果它们是相同的,看到的最快的方法还是(或者是有一个更快的方法?)? 这是Integer.parseInt和String.equals的源代码 问题答案: 会比 首先将num转换为O(n)的字符串,其中n是数字中的位数。然后它将再次进行字符串连接O(n),然后最终进行字符串比较。在这种情况下,字符串比较将是另一个O(n)-n是数字中的

  • 问题内容: 给我输出: 我不太了解第一行,为什么它会给我带来错误? 如果我在字符串2上添加空格,则此行为false,但如果不添加空格,则为true: 为什么第1行给我假,但第6行为真,但是如果我在string2上添加空格则为假。 谢谢=) 问题答案: 那里发生了几件事。 当您将两个字符串声明为相等的“ Hi”时,java将对其进行优化以引用相同的字符串对象(因此不必将相同的字符串存储两次)。 “

  • 问题内容: “按字典顺序比较两个字符串”是什么意思? 问题答案: 从@Bozho和@aioobe的答案出发,字典比较类似于在字典中可能会发现的顺序。 Java String类提供了该方法以便按字典顺序比较String。这样使用。 此方法的返回int值可以解释如下: 返回<0,则调用该方法的String按字典顺序排在首位(在字典中排在首位) 返回== 0,则这两个字符串在字典上等效 返回> 0,然后

  • 主要内容:equals() 方法,equalsIgnoreCase() 方法,equals()与==的比较,compareTo() 方法字符串比较是常见的操作,包括比较相等、比较大小、比较前缀和后缀串等。 在 Java 中,比较字符串的常用方法有 3 个:equals() 方法、equalsIgnoreCase() 方法、 compareTo() 方法。下面详细介绍这 3 个方法的使用。 equals() 方法 equals() 方法将逐个地比较两个字符串的每个字符是否相同。如果两个字符串具有相

  • 对性能是否有影响? 不同Java版本的行为是否有差异?