【发布时间】:2014-09-20 15:51:20
【问题描述】:
我为我的程序编写了以下类:
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 em> 也在 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 类中?
提前谢谢你。
【问题讨论】:
-
我认为你应该使用 HashSet 而不是 ArrayList。
-
我同意@Stefan Beike 的观点。我不知道您的
ArrayList的实际大小,但如果它足够大,那么检查它是否包含每个元素会产生很大的不同。
标签: java arrays arraylist contains