每次创建新会话ID时,我都需要将它们保存在数组或列表中,以将其作为参考。
纠正我错在哪里
public static void main(String args[]) {
//creating an arrayList
ArrayList<String> myList = new ArrayList<String>();
try {
// calculate the sessionId
String sessionId = "b03c0-000-5h6-" + uuid.substring(0,4) + "-000000000";
myList.add(sessionId);
} catch(Exception e){
e.printStackTrace();
}
}
我的arrayList中的元素被替换而不是附加。
我错在哪里
答案 0 :(得分:1)
你错了。
设计List接口会将值与重复值一起存储。所以你会追加。如果您只想获得唯一结果,请使用Set。
Collection<String> myList = new HashSet<String>();
请注意,List和Set是表示集合的数学概念。在Java Collection Framework中,这些概念可以作为类和接口进行再现。
Collection<T>
是Set和List的超级接口。这允许您根据实现更改程序的行为。
您还应该避免在变量中使用类名,以获得这种灵活性。
如果您想“告诉”其他开发人员会话ID存储只存储唯一值
Set<String> sessionsIDs = new HashSet<String>();
如果你想“告诉”,那个存储是以列表的形式(允许重复)使用
List<String> sessionsIDs = new ArrayList<String>();
如果您想隐藏实施细节,请使用集合
Collection<String> sessionsID = crateSessionStorage();
private Collection<String> crateSessionStorage() {
boolean useUniqueStorage = isUniqueStorage();
if(UseUniqueStorage) {
return new HashSet<String>();
}
return new ArrayList<String>();
}
答案 1 :(得分:0)
在代码中创建/初始化myList会导致意外行为。
您的ArrayList可以是类的静态实例属性,而不是每次调用方法时都创建。
答案 2 :(得分:0)
String sessionId = "b03c0-000-5h6-" + uuid.substring(0,4) + "-000000000"; myList.add(sessionId); this put in loop other when you call main() it replace full arraylis
答案 3 :(得分:-1)
这种情况正在发生,因为您每次都在创建新对象
ArrayList<String> myList = new ArrayList<String>(); // creates an object evrytime whem main will be called.
try {
String sessionId = "b03c0-000-5h6-" + uuid.substring(0,4)
/* from where uuid is comming?? */
+ "-000000000";
myList.add(sessionId);
// thiss will add inside new arraylist not in previous,
// because everytime it is getting new object reference
} catch(Exception e){
e.printStackTrace();
}
}