【问题标题】:How to add element at specific index/position in HashSet?如何在 HashSet 中的特定索引/位置添加元素?
【发布时间】:2017-06-25 17:56:07
【问题描述】:

我有一些 String 元素的 HashSet 集合,如何在特定位置添加新元素?我查看了文档,但没有找到任何可以做到的方法。

【问题讨论】:

  • hash集的一个方面是它是无序的
  • 如何访问特定位置的元素?
  • 使用迭代器或foreach

标签: java collections hashset


【解决方案1】:

标准HashSet<T> 的一个方面是它是无序的。因此,您不能在特定索引处插入元素。或者在documentation中指定:

这个类实现了Set 接口,由一个哈希表支持(实际上是一个HashMap 实例)。它不保证集合的迭代顺序;特别是,它不保证订单会随着时间的推移保持不变。此类允许 null 元素。

当您进行插入、删除等操作时,HashSet<T> 可能会进行重新散列。因此,for(...) 循环中元素的顺序可以完全改变。

Hashset<T> 存在一个扩展,即LinkedHashSet<T>,它维护元素插入的顺序。

另一方面,TreeSet<T> 使用树,并根据顺序关系对元素进行排序(小于另一个对象的对象,在该元素之前发出)。

如果您可以在随机索引处插入一个元素,那会很奇怪,因为这会导致至少某些具有特定索引的操作需要 O(n) 时间。通常使用HashSet<T>O(1)(平均时间)中执行插入、删除等操作。

【讨论】:

    【解决方案2】:

    我们可以see pic 使用列表在特定索引处添加,然后使用 object.addAll(listobject 或 setobject 将该列表添加到设置

    Set<Integer> s=new HashSet<Integer>();
    Set<Integer> s1=new HashSet<Integer>(); 
    s1.add(6);
    List<Integer> l=new ArrayList<Integer>();
    l.add(5);
    l.add(2,2);
    l.add(0);
    System.out.println(l);
    S.addAll(l);//list
    S.addAll(s1);//another set
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多