Java: как создать массив кортежей

как я могу создать массив кортежей в jsp (java), например (a: 1, b: 2) (c: 3, d: 4) ... ...


person kkkkk    schedule 02.05.2010    source источник


Ответы (6)


Создайте класс кортежа, например:

class Tuple {
    private Object[] data;
    public Tuple (Object.. members) { this.data = members; }
    public void get(int index) { return data[index]; }
    public int getSize() { ... }
}

Затем просто создайте массив экземпляров Tuple.

person Amir Rachum    schedule 02.05.2010
comment
Это Ява? Почему за это так проголосовали? data.size() в массиве? Нет ошибок при проверке за пределами? Почему бы не использовать существующий класс, такой как ArrayList, который намного лучше реализует это поведение? - person Pindatjuh; 02.05.2010
comment
@Pindatjuh, почему бы тебе не дать свой ответ на этот вопрос? Кажется, вам есть чем поделиться. - person Anthony Forloney; 03.05.2010
comment
@Pindatjuh, я сказал что-то вроде этого. Это скелет класса, просто чтобы он понял, что он должен делать. Это не было протестировано или что-то в этом роде. - person Amir Rachum; 03.05.2010
comment
@Pindatjuh, кортежи обычно неизменяемы, так что это относительно хорошее представление ... хотя конструктор действительно должен быть public Tuple, а не public void Tuple - person Mark Elliot; 03.05.2010
comment
Прошло 50 лет с тех пор, как мы приземлились на Луне, и tuple до сих пор не является частью основной библиотеки Java. - person coda; 09.07.2019

если вам нужен кортеж произвольного размера, стиль хэша perl, используйте Map<K,V> (если у вас есть фиксированный тип значений ключей - ваш пример выглядит так, как будто Map<Character,Integer> будет работать - в противном случае используйте необработанный тип). Посмотрите коллекции java для получения более подробной информации о различных реализациях.

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

Таким образом, вы в конечном итоге с

List<Map<K,V>> listOfTuples

если вам нужно что-то более конкретное (например, вы всегда будете иметь x1, x2, x3 в своем кортеже), подумайте о том, чтобы сделать карты EnumMaps — вы можете ограничить, какие ключи у вас есть, и если вы укажете значение по умолчанию (или какое-либо другое ограничение во время создания), гарантировать, что что-то выйдет.

person Carl    schedule 02.05.2010

В Java нет класса пары/n-кортежей по умолчанию; вам придется свернуть свой собственный.

person tzaman    schedule 02.05.2010

вы можете использовать класс HashSet.

person Mark    schedule 02.05.2010

Если вы имеете дело с кортежами фиксированного размера, с фиксированными именами атрибутов, определите свой собственный простой класс данных, а затем определите массив этого класса.

С другой стороны, если вы хотите, чтобы имена атрибутов были гибкими и определялись во время выполнения, используйте структуру Map. В приведенном выше примере кажется, что HashMap‹String,Integer> может выполнить эту работу. Вы можете захотеть обернуть его, чтобы уменьшить его функциональность, и, возможно, также добавить более конкретную функциональность.

person Eyal Schneider    schedule 02.05.2010

Я знаю, что опаздываю на вечеринку, но набор очков должен сработать.

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

person Samu    schedule 29.10.2016