Java 将sessionId追加到arrayList

Java 将sessionId追加到arrayList,java,arraylist,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-"

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


我错在哪里呢?

这是因为每次创建新对象时都要创建新对象

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

        }
你错了

接口设计用于存储具有副本的值。因此,您将附加。如果您只想要唯一的结果,请使用

Collection myList=新哈希集

请注意,列表和集合都是表示集合的数学概念。在框架中,这些概念以类和接口的形式重现

集合是集合和列表的超级接口。这允许您根据实现更改程序的行为

您还应该避免在变量中使用类名,以获得这种灵活性

如果要告诉其他开发人员会话ID存储仅存储唯一值,请使用

Set sessionsIDs=newhashset

如果你想说,存储是以列表的形式,允许重复使用

List sessionsIDs=newarraylist

如果要隐藏实现的细节,请使用集合

Collection<String> sessionsID = crateSessionStorage();

private Collection<String> crateSessionStorage() {

    boolean useUniqueStorage = isUniqueStorage(); 

    if(UseUniqueStorage) {
       return new HashSet<String>();
    }

    return new ArrayList<String>();
}

在代码中创建/初始化myList会导致意外行为


您的ArrayList可以是类的静态实例属性,而不是每次调用该方法时都会被创建。

您是如何断言元素被替换的?ArrayList中的元素不会被替换,而完整的ArrayList会在每次调用main方法时被替换!然后看起来元素被替换了。String sessionId=b03c0-000-5h6-+uuid。substring 0,4+-000000000;myList.addsessionId;当您调用main时,它将另一个放入循环。它将替换一次完整的arraylistmain。^是的,但对new的调用可能在for循环中。@Maroun-您不会在main中声明类成员method@user1333420请告诉我们,如果不是在一个循环中,你如何添加一个新的id?那么我该怎么说呢。他是编写此程序的人D@MarounMaroun这是什么变化?您的代码很好,但不鼓励这么极端,如果您喜欢这种风格,Set就足以作为一个接口,您可以回滚-很抱歉给您带来不便。我正在编辑中。但奇怪的是为什么。在那种状态下,你有权进行编辑。所以不需要道歉。祝你今天愉快。公共静态ArrayList myList=新ArrayList;//我认为这应该行得通。。但出现错误,public static的标识符无效..因为在static main内声明数组,所以应该在main外或main之前声明arraylist
 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