0

这肯定是一个菜鸟问题,但我无法在谷歌或这里找到一个好的答案,所以我不得不问:

当我只想添加一个值时,我应该在 Java 中使用什么样的列表?

问题是我在大学(网上商店)做一个网络技术项目,我也有这个云连接。我可以向在我商店购买商品的人索取客户 ID。我想要做的是提取这些 ID 并将它们添加到列表中。但是在提取它们时,我得到了他们购买的每件商品的返回 ID,所以我想要一个可以检查的列表:“这个值已经在这个列表中,什么都不做”,或者“这个 ID 不在列表中,让我们添加身份证”

有没有一个可以做到这一点的列表,或者有一种方法可以用一个列表来做到这一点而不会变得太复杂?

4

5 回答 5

4

你想要一个Set,这是防止重复的数据结构。这是一个Collection所以你可以定义一个这样的函数:

public Collection<MyObject> foo()
{
     return new HashSet<MyObject>();
}

稍后将内部返回更改为:

public Collection<MyObject> foo()
{
     return new ArrayList<MyObject>();
}

而且您的 API 不会中断。

于 2013-03-04T15:28:33.290 回答
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"
    }
}
于 2014-12-19T09:14:32.490 回答
0

您将要寻找的是 a Set,因为 aSetCollection不包含重复项的 a 。

您可以根据需要使用几种类型:

  • 哈希集
  • 链接哈希集
  • CopyOnWriteArraySet
  • 枚举集
  • 树集
  • 并发跳过列表集
于 2013-03-04T15:45:10.857 回答
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);
}
于 2013-03-04T15:32:49.730 回答
-1

最好使用HashSet,因为它可以隐式处理您的唯一 ID 问题。更好的是SortedSet,您可以在其中自动按排序顺序打印独特的元素。

于 2013-03-04T17:27:48.793 回答