【发布时间】:2017-06-25 17:56:07
【问题描述】:
我有一些 String 元素的 HashSet 集合,如何在特定位置添加新元素?我查看了文档,但没有找到任何可以做到的方法。
【问题讨论】:
-
hash集的一个方面是它是无序的。
-
如何访问特定位置的元素?
-
使用迭代器或foreach
标签: java collections hashset
我有一些 String 元素的 HashSet 集合,如何在特定位置添加新元素?我查看了文档,但没有找到任何可以做到的方法。
【问题讨论】:
标签: java collections hashset
标准HashSet<T> 的一个方面是它是无序的。因此,您不能在特定索引处插入元素。或者在documentation中指定:
这个类实现了
Set接口,由一个哈希表支持(实际上是一个HashMap实例)。它不保证集合的迭代顺序;特别是,它不保证订单会随着时间的推移保持不变。此类允许null元素。
当您进行插入、删除等操作时,HashSet<T> 可能会进行重新散列。因此,for(...) 循环中元素的顺序可以完全改变。
Hashset<T> 存在一个扩展,即LinkedHashSet<T>,它维护元素插入的顺序。
另一方面,TreeSet<T> 使用树,并根据顺序关系对元素进行排序(小于另一个对象的对象,在该元素之前发出)。
如果您可以在随机索引处插入一个元素,那会很奇怪,因为这会导致至少某些具有特定索引的操作需要 O(n) 时间。通常使用HashSet<T> 在O(1)(平均时间)中执行插入、删除等操作。
【讨论】:
我们可以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
【讨论】: