簡體   English   中英

Java中的“ double,Double,HashSet”

[英]“double, Double, HashSet” in Java

請參見下面的代碼。

HashSet中使用“ Double”(上D),而x1,x2和x3使用“ double”。 在將x1添加到HashSet之后,無法添加x2,但是可以添加x3! 為什么??????

提前致謝 :)

HashSet<Double> hs = new HashSet<Double>();
double x1, x2, x3;

x1 = (double)0/1;
System.out.println(hs.add(x1)); //true

x2 = (double)0/2;
System.out.println(hs.add(x2)); //false

x3 = (double)0/-1;
System.out.println(hs.add(x3)); //true

並且,如果為x1,x2和x3添加“ 0.0 +”,則結果如下。

x1 = 0.0 + (double)0/1;
System.out.println(hs.add(x1)); //true

x2 = 0.0 + (double)0/2;
System.out.println(hs.add(x2)); //false

x3 = 0.0 + (double)0/-1;
System.out.println(hs.add(x3)); //false

嘗試一下以了解差異:

HashSet<Double> hs = new HashSet<Double>();
double x1, x2, x3;

x1 = (double)0/1;
System.out.println(x1 + " "+ hs.add(x1)); //true

x2 = (double)0/2;
System.out.println(x2 + " " + hs.add(x2)); //false

x3 = (double)0/-1;
System.out.println(x3 + " " + hs.add(x3)); //true

基本上雙精度符號是有符號的,並且x1或x2將0 / -1的值計算為-0.0而不是0.0。

List<E>不同, HashSet<E>僅允許唯一值。

x1 = (double)0/1; 等於0.0 ,與x2 = 0.0 + (double)0/2; x3 = (double)0/-1; 等於-0.0 這就是為什么您可以添加第一個和第三個元素而不添加第二個元素的原因。

什么時候使用HashSet? List的優點是什么?

我已經在這里建議您閱讀HashSet vs. List performance了

您的代碼中的一些小事情。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM