Java 将sessionId追加到arrayList
每次创建新会话id时,我都需要将它们保存在数组或列表中,以将其作为引用 纠正我哪里错了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-"
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