Comparartorの使用(ピット)

Comparartorの使用(ピット)

まず、それはより多くの問題の倍精度型の(ハハ、少し策略の意味、問題の倍精度型は非常に一般的ですが、しかし、2つが満たされたときとComparartor Comparartorの使用が、実際に言うことですが、 )一緒に彼らが見つけるのはそう簡単ではありませんので、ここで我々はまだそれについて話しています。さて、問題で始まる、問題は以下のコードです:

  1. (ストアデータた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 + "]";
	}
}

  1. (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 :(あなたが出会い、後に開発を行う場合)、高精度な計算は、二重を使用していないが必要です

リリース元の4件の記事 ウォン称賛10 ビュー714

おすすめ

転載: blog.csdn.net/LioTomcat/article/details/104502691