Мне нужен способ хранения множества различных элементов в списке - PullRequest
1 голос
/ 24 июля 2011

У меня есть программа, написанная на Java, которая отчаянно нуждается в оптимизации.Прямо сейчас у меня есть 3 ArrayLists, которые я хотел бы упростить до 1 типа списка.У меня есть один ArrayList для прямоугольников, один для логических и один для объекта, который я создал с одним из моих классов.Мы можем назвать это «Предмет» на данный момент.Я держу три ArrayLists в одном порядке, делая одно и то же для всех них.Например, каждый раз, когда я создаю новый элемент, я добавляю его в элемент ArrayList, добавляю логическое значение к этому ArrayList и добавляю прямоугольник к третьему ArrayList.Я ищу решение.Я пробовал HashMaps, но они берут только 2 части информации на элемент списка.В какой-то момент я попробовал ArrayList, но с этим было очень трудно справиться.Если бы кто-нибудь мог помочь мне найти решение, я был бы очень благодарен.Большое спасибо.

РЕДАКТИРОВАТЬ: Спасибо за все быстрые ответы

Ответы [ 5 ]

10 голосов
/ 24 июля 2011

Напишите новый класс, который будет иметь ваши «прямоугольник», логическое значение и «элемент» в качестве полей, и сохраните экземпляры этого класса в одном списке.

Например:

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
5 голосов
/ 24 июля 2011

Почему бы вам не сохранить три связанных элемента в классе, а затем составить их список?

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

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

Адаптируйте public / private и получайте / устанавливайте по мере необходимости.

2 голосов
/ 24 июля 2011

Единственное, что сразу приходит мне в голову, - это создать объект, имеющий ссылку на логическое значение, прямоугольник и другой ваш объект.

1 голос
/ 24 июля 2011

Вам нужен класс данных, который имеет три объекта в качестве полей и составляет список объектов данных.
Как то так:

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

О ... может быть, они дают призы за то, что они придут 2, 3 и т. Д. :)

0 голосов
/ 24 июля 2011

Трудно сказать без какой-либо дополнительной справочной информации, например, какова связь между элементами в вашем списке, но я предполагаю, что вы могли бы сделать это простым способом, если это кажется уместным:

Создание объекта с прямоугольником и логическим значением в качестве переменных экземпляра.

Если вы считаете, что это неуместно, вы можете вложить Hashtable в другую, но я не обязательно рекомендую это, поскольку это добавляет ненужную сложность вашей программе.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...