这肯定是一个菜鸟问题,但我无法在谷歌或这里找到一个好的答案,所以我不得不问:
当我只想要添加一次值时,我应该在Java中使用哪种列表?
问题在于我在大学(网上商店)做网络技术项目,而且我也连接了这个云。我可以向那些在我店里购买商品的客户提出要求。我想要做的是提取这些ID并将它们添加到列表中。但是在提取它们时,我得到了他们购买的每个项目的ID,所以我想要一个可以检查的列表:“这个值已经在这个列表中,什么都不做”,或者“这个ID不在列表中,让我们添加ID“
是否有可以执行此操作的列表,或者使用列表执行此操作而不会使其过于复杂?
答案 0 :(得分:4)
您需要Set
,这是防止重复的数据结构。这是Collection
,因此您可以定义如下函数:
public Collection<MyObject> foo()
{
return new HashSet<MyObject>();
}
稍后将内部的返回值更改为:
public Collection<MyObject> foo()
{
return new ArrayList<MyObject>();
}
您的API不会中断。
答案 1 :(得分:2)
Set仅包含每个值一次。
虽然HashSet的问题在于添加元素的顺序会丢失。因此,如果您想保留元素的顺序,我建议您使用LinkedHashSet。
使用LinkedHashSet,迭代元素将按插入顺序返回它们。
public static void main(String[] args) {
Set<String> hashSet = new HashSet<>();
hashSet.add("first");
hashSet.add("second");
hashSet.add("third");
for (String s : hashSet) {
System.out.println(s); // no particular order
}
Set<String> linkedHashSet = new LinkedHashSet<>();
linkedHashSet.add("first");
linkedHashSet.add("second");
linkedHashSet.add("third");
for (String s : linkedHashSet) {
System.out.println(s); // "first", "second", "third"
}
}
答案 2 :(得分:0)
public boolean insertRecord(Programmer targetProgrammer, List programmerList) {
boolean flag = false;
for (Programmer p : programmerList){
if (targetProgrammer.getId() == p.getId()) {
return true;
}
}
return flag;
}
// Then when you invoke:
Programmer target = new Programmer(1,"Dev","Java");
if (!insertRecord(target, myList)) {
myList.add(target);
}
答案 3 :(得分:0)
您要找的是Set
,因为Set
是Collection
,不包含重复内容。
根据您的需要,您可以使用几种类型:
答案 4 :(得分:-1)