【问题标题】:HashSet loses the old element when adding a new oneHashSet 在添加新元素时会丢失旧元素
【发布时间】:2021-09-22 08:45:31
【问题描述】:

必须在一个类中定义一个 HashSet,而我需要从其他类访问这个 HashSet 并向其中添加数据。但是,它并不容易,因为每次 HashSet 都好像被重置,当我添加一个新元素时,旧元素就消失了。

输出:

[]

[[sdadsa, fafafsa, ghfhgf, kjhkjh]]

[[], [sdadsa, fafafsa, ghfhgf, kjhkjh]]

头等舱:

public class listaKlasa {
    
        protected static Set<ArrayList<String>> unikatna = new HashSet<ArrayList<String>>();
    
        public static void setUnikatna(ArrayList<String> ista) {
            unikatna.add(ista);
        }
    
        public static Set<ArrayList<String>> getUnikatna() {
            return unikatna;
        }
    }

二等:

public class novitest {

    public static void main(String[] args) {

        System.out.println(listaKlasa.getUnikatna());
        ArrayList<String> li = new ArrayList<>();
        li.add("sdadsa");
        li.add("fafafsa");

        ArrayList<String> la = new ArrayList<>();
        li.add("ghfhgf");
        li.add("kjhkjh");

        listaKlasa.setUnikatna(li);

        System.out.println(listaKlasa.getUnikatna());
        listaKlasa.setUnikatna(la);
        System.out.println(listaKlasa.getUnikatna());
    }
}

【问题讨论】:

  • 我在您提供的输出中看不到任何意外行为。您正在向集合中添加 1 个空列表和 1 个包含 4 个元素的列表,这就是它打印出来的内容。也许你自己弄糊涂了,因为你给你的 ArrayList 提供了非常糟糕的变量名,因此似乎混淆了 lali(你只是添加到 lila 保持为空)
  • 这可能会出错,因为您在某处修改了ArrayList,而它存储在HashSet 中。这将使ArrayList 的哈希码在集合中发生变化,从而混淆集合。
  • 顺便说一句,你应该遵循Java命名约定:变量名和方法名用camelCase写,类名用PascalCase写。
  • 我同意 OH GOD SPIDERS 的观点,当前形式的输出是我期望的输出。 li 包含 4 个元素,而 la 在将它们添加到 Set 时包含 0 个元素。

标签: java arrays hash hashset


【解决方案1】:

试试这个:

System.out.println(listaKlasa.getUnikatna());
        ArrayList<String> li = new ArrayList<>();
        li.add("sdadsa");
        li.add("fafafsa");

        ArrayList<String> la = new ArrayList<>();
        la.add("ghfhgf");
        la.add("kjhkjh");

【讨论】:

    【解决方案2】:

    错误在于添加元素,而不是添加 2:2,而是将所有内容添加到一个列表中。

    头等舱:

    public class listaKlasa {
        
            protected static Set<ArrayList<String>> unikatna = new HashSet<ArrayList<String>>();
        
            public static void setUnikatna(ArrayList<String> ista) {
                unikatna.add(ista);
            }
        
            public static Set<ArrayList<String>> getUnikatna() {
                return unikatna;
            }
        }
    

    二等:

       public class novitest {
        
            public static void main(String[] args) {
        
                System.out.println(listaKlasa.getUnikatna());
                ArrayList<String> li = new ArrayList<>();
                li.add("sdadsa");
                li.add("fafafsa");
        
                ArrayList<String> la = new ArrayList<>();
                la.add("ghfhgf");
                la.add("kjhkjh");
        
                listaKlasa.setUnikatna(li);
        
                System.out.println(listaKlasa.getUnikatna());
                listaKlasa.setUnikatna(la);
                System.out.println(listaKlasa.getUnikatna());
            }
        }
    

    【讨论】:

      猜你喜欢
      • 2015-08-16
      • 2021-01-18
      • 1970-01-01
      • 1970-01-01
      • 2023-03-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-04-22
      相关资源
      最近更新 更多