我需要一种在列表中存储许多不同项目的方法

时间:2011-07-24 01:11:30

标签: java arrays list object hash

我有一个用java编写的程序,迫切需要优化。现在我有3个ArrayLists,我想简化为1列表类型的东西。我有一个用于矩形的ArrayList,一个用于布尔值,一个用于我用我的一个类创建的对象。我们现在可以称之为“项目”。我保持三个ArrayLists的顺序相同,对所有这些都做同样的事情。例如,每次我创建一个新项目时,我将它添加到项目ArrayList,我向该ArrayList添加一个布尔值,我向第三个ArrayList添加一个矩形。    我正在寻找解决方案。我尝试过HashMaps,但每个列表项只需要2条信息。有一次,我尝试了一个ArrayList,但这是一个巨大的痛苦处理。如果有人能帮我找到解决方案,我会非常感激。非常感谢。

编辑:感谢所有快速回答

5 个答案:

答案 0 :(得分:10)

编写一个新的类,其中包含“rectangle”,boolean和“item”作为字段,并将该类的实例存储在一个List中。

例如:

public class MyRecord {
    private Rectange rectangle;
    private boolean flag;
    private Item item;

    // getters / setters
}

然后在你的其他课程中(无论你的名单在哪里):

...
List<MyRecord> list = ...; // initialize or obtain from somewhere
list.get(0).setFlag(false); // modify field within your container object

答案 1 :(得分:5)

为什么不将三个相关项目存储在一个类中,然后列出它们?

class MyThingy {
    public MyItem item;
    public boolean flag;
    public Rectangle rect;
}

List<MyThingy> myList = new ArrayList<MyThingy>();

根据需要调整public / private和getters / setter。

答案 2 :(得分:2)

我脑子里唯一想到的就是做一个引用布尔,矩形和其他对象的对象。

答案 3 :(得分:1)

您需要一个数据类,它将三个对象作为字段,并创建数据对象列表 像这样:

public class ItemData {
    private final Item item;
    private final boolean flag;
    private final Rectangle rectangle;
    private ItemData(Item item, boolean flag, Rectangle rectangle) {
        this.item = item;
        this.flag = flag;
        this.rectangle = rectangle;
    }
    public Item getItem() {
        return item;
    }
    public boolean isFlag() {
        return flag;
    }
    public Rectangle getRectangle() {
        return rectangle;
    }
}
public static void main(String[] args) {
    List<ItemData> list = new ArrayList<ItemData>();
}

哦......也许他们会给第二,第三等奖品。)

答案 4 :(得分:0)

很难说没有更多的背景信息,例如列表中的项目之间的关系是什么,但我猜你可以通过简单的方式做到这一点:

创建一个具有矩形和布尔值作为实例变量的对象。

如果您认为这不合适,可以将Hashtable嵌套在另一个哈希表中,但我不一定会建议,因为它会给您的程序增加不必要的复杂性。