在Set集合中允许重复值是否可行?
是否有办法使元素保持唯一性并拥有一些副本? Set集合是否具有允许重复值的函数?
在Set集合中允许重复值是否可行?
是否有办法使元素保持唯一性并拥有一些副本? Set集合是否具有允许重复值的函数?
曾经考虑过使用java.util.List吗?
否则,我建议使用Google Guava中的Multiset(这是原来推荐的Google Collections的继任者)。
一个集合的definition不允许有重复项。也许你需要使用另一种数据结构,比如List,它可以允许重复项。
有没有办法使元素唯一并且拥有一些副本?
如果出于某种原因你真的需要在集合中存储重复项,那么你需要将它们包装在某种持有对象中,或者覆盖模型对象的equals()和hashCode()方法,以使它们不被视为等价的(即使这样做,如果你试图多次存储对同一物理对象的引用,也会失败)。
我认为你需要重新评估你想要实现的目标,或者至少向我们更清楚地解释一下。
关于“bags”(也称为multisets)的Sun公司观点:
我们非常理解对类型安全集合的需求。与其在框架中添加一种以特定方式强制执行类型安全的“绷带”,我们设计了一个可以与当前所有参数化类型提案相适应的框架。如果将参数化类型添加到语言中,整个集合框架将支持编译时类型安全使用,无需显式转换。不幸的是,在1.2版中这不会发生。与此同时,想要运行时类型安全的人们可以在包围JDK集合的“包装器”集合中实现自己的门禁函数。
(来源; 请注意它已经很老并且可能过时 -ed.)
除了Google的集合API之外,您还可以使用Apache Commons Collections。
Apache Commons Collections:
Is it possible to allow duplicate values in the Set collection?
Set
的人违反构建Set
的设计合同。基本上,我可以编写一个扩展了Set
但不执行Set
承诺的类。hashCode()
合同的Set
实现。然后,如果我提供了一个违反Java hashcode合同的Object
,我可能会将两个相等的对象放入集合中,但由于它们在不同的哈希桶链中,可能不会相互检查相等性而产生不同的哈希码。Is there any way to make the elements unique and have some copies of them?
这基本上取决于您如何定义“唯一性”。如果一个对象的唯一性是由其值确定的,那么就可以拥有多个相同唯一对象的副本;但是,如果对象的唯一性是由其实例确定的,那么根据定义,不可能拥有多个相同的对象副本。但是,您可以有多个对它们的引用。
Is there any functions for Set collection for having duplicate values in it?
Set
接口没有任何用于检测/报告重复项的函数;但是,它基于Collections接口,该接口必须支持List接口,因此可以将重复项传递到Set中;但是,一个正确实现的Set
将会忽略重复项,并呈现每个被确定为唯一的元素的一个副本。
我不相信在一个集合中可以有重复的值。集合被定义为一组唯一的值。你最好使用ArrayList。
您可以通过如下重写hashcode来实现:
public class Test
{
static int a=0;
@Override
public int hashCode()
{
a++;
return a;
}
public static void main(String[] args)
{
Set<Test> s=new HashSet<Test>();
Test t1=new Test();
Test t2=t1;
s.add(t1);
s.add(t2);
System.out.println(s);
System.out.println("--Done--");
}
}
firstEntry() -> provides smallest element entry, Time Complexity : O(Log N)
lastEntry() -> provides greatest element entry, Time Complexity : O(Log N)
我不这么认为。唯一的方法是使用List。你也可以通过equals()、hashcode()或compareTo()函数来欺骗,但这会很尴尬。
没有机会...在SET接口中不能有重复的值... 如果你想要重复值,可以尝试使用Array-List