GVKun编程网logo

有效的compareTo()用于基本long

16

本文将分享有效的compareTo的详细内容,并且还将对用于基本long进行详尽解释,此外,我们还将为大家带来关于5.21String类的compareTo()方法的源码解析、asp.net–Comp

本文将分享有效的compareTo的详细内容,并且还将对用于基本long进行详尽解释,此外,我们还将为大家带来关于5.21 String类的compareTo()方法的源码解析、asp.net – CompareValidator的间歇性错误 – ValueToCompare属性为“”、Clojure atoms compare-and-set、Collections 接口下的 Comparetor 类和 Comparable 接口排序的相关知识,希望对你有所帮助。

本文目录一览:

有效的compareTo()用于基本long

有效的compareTo()用于基本long

在排序列表上工作时,我到了要为原始长值实现compareTo()函数的地步。

不是在寻找明显的幼稚实现 ,而是想知道是否有一种优雅的单行代码可以做到这一点(而无需创建新的Long(value))。

也许是这样的:

@Override public int compareTo(MyClass that) {    return (int) ((value - that.value) >>> 32);}

任何人都可以验证是否行得通和/或建议其他实施方式吗?

答案1

小编典典

一种班轮代码:

int res = Long.compare(long x, long y)

您的代码无法在所有值上正常工作,请为Integer.MIN_VALUE-Integer.MAX_VALUE进行尝试,您将获得+1

5.21 String类的compareTo()方法的源码解析

5.21 String类的compareTo()方法的源码解析

private final char value[];
  
    字符串会自动转换为一个字符数组。
  
  public int compareTo(String anotherString) {
  		//this -- s1 -- "hello"
  		//anotherString -- s2 -- "hel"
  
        int len1 = value.length; //this.value.length--s1.toCharArray().length--5
        int len2 = anotherString.value.length;//s2.value.length -- s2.toCharArray().length--3
        int lim = Math.min(len1, len2); //Math.min(5,3); -- lim=3;
        char v1[] = value; //s1.toCharArray()
        char v2[] = anotherString.value;
        
        //char v1[] = {''h'',''e'',''l'',''l'',''o''};
        //char v2[] = {''h'',''e'',''l''};

        int k = 0;
        while (k < lim) {
            char c1 = v1[k]; //c1=''h'',''e'',''l''
            char c2 = v2[k]; //c2=''h'',''e'',''l''
            if (c1 != c2) {
                return c1 - c2;
            }
            k++;
        }
        return len1 - len2; //5-3=2;
   }
   
   String s1 = "hello";
   String s2 = "hel";
   System.out.println(s1.compareTo(s2)); // 2


asp.net – CompareValidator的间歇性错误 – ValueToCompare属性为“”

asp.net – CompareValidator的间歇性错误 – ValueToCompare属性为“”

我有一个带有CompareValidator的页面:

<asp:textBox id="txtResponseDate" runat="server" />
<asp:requiredfieldvalidator id="rfvResponseDate" runat="server"
                        controltovalidate="txtResponseDate"
                        display="Dynamic"
                        errormessage="Date is required."
                        setfocusonerror="true">
                    </asp:requiredfieldvalidator>
<asp:comparevalidator id="cmvDate" runat="server"
                        controltovalidate="txtResponseDate"
                        display="Dynamic"
                        errormessage="Date must not be before today."
                        operator="GreaterThanEqual"
                        setfocusonerror="true"
                        type="Date">
                    </asp:comparevalidator>

在后面的代码中,我们设置ValuetoCompare属性,如下所示:

If Not IsPostBack Then

    cmvDate.ValuetoCompare = DateTime.Now.ToString("d")   

End If

间歇性地(我们无法辨别模式),我们得到以下错误:

“’cmvDate’的ValuetoCompare属性的值”无法转换为’Date’类型.”

使用以下调用堆栈:

at System.Web.UI.WebControls.CompareValidator.ControlPropertiesValid() 
at System.Web.UI.WebControls.BaseValidator.get_PropertiesValid() 
at System.Web.UI.WebControls.BaseValidator.Validate() 
at System.Web.UI.Page.Validate() 
at System.Web.UI.Page.Validate(String validationGroup) 
at System.Web.UI.WebControls.Button.RaisePostBackEvent(String eventArgument)

我的第一个想法是日期格式奇怪,但我们使用的是英国日期,最后一次错误发生在7月18日,所以ValuetoCompare设置为18/07/2011.我使用调试器手动设置它,它工作正常.任何人都有任何明智的想法,为什么会发生这种情况?

>我检查了代码 – 没有其他地方可以设置.
>使用调试器,我在回发时进行了双重检查,并且正如预期的那样,保留了此属性值.

解决方法

The value ” of the ValuetoCompare property of ‘cmvDate’ cannot be converted to type ‘Date’.

此错误消息表示,在验证时刻,您的rangeValidator本身(不是您正在验证的控件)的ValuetoCompare属性未设置.这可以是你写这行:

If Not IsPostBack Then
    cmvDate.ValuetoCompare = DateTime.Now.ToString("d")   
End If

不在Page_Init事件中.

>将ValuetoCompare的设置代码移动到Init event,同时删除对Postback的检查.>检查,在数据检查期间具有此属性的值(可能是,您应该删除对Not IsPostBack的检查).>在检查发生之前设置此属性.

Clojure atoms compare-and-set

Clojure atoms compare-and-set

(ns clojure.examples.example
   (:gen-class))
(defn example []
   (def myatom (atom 1))
   (println @myatom)

   (compare-and-set! myatom 0 3)
   (println @myatom)

   (compare-and-set! myatom 1 3)
   (println @myatom))
(example)

Collections 接口下的 Comparetor 类和 Comparable 接口排序

Collections 接口下的 Comparetor 类和 Comparable 接口排序

 继承 Comparable 接口,重写 compareTo 方法进行排序:
public class Student implements Comparable<Student>{
    private String name;
    private int id;
    private int age;
    public Student() {
        super();
    }
    public Student(String name, int id, int age) {
        super();
        this.name = name;
        this.id = id;
        this.age = age;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public int getId() {
        return id;
    }
    public void setId(int id) {
        this.id = id;
    }
    public int getAge() {
        return age;
    }
    public void setAge(int age) {
        this.age = age;
    }
    @Override
    public String toString() {
        return "Student [name=" + name + ", id=" + id + ", age=" + age + "]";
    }
    @Override
    public int compareTo(Student s) {
        
        return this.age-s.age;
    }
    
    
}

public class Test01 {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        List<Student> list = new ArrayList<Student>();
        Student s1 = new Student ("张三",1,16);
        Student s2 = new Student ("张四",2,12);
        Student s3 = new Student ("张五",3,18);
        list.add(s1);list.add(s2);list.add(s3);
        //Collections.sort () 会自动调用 compareTo()方法
        Collections.sort(list);
        for (Student student : list) {
            System.out.println(student);
        }
    }

}
运行:
Student [name = 张四,id=2, age=12]
Student [name = 张三,id=1, age=16]
Student [name = 张五,id=3, age=18]

   Comparetor 下的 compare 方法排序:

public class Student{
    private String name;
    private int id;
    private int age;
    public Student() {
        super();
    }
    public Student(String name, int id, int age) {
        super();
        this.name = name;
        this.id = id;
        this.age = age;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public int getId() {
        return id;
    }
    public void setId(int id) {
        this.id = id;
    }
    public int getAge() {
        return age;
    }
    public void setAge(int age) {
        this.age = age;
    }
    @Override
    public String toString() {
        return "Student [name=" + name + ", id=" + id + ", age=" + age + "]";
    }
}

public class Test01 {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        List<Student> list = new ArrayList<Student>();
        Student s1 = new Student ("张三",1,16);
        Student s2 = new Student ("张四",2,12);
        Student s3 = new Student ("张五",3,18);
        list.add(s1);list.add(s2);list.add(s3);
        Collections.sort(list, new Comparator<Student>() {

            @Override
            public int compare(Student o1, Student o2) {
                // TODO Auto-generated method stub
                return o1.getAge()-o2.getAge();
            }

        });
        for (Student student : list) {
            System.out.println(student);
        }
    }

}

运行:
Student [name = 张四,id=2, age=12]
Student [name = 张三,id=1, age=16]
Student [name = 张五,id=3, age=18]

关于有效的compareTo用于基本long的问题就给大家分享到这里,感谢你花时间阅读本站内容,更多关于5.21 String类的compareTo()方法的源码解析、asp.net – CompareValidator的间歇性错误 – ValueToCompare属性为“”、Clojure atoms compare-and-set、Collections 接口下的 Comparetor 类和 Comparable 接口排序等相关知识的信息别忘了在本站进行查找喔。

本文标签: