将我的sessionId附加到arrayList

时间:2014-03-12 07:24:10

标签: java arraylist

每次创建新会话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中的元素被替换而不是附加。

我错在哪里

4 个答案:

答案 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();
   }

        }