Java中的“double,Double,HashSet”

时间:2014-12-06 07:21:28

标签: java hashmap hashset type-conversion

请参阅下面的代码。

“Double”(上部D)用于HashSet,“double”用于x1,x2和x3。将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

2 个答案:

答案 0 :(得分:2)

尝试这样来理解差异:

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

基本上doubles已签名,0 / -1将被评估为-0.0而不是0.0 x1或x2。

答案 1 :(得分:0)

HashSet<E>不同,

List<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得到解答,我建议你阅读。

代码的一些小问题。