如何在Java中创建唯一/不同对象的列表(无重复)?
现在我使用HashMap<String, Integer>
来做这件事,因为键被覆盖了,因此在最后我们可以得到HashMap.getKeySet()
,它将是唯一的。但我相信应该有更好的方法来做到这一点,因为价值部分在这里被浪费了。
发布于 2014-12-15 02:23:51
我想在这里为最初的海报澄清一些事情,其他人已经暗示了,但没有真正明确地说明。当你说你想要一个唯一的列表时,这就是有序集的定义。Set接口和List接口之间的其他一些关键区别在于,List允许您指定插入索引。所以,问题是,你真的需要列表界面(例如,为了与第三方库兼容,等等),或者你能重新设计你的软件来使用Set界面吗?您还必须考虑如何处理接口。根据元素的索引查找元素很重要吗?你期望你的集合中有多少个元素?如果你要有很多元素,排序是重要的吗?
如果您确实需要一个只具有唯一约束的列表,可以使用Apache Common Utils类org.apache.commons.collections.list.SetUniqueList,它将为您提供列表接口和唯一约束。请注意,这会破坏List接口。但是,如果您需要按索引查找列表,您将从中获得更好的性能。如果您可以处理set接口,并且您有一个较小的数据集,那么LinkedHashSet可能是一个很好的选择。这取决于你的软件的设计和意图。
同样,每个集合都有一定的优点和缺点。一些快速插入但缓慢读取,一些快速读取但缓慢插入,等等。花相当多的时间阅读集合文档以充分了解每个类和接口的详细信息是有意义的。
发布于 2012-11-07 05:18:29
以new HashSet<String>
为例:
import java.util.HashSet;
import java.util.Set;
public class MainClass {
public static void main(String args[]) {
String[] name1 = { "Amy", "Jose", "Jeremy", "Alice", "Patrick" };
String[] name2 = { "Alan", "Amy", "Jeremy", "Helen", "Alexi" };
String[] name3 = { "Adel", "Aaron", "Amy", "James", "Alice" };
Set<String> letter = new HashSet<String>();
for (int i = 0; i < name1.length; i++)
letter.add(name1[i]);
for (int j = 0; j < name2.length; j++)
letter.add(name2[j]);
for (int k = 0; k < name3.length; k++)
letter.add(name3[k]);
System.out.println(letter.size() + " letters must be sent to: " + letter);
}
}
发布于 2018-06-28 15:49:06
我不知道这有多有效,但在一个简单的上下文中对我来说是有效的。
List<int> uniqueNumbers = new ArrayList<>();
public void AddNumberToList(int num)
{
if(!uniqueNumbers .contains(num)) {
uniqueNumbers .add(num);
}
}
https://stackoverflow.com/questions/13259535
复制相似问题