Comparartorの使用(ピット)
まず、それはより多くの問題の倍精度型の(ハハ、少し策略の意味、問題の倍精度型は非常に一般的ですが、しかし、2つが満たされたときとComparartor Comparartorの使用が、実際に言うことですが、 )一緒に彼らが見つけるのはそう簡単ではありませんので、ここで我々はまだそれについて話しています。さて、問題で始まる、問題は以下のコードです:
- (ストアデータたjavaBeanに使用されるクラスである)Person.java
import java.util.Objects;
/*
* Person类,遵从Comparable<T>接口, 要求实现对应 compareTo方法
*/
public class Person {
private int id;
private String name;
//关键就是这个double类型变量(工资)
private double salary;
public Person() {
}
public Person(int id, String name, double salary) {
super();
this.id = id;
this.name = name;
this.salary = salary;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public double getSalary() {
return salary;
}
public void setSalary(double salary) {
this.salary = salary;
}
@Override
public String toString() {
return "Person [id=" + id + ", name=" + name + ", salary=" + salary + "]";
}
}
- (PersonオブジェクトであるTeerSetの追加データを使用して、)Demo.java
package com.qfedu.b_set;
import java.util.Comparator;
import java.util.Map.Entry;
import java.util.TreeSet;
public class Demo5 {
public static void main(String[] args) {
/*
* 匿名内部类的匿名对象作为方法参数
*/
TreeSet<Person> set = new TreeSet<Person>(new Comparator<Person>() {
@Override
public int compare(Person o1, Person o2) {
int ret = (int) ( (o1.getSalary() - o2.getSalary())*100 );
return ret;
}
});
Person p1 = new Person(1, "余晖", 10.01);
Person p2 = new Person(2, "将夜", 10.03);
Person p3 = new Person(3, "朔鼠", 10.05);
Person p4 = new Person(4, "邶风", 10.07);
Person p5 = new Person(5, "柏州", 10.00);
Person p6 = new Person(6, "与归", 11.00);
set.add(p1);
set.add(p2);
set.add(p3);
set.add(p4);
set.add(p5);
set.add(p6);
for(Person p : set) {
System.out.println(p);
}
}
}
まあ、ピットに、今、いくつかのPersonオブジェクトとに設定されますか?
(私が聞いている、もちろん、6である)
ああ、私はちょうどそれから、同じように考え始めました。。。。。私が間違っていた、私は信じていないのですか?以下のスクリーンショットを見て
量。。。。「パーカー状態」どこ行きますか?
私たちは、整然とした、TreeSetのは、バイナリツリーに基づいています知っておく必要がある2つの同一のオブジェクト(TreeSetのが存在する場合には、あること、繰り返すことはできませんまず
追加を繰返さないコンパレータの決定)は、2種のTreeSetの、自然とカスタム順序付けをサポートしていますデフォルトのソート順の自然な順序で発注。で参加するTreeSetのは、同じクラスのオブジェクトでなければなりません。
TreeSetのを解析する2つのオブジェクトが等しくない2つのオブジェクトによって偽方法は、メソッドに等しい、または決意結果同じ比較条件compareToメソッドにより、戻り0;我々は、上記の方法を用いるのCompareTo第二の実施形態を比較することによってされ、問題の嘘我々は、に基づいて、比較の過程にあるため、この中で、給与を決定するために、比較プロセスP1およびP2にcompareToメソッドの戻りは、0同じ賃金を比較します。。。。。。
(嘘は、(10.01 --10)* 100 = 1、あなたはそれが1を返し、明らかに私をばかにしないでください)
まあ、まだ写真を来る:
(いったいそれは0.1どうあるべきか?)
まあ、実際には、我々はここについての話をしましたなぜわずか5人バーでのセットも理解して、それから、この問題は主に倍精度の問題で、つまり、バイナリで表現できない、いくつかの小数点以下は、例の小数(0.1)のために、あなたはそれを試してみる、あなたは私を終えるので、あなたのお茶、ハハ、あなたはこれがバイナリ表現(0.000110011001100 ...)であることがわかりますが、それだけで近似することができ、
(?それを解決するために、どのように)
100を掛けず、1000年に同様
(...)
ハハ、何の冗談は、ここで我々は唯一のような操作のBigDecimalの型に変換されます。このメソッドを使用して二重文字に二重のターンの後のBigDecimal(String値)このメソッドを使用する必要がありません
以下は、変更の結果である:
PS :(あなたが出会い、後に開発を行う場合)、高精度な計算は、二重を使用していないが必要です