Java - ArrayList 未检测到重复值

标签 java arrays arraylist contains

我为我的程序编写了以下类:

public class RefGen {

    private static String refNo;

    protected static void generate(){

         //Create array to store reference
         ArrayList<String> refList = new ArrayList<>();

         //Get date and set output format
         DateFormat dateFormat = new SimpleDateFormat("yyMMdd");        
         Date curDate = new Date();

          //Variables
          String clientKey = InGenUI.clientText.getText();
          String refDate = dateFormat.format(curDate); 
          String refType = InGenUI.typeCombo.getSelectedItem().toString();
          String userName = InGenUI.userCombo.getSelectedItem().toString();
          String ref;
          int n = 1;

          //Create Reference
          refNo = clientKey.toUpperCase() + "/" + refDate + "/" + refType + "/" + userName + "/" + Integer.toString(n);

          //Check to see if refNo already exists in array
          while (refList.contains(refNo)) {
              n = n + 1;
              refNo = clientKey.toUpperCase() + "/" + refDate + "/" + refType + "/" + userName + "/" + Integer.toString(n);
              refList.add(refNo);
          }

          refList.add(refNo);
          System.out.println(refList);
      }

      public static String reference(){

          return refNo;
      }
  }

此类的目的是生成唯一的引用号并将其存储在数组中。在此之前,需要检查数组是否已包含该值。如果不是,则 n 增加 1,直到 refNo 成为数组中不存在的唯一值。

RefGen.reference() 由 InGenUI.java 中的 genButton 调用,将 refNo 的值输出到 clientLabel 也在 InGenUI.java 中:

    private void genButtonActionPerformed(java.awt.event.ActionEvent evt) {                                          
        RefGen.generate();
        String refNo = RefGen.reference();
        clientLabel.setText(refNo);
    }

程序生成引用编号,但从不增加 InGenUI.java 中的标签值或 RefGen.java 中的实际数组本身。似乎该数组在每次单击按钮时只保存一个值。

我认为 refList 存储生成的原始 refNo 值,但每次都会清空数组。我怀疑每次单击 genButton 时,我实际上是在创建 refList 的新实例,从而清除旧值。它是否正确?如果是这样,我如何保护我创建的 refList 实例,同时将其保留在 RefGen.java 类中?

提前谢谢您。

最佳答案

每次调用generate时,您似乎都会创建一个新的数组列表:

     //Create array to store reference
     ArrayList<String> refList = new ArrayList<>();

您应该在类级别的方法之外声明它。

关于Java - ArrayList 未检测到重复值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25012524/

相关文章:

Java:如何按属性对对象列表进行排序和分组

java - 为什么 newInstance() 返回 null?

java - 如果它是 Java 中的整数数组,如何检查 null 元素?

java - 对象数组添加仅添加最后一条记录

java - @XMLRootElement 元素或数组名称

java - 将自定义 ListView 与图像和文本放在一起

java - java中char数组到String数组的转换

c++ - 使用循环获取数字并将其列出(专长数组)

java - 如何从另一个列表中删除一个列表的重叠内容?

java - hibernate -> ArrayList 无法转换为 Set