本文将分享有效的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
- 5.21 String类的compareTo()方法的源码解析
- asp.net – CompareValidator的间歇性错误 – ValueToCompare属性为“”
- Clojure atoms compare-and-set
- Collections 接口下的 Comparetor 类和 Comparable 接口排序
有效的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()方法的源码解析
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: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
(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 接口排序
继承 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 接口排序等相关知识的信息别忘了在本站进行查找喔。
本文标签: