Java 重复向集合添加对象的单个实例,但集合存储多个实例
我试图将类的对象添加到向量中。但是在添加第二个对象时,第一个对象将被第二个对象替换 这是我的密码:Java 重复向集合添加对象的单个实例,但集合存储多个实例,java,class,collections,vector,reference,Java,Class,Collections,Vector,Reference,我试图将类的对象添加到向量中。但是在添加第二个对象时,第一个对象将被第二个对象替换 这是我的密码: Vector res = new Vector(); Item item = new Item(); item.Name = "maclean"; item.Des = "abcd"; item.Price = "RS 350"; item.image = "c.gif"; res.add(item); item.Name = "pi
Vector res = new Vector();
Item item = new Item();
item.Name = "maclean";
item.Des = "abcd";
item.Price = "RS 350";
item.image = "c.gif";
res.add(item);
item.Name = "pinto";
item.Des = "gief";
item.Price = "RS 450";
item.image = "d.gif";
res.add(item);
for (int i = 0; i < res.size(); i++) {
item = (Item) res.get(i);
System.out.println(item.Name);
}
我得到的输出:
pinto
pinto
期望输出:
maclean
pinto
以上是我试图做的一个简单版本
他刚才忘记提了。我不能每次都创建一个新实例。任何人都可以提出建议,这样我就不必每次都创建一个新实例。我想知道除了向量之外,是否有其他结构可以存储整个对象,而不是指向对象的指针。
是否有现成的结构,我可以使用我的要求。或者应该创建一个新的类对象数组。对于每个新项,您需要有新项;。在您的代码中,您只是用新值替换了先前的值,并在向量中放置了对同一项的两个引用
也考虑使用ARARYLIST而不是向量。Vector是一个有点过时的类。
您没有创建Item的新实例。您只是在更改项的原始实例的值 因此,在向量实例中,最终得到的是对同一个Item对象的两个引用 尝试将您的代码修改为:Vector res = new Vector();
Item item = new Item();
item.Name = "maclean";
item.Des = "abcd";
item.Price = "RS 350";
item.image = "c.gif";
res.add(item);
Item item2 = new Item();
item2.Name = "pinto";
item2.Des = "gief";
item2.Price = "RS 450";
item2.image = "d.gif";
res.add(item2);
for (int i = 0; i < res.size(); i++) {
item = (Item) res.get(i);
System.out.println(item.Name);
}
你可以这样使用它:
public static void main(String[] args) {
CopyCollection res = new CopyCollection();
Item item = new Item();
item.Name = "maclean";
item.Des = "abcd";
item.Price = "RS 350";
item.image = "c.gif";
res.add(item);
item.Name = "pinto";
item.Des = "gief";
item.Price = "RS 450";
item.image = "d.gif";
res.add(item);
for (int i = 0; i < res.size(); i++) {
item = res.get(i);
System.out.println(item.Name);
}
}
因此,在后台,CopyCollection使用包含Item类型的对象的ArrayList,这也消除了以后强制转换的需要。每当您将单个项对象的另一个配置添加到此集合时,此集合的add方法将使用传递给它的项对象的当前配置创建项的新实例。每次创建项的新实例
Vector res = new Vector();
Item item = new Item();
item.Name = "maclean";
item.Des = "abcd";
item.Price = "RS 350";
item.image = "c.gif";
res.add(item);
Item item2 = new Item(); <---
item2.Name = "pinto";
item2.Des = "gief";
item2.Price = "RS 450";
item2.image = "d.gif";
res.add(item2);
这就解决了你的问题
严重的向量被收集框架所取代
我建议你用矢量代替
有用链接:
编辑:
我不能每次都创建一个新实例
不可能使用单个对象拥有多个数据副本。您必须创建一个新实例您必须创建单独的实例以放置到向量中 您还可以向Vector实例添加类型,以避免在循环中执行强制转换:
Vector<Item> res = new Vector<>();
如果您希望每个条目都有一个条目,则每个条目都需要一个条目。这没有什么神奇的办法。您可以在添加项目时创建一个副本
// code which reuses the same object each time
list.add(item.clone()); // make the item Cloneable
list.add(new Item(item)); // use a copy constructor
Item item2 = new Item();
// copy fields from item to item2
list.add(item2); // add a copy.
顺便说一句,除非你不得不使用Vector,它在1998年被ArrayList取代
您的代码中似乎有一个bug,无法轻松解决这个问题。从某种意义上说,修复bug是正确的答案
是否有现成的结构,我可以使用我的要求
Java集合不是这样工作的
或者应该创建一个新的类对象数组
我不知道这会有什么帮助。我失散已久的双胞胎兄弟,我们为第二项选择了相同的实例名称:You's edit几乎使前四个答案无效。这是一个非常关键的细节。我更新了我的答案,我相信这就是你所寻找的。嗨,我正在寻找新的存储类。此API的全部目的不是创建新的instance@MacleanPinto您的意思是将当前对象克隆到另一个对象并进行修改?你想要吗?每次我都会将数据添加到同一个对象。然后将其添加到存储向量中。现在,我要存储对象的克隆,而不是指向向量的指针。因此,当我更改或修改现有对象时,克隆应保持原样。然后在添加之前,克隆对象并将克隆对象添加到向量。就这样。不是原始对象。我已更新了答案,以提供实现此必需行为的集合。
Item item = new Item();
item.Name = "maclean";
item.Des = "abcd";
item.Price = "RS 350";
item.image = "c.gif";
res.add(item);
Item item2 = new Item();
item2.Name = "pinto";
item2.Des = "gief";
item2.Price = "RS 450";
item2.image = "d.gif";
res.add(item2);
Vector<Item> res = new Vector<>();
// code which reuses the same object each time
list.add(item.clone()); // make the item Cloneable
list.add(new Item(item)); // use a copy constructor
Item item2 = new Item();
// copy fields from item to item2
list.add(item2); // add a copy.