Какую коллекцию использовать вместо 2D множества на Яве?

Я хочу использовать коллекцию вместо 2D множества так, чтобы я не должен был давать его размер во время декларации, и я могу добавить столько элементов, сколько я хочу динамично.

13
задан Yatendra Goel 12 January 2010 в 16:31
поделиться

9 ответов

Проблема со списком> заключается в том, что вам нужно изменить размер каждой строки, если вы хотите изменить размер своей матрицы.

Если вы хотите использовать разреженную матрицу или, возможно, бесконечную матрицу, вы можете сделать что-то вроде:

class SparseMatrix<X> {
  private Map<Coord, X> values = new HashMap<Coord, X>();

  public SparseMatrix() {
  }

  public X get(int x, int y) {
     return values.put(new Coord(x,y)); // null if there's no value
  }

  public void set(int x, int y, X value) { // you can use null (like in a List)
     values.set(new Coord(x,y), value);
  }

  private static class Coord {
    int x; int y;
    public Coord(int x, int y) {
       this.x = x;
       this.y = y;
    }

    @Override
    public boolean equals(Object other) {
       if (other instance of Coord) {
          Coord o = (Coord) other;
          return o.x == x && o.y == y;
       }
       return false;
    }

    @Override
    public int hashCode() {
       return o.x + o.y; // or some more clever implementation :)
    }

  }
}

Изменить: Apache Commons HashCodeBuilder - отличный инструмент для генерации хэш-кодов.

7
ответ дан 2 December 2019 в 00:46
поделиться

Импорт java.util.arrayList;

ArrayList - это то, что вы хотите, вам не нужно настроить его размер создания, и вы можете добавлять элементы Динамически используя метод .

0
ответ дан 2 December 2019 в 00:46
поделиться

Самый простой способ - использовать вложенные коллекции ... Скажем (при условии, что ваши значения строки) Список <Список > , который затем можно использовать следующим образом:

List<List<String>> fakeArray = new ArrayList<List<String>>();

// Pretend you fill it with values between these calls
String retrieve = fakeArray.get(0).get(0);

Редактирование: это было изначально карта > , которая действительно не иметь смысл в этом контексте.

Тем не менее, вы можете узнать, если коллекции Google или коллекции Apache Commons имеют что-то более специализированное, что вы можете использовать.

4
ответ дан 2 December 2019 в 00:46
поделиться

Что вы хотите иметь с этим? Я, вероятно, просто будет просто использовать коллекцию > (где коллекция может быть заменена по списку).

Или вы можете создать свой собственный класс с Metods для переворачивания рядов или столбцов или всех элементов по мере необходимости.

2
ответ дан 2 December 2019 в 00:46
поделиться

Я лично использую вектор Класс для этой цели, хотя и различные требования могут в конечном итоге диктовать использование других, более специализированных классов.

0
ответ дан 2 December 2019 в 00:46
поделиться

Java.util.arrayList - мой предпочтительный выбор.

http://java.sun.com/j2se/1.5.0/docs/api/java/util/arraylist.html

0
ответ дан 2 December 2019 в 00:46
поделиться

Вот решение, которое можно найти при работе с OpenVMS:

   01 WS-STRING-LENGTH                 PIC S9(04) COMP.

   CALL "STR$TRIM" USING BY DESCRIPTOR user_output,
                                       user_input,
                                       BY REFERENCE WS-STRING-LENGTH.
-121--4294063-

Ведите отдельный репозиторий ваших крючков и symlink в этом.

Я согласен, было бы неплохо, если бы у Гита был встроенный механизм распространения сценариев крючков, но это не так.

-121--1499669-

Это зависит от того, что вы пытаетесь сделать, но я рекомендую ArrayList. Это быстрее, чем Вектор. Если только тебя не волнует синхронизация! Если требуется создать 2-мерный список, создается ArrayList, и каждый элемент этого списка будет другим ArrayList.

0
ответ дан 2 December 2019 в 00:46
поделиться

Ведите отдельный репозиторий ваших крючков и symlink в этом.

Я согласен, было бы неплохо, если бы у Гита был встроенный механизм распространения сценариев крючков, но это не так.

-121--1499669-

Это зависит от того, что вы пытаетесь сделать, но я рекомендую ArrayList. Это быстрее, чем Вектор. Если только тебя не волнует синхронизация! Если требуется создать 2-мерный список, создается ArrayList, и каждый элемент этого списка будет другим ArrayList.

-121--2717470-

Можно выполнить пробную версию с ArrayList , имеющим ArrayList s, как предметы. Если это не сделает то, что вы хотите, это даст понимание того, что вы должны построить сами.

0
ответ дан 2 December 2019 в 00:46
поделиться

Это зависит от того, как вы хотите использовать структуру данных. Ваши варианты:

  • два списка; Это ваша работа, чтобы синхронизировать между ними.
  • карта; Вместо отношения ключевых ценностей ваши записи карты будут просто кортежи объектов.
  • Список двухлетних объектов; Каждый элемент в списке будет настроек объекта размера 2.

Редактировать: Я полностью неправильно прочитал вопрос; Я думал, что это около 2D-массива ширины 2.

Правильно прочитав вопрос (я надеюсь :-)), я согласен с теми, кто сказал список списков.

0
ответ дан 2 December 2019 в 00:46
поделиться
Другие вопросы по тегам:

Похожие вопросы: