Java HashSet по-прежнему позволяет дублировать

У меня есть класс под названием "Гора", в котором я переопределяю метод hashCode() и equals() для использования в 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);



 }


}
</mountain></mountain></mountain></mountain>
1 ответ

Это проблема (окончательная строка):

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]

licensed under cc by-sa 3.0 with attribution.