我正在测试一个更复杂的任务,其中可能有重复的元素,我想避免使用 HashSet。
<小时/>我编写了以下使用 getAllEmpresas() 的代码,Empresa 或 Organization 是 DAOJson 检索的更复杂的结构,但我只对这些组织的名称感兴趣...
public class TestListaDeNombresDeEmpresas {
RepositorioDeEmpresas repo ;
HashSet<String> nombresDeEmpresas ;
List<Empresa> empresas ;
public TestListaDeNombresDeEmpresas () throws IOException
{
DAOJsonEmpresa dao = new DAOJsonEmpresa() ;
repo = RepositorioDeEmpresas.getInstance(dao) ;
empresas = repo.getAllEmpresas() ;
nombresDeEmpresas = new HashSet<String>();
fillHashSet();
}
public static void main (String [] args) throws IOException
{
TestListaDeNombresDeEmpresas test = new TestListaDeNombresDeEmpresas() ;
System.out.println("Imprimiendo lista de empresas");
test.imprimirListEmpresas();
test.fillHashSet();
System.out.println();
test.hashSetContainsFirstElement();
System.out.println("imprimiendo hash...");
test.imprimirHashNombresEmpresas();
}
public void fillHashSet() {
List<String> nombresDeEmpresasAux = empresas.stream()
.map(e -> e.getName()).collect(Collectors.toList()) ;
nombresDeEmpresasAux.forEach(e -> nombresDeEmpresas.add(e));
}
public void hashSetContainsFirstElement()
{
List<String> nombresDeEmpresasAux = empresas.stream()
.map(e -> e.getName()).collect(Collectors.toList()) ;
System.out.printf("Contiene el hash de empresas el nombre %s? : %s\n",
nombresDeEmpresasAux.get(0),nombresDeEmpresas
.contains( nombresDeEmpresasAux.indexOf(0) ) );
System.out.println();
}
public void imprimirHashNombresEmpresas()
{
nombresDeEmpresas.forEach(System.out::println);
}
public void imprimirListEmpresas()
{
empresas.forEach(e -> System.out.println( e.getName() ) ) ;
}
}
问题是当我运行时
public void hashSetContainsFirstElement()
{
List<String> nombresDeEmpresasAux = empresas.stream()
.map(e -> e.getName()).collect(Collectors.toList()) ;
System.out.printf("Contiene el hash de empresas el nombre %s? : %s\n",
nombresDeEmpresasAux.get(0),nombresDeEmpresas
.contains( nombresDeEmpresasAux.indexOf(0) ) );
}
它打印的是 false,这没有任何意义,实际上程序的输出是......
Imprimiendo lista de empresas
Nike
Facebook
Dolce&Gabbana
Twitter
Snapchat
YouTube
Contiene el hash de empresas el nombre Nike? : false
imprimiendo hash...
Nike
Dolce&Gabbana
Twitter
Facebook
YouTube
Snapchat
这清楚地表明 HashSet nombresDeEmpresas 实际上包含名称“Nike”...为什么会发生此错误以及如何修复它?
最佳答案
在你的行中:
System.out.printf("Contiene el hash de empresas el nombre %s? : %s\n",
nombresDeEmpresasAux.get(0),nombresDeEmpresas
.contains( nombresDeEmpresasAux.indexOf(0) ) );
您想使用 nombresDeEmpresasAux.get(0)
而不是 nombresDeEmpresasAux.indexOf(0)
吗?
关于java - HashSet 等于无法正常工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46537252/