2013-07-29 68 views
-1

我有一个名为Mountain的类,其中我重写了hashCode()和equals()方法以便在HashSet中使用,以便我不会得到重复项。但是,无论如何,我反复反思山脉。我搞不明白我搞乱了什么。该代码实现:Java HashSet仍然允许重复项

package Unidad16; 

public class Mountain{ 

    String Name; 
    int Heigh; 


    Mountain(String n,int h){ 
     this.Name=n; 
     this.Heigh = h; 

    } 
    public void setName(String name){ 
     this.Name=name; 
    } 
    public String getName(){ 
     return this.Name; 
    } 
    public void setHeigh(int Heigh){ 
     this.Heigh=Heigh; 
    } 
    public int getHeigh(){ 
     return this.Heigh; 
    } 
    public String toString(){ 
     return this.Name; 
    } 

    @Override 
    public boolean equals(Object aMountain){ 

     if(!(aMountain instanceof Mountain)){ 
      return false; 
     } 

     Mountain m = (Mountain) aMountain; 
     return this.Name.equals(m.getName()); 
    } 
    @Override 
    public int hashCode(){ 
     return this.Name.hashCode(); 
    } 



} 









package Unidad16; 

import java.util.ArrayList; 
import java.util.Collections; 
import java.util.HashSet; 
import java.util.List; 

public class MainCompara { 

    public static void main(String args[]){ 


     List<Mountain> listaMontanas = new ArrayList<Mountain>(); 
     listaMontanas.add(new Mountain("Loma Cabrera", 2000)); 
     listaMontanas.add(new Mountain("Loma Cabrera", 2000)); 
     listaMontanas.add(new Mountain("Pico Duarte", 2000)); 
     listaMontanas.add(new Mountain("Pico Duarte", 2000)); 
     listaMontanas.add(new Mountain("Pico Duarte", 2000)); 
     listaMontanas.add(new Mountain("Pico Duarte", 2000)); 
     listaMontanas.add(new Mountain("Montaña X", 3000)); 
     listaMontanas.add(new Mountain("Montaña X", 3000)); 

     //Collections.sort(listaMontanas); 
     System.out.println(listaMontanas); 
     System.out.println("**************************************************"); 
     HashSet<Mountain> miSet = new HashSet<Mountain>(); 
     miSet.addAll(listaMontanas); 
     System.out.println(listaMontanas); 



    } 


} 

回答

4

这是问题(最后一行):你的意思

System.out.println(listaMontanas); 

System.out.println(miSet); 

目前你只是打印出清单两次,而不是第二次。

随着这种变化,输出为:

[Loma Cabrera, Loma Cabrera, Pico Duarte, Pico Duarte, Pico Duarte, Pico Duarte, 
Montaña X, Montaña X] 
************************************************** 
[Loma Cabrera, Montaña X, Pico Duarte] 
+0

得到它与发布之​​前18秒我想通了,织补 – Claudiu

+0

简单迷人,只有18秒.. – Oscerd

+0

哦,我是附近。 ...谢谢Skeet先生。 – BoyWonderRD