Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/329.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 只能包含一次值的列表_Java_List - Fatal编程技术网

Java 只能包含一次值的列表

Java 只能包含一次值的列表,java,list,Java,List,这肯定是一个noob问题,但我在谷歌或这里都找不到好的答案,所以我不得不问: 当我只想添加一次值时,我应该在Java中使用什么样的列表 问题是我在大学里做一个网络技术项目(一个网店),我也连接了这个云。我可以向在我的商店购买商品的人申请客户ID。我想做的是提取这些ID并将其添加到列表中。但是在提取它们时,我会得到他们购买的每件商品的ID,因此我想要一个列表,可以检查:“此值已在此列表中,请不要执行任何操作”或“此ID不在列表中,让我们添加ID” 有没有一个列表可以做到这一点,或者有没有一种方法可

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

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

问题是我在大学里做一个网络技术项目(一个网店),我也连接了这个云。我可以向在我的商店购买商品的人申请客户ID。我想做的是提取这些ID并将其添加到列表中。但是在提取它们时,我会得到他们购买的每件商品的ID,因此我想要一个列表,可以检查:“此值已在此列表中,请不要执行任何操作”或“此ID不在列表中,让我们添加ID”


有没有一个列表可以做到这一点,或者有没有一种方法可以在列表不太复杂的情况下做到这一点?

如果需要一个
集,这就是防止重复的数据结构。这是一个
集合
,因此您可以定义如下函数:

public Collection<MyObject> foo()
{
     return new HashSet<MyObject>();
}
public Collection foo()
{
返回新的HashSet();
}
在以后的时间内,将内部返回更改为:

public Collection<MyObject> foo()
{
     return new ArrayList<MyObject>();
}
public Collection foo()
{
返回新的ArrayList();
}

而且你的API不会中断。

如果你想要一个
集,这就是防止重复的数据结构。这是一个
集合
,因此您可以定义如下函数:

public Collection<MyObject> foo()
{
     return new HashSet<MyObject>();
}
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);
}
public Collection foo()
{
返回新的HashSet();
}
在以后的时间内,将内部返回更改为:

public Collection<MyObject> foo()
{
     return new ArrayList<MyObject>();
}
public Collection foo()
{
返回新的ArrayList();
}

而且您的API不会中断。

您将寻找的是一个
集,因为
集是一个不包含重复项的
集合

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);
}
根据您的需要,您可以使用以下几种类型:

  • 哈希集
  • 链接数据集
  • CopyOnWriteArraySet
  • 枚举集
  • 树集
  • ConcurrentSkipListSet

您将寻找的是一个
集合,因为
集合是一个不包含重复项的
集合

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

  • 哈希集
  • 链接数据集
  • CopyOnWriteArraySet
  • 枚举集
  • 树集
  • ConcurrentSkipListSet

    • 更好地使用它,因为它隐式地解决了唯一ID的问题。更好的是,您可以自动按排序顺序打印唯一元素。

      更好地使用它,因为它隐式地解决了唯一ID的问题。更好的是,您可以自动按排序顺序打印唯一元素。

      一个集合只包含每个值一次

      但是,问题是元素的添加顺序丢失了。因此,如果您想保持元素的顺序,我建议使用
      对于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"
          }
      }
      
      publicstaticvoidmain(字符串[]args){
      Set hashSet=新hashSet();
      添加(“第一”);
      添加(“第二”);
      添加(“第三”);
      for(字符串s:hashSet){
      System.out.println(s);//无特定顺序
      }
      Set linkedHashSet=new linkedHashSet();
      linkedHashSet.add(“第一”);
      linkedHashSet.add(“第二”);
      linkedHashSet.add(“第三”);
      for(字符串s:linkedHashSet){
      System.out.println(s);/“第一”、“第二”、“第三”
      }
      }
      
      一个集合只包含每个值一次

      但是,问题是元素的添加顺序丢失了。因此,如果您想保持元素的顺序,我建议使用
      对于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"
          }
      }
      
      publicstaticvoidmain(字符串[]args){
      Set hashSet=新hashSet();
      添加(“第一”);
      添加(“第二”);
      添加(“第三”);
      for(字符串s:hashSet){
      System.out.println(s);//无特定顺序
      }
      Set linkedHashSet=new linkedHashSet();
      linkedHashSet.add(“第一”);
      linkedHashSet.add(“第二”);
      linkedHashSet.add(“第三”);
      for(字符串s:linkedHashSet){
      System.out.println(s);/“第一”、“第二”、“第三”
      }
      }
      
      不是列表,你需要一个。不是列表,你需要一个。重新创建控制盘。一个集合已经处理了这个功能。是的,我知道,但在一些学校,你被要求只使用ArrayList开始工作,而不允许使用其他类型的列表、映射或集合,因此如果是这样的话,有一个使用ArrayList的解决方案。致以最良好的祝愿。当然,在这种情况下,重点是让学生自己做作业,以便学到一些东西。此外,方法“insertRecord()”可能应该插入记录或重命名。重新创建控制盘。一个集合已经处理了这个功能。是的,我知道,但在一些学校,你被要求只使用ArrayList开始工作,而不允许使用其他类型的列表、映射或集合,因此如果是这样的话,有一个使用ArrayList的解决方案。致以最良好的祝愿。当然,在这种情况下,重点是让学生自己做作业,以便学到一些东西。另外,方法“insertRecord()”可能应该插入一条记录,或者被重命名。在这里最好使用泛型。是否有一个集合可以自动按值对其进行排序?我知道TreeSet可以按键排序,但我需要一种方法来轻松获得5个具有最高值的对象?在这里使用泛型可能是最好的。是否有一个集合可以自动按值排序?我知道TreeSet可以按键排序,但我需要一种方法来轻松获得具有最高值的5个对象?以保持元素排序的开销为代价。以保持元素排序的开销为代价。