java - HashSet 等于无法正常工作

标签 java hashset

我正在测试一个更复杂的任务,其中可能有重复的元素,我想避免使用 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/

相关文章:

JAVA HashSet顺序

java - 如何在使用 retainAll 方法后重置 HashSet?

java - 整数哈希集

Java:为什么我的 HashSet 和 TreeSet 包含重复项?

java - 当我尝试从 Intent putExtra 时,出现空指针异常

java - jQuery/Ajax 显示“另存为”对话框,用于下载从 servlet 发送的文件

java - Android - 使用静态字段是否是 Activity 重新启动的好习惯?

java - 如何在 Spring REST 的一个参数中传递键值

java - 我的 HashSet 包含(意义相同的)重复项!

java - 如何传递 java.lang.reflect.Array.newInstance 的泛型类型?