Какие структуры данных используются в Java?

В Python вы можете продвинуться довольно далеко, если знаете о стандартных «списках», «кортежах», «наборах» и «словарях». Это базовые структуры данных, о которых должен знать любой порядочный программист на Python.

Каковы эквиваленты этих структур данных в Java и есть ли другие структуры данных, на которые стоит обратить внимание?


person phaz    schedule 28.02.2013    source источник
comment
В Java есть интерфейсы Set, List и Map (вы должны выбрать, какую реализацию вы хотите использовать). К сожалению, нет эквивалента tuple.   -  person nhahtdh    schedule 28.02.2013
comment
проверьте структуру коллекций java docs.oracle.com/javase / 6 / docs / technotes / guides / collections /   -  person A4L    schedule 28.02.2013
comment
@nhahtdh Как вы ожидаете, что будет работать эквивалент tuple, кроме неизменяемого List<Object>?   -  person arne.b    schedule 28.02.2013
comment
Это не серьезный вопрос. Не поленитесь, это можно погуглить за 5 секунд.   -  person Andrey    schedule 28.02.2013
comment
@ arne.b: вы можете смоделировать кортеж, написав общий Pair и повторно использовать его для кортежа более высокого измерения. Хотя это очень некрасиво. Я бы пошел с классом, если кортеж будет появляться много раз.   -  person nhahtdh    schedule 28.02.2013


Ответы (4)


К сожалению, в Java нет собственного Tuple, большую часть времени вы используете:

  • Список: ArrayList (это список, а список - это коллекция)
  • Набор: HashSet (это набор, а набор - это коллекция)
  • Словарь: HashMap (это карта, но карта не является коллекцией)

Взгляните на коллекции Java в целом: http://docs.oracle.com/javase/tutorial/collections/index.html Для параллелизма: http://docs.oracle.com/javase/tutorial/essential/concurrency/collections.html

Есть много внешних библиотек (Guava, Apache, ...)

person Christophe Roussy    schedule 28.02.2013

Вы можете многое сделать с LinkedList, HashMap, HashSet, и у нас есть словарь http://docs.oracle.com/javase/1.4.2/docs/api/java/util/Dictionary.html тоже.

Лучший способ выучить любой новый язык - читать код. GitHub содержит множество приложений Java с открытым исходным кодом. Вы можете проверить последние здесь: https://github.com/languages/Java

person Gardner Bickford    schedule 28.02.2013
comment
Этот класс словаря устарел - person Christophe Roussy; 28.02.2013
comment
Спасибо, Кристоф. Похоже, что он был сброшен с 1.6. Последние результаты поиска указывают на Hashtable в свое место. Как уже упоминалось другими, изучение дженериков - отличная идея. - person Gardner Bickford; 28.02.2013

Помогает ли это?

В Java есть все структуры данных, включая набор, список, HashMap, определенный в Java Рамки коллекций. HashMap по сути эквивалентен словарю.

Что касается эквивалента кортежа, посмотрите unmodifiableList.

person Barney    schedule 28.02.2013

В Java у него есть универсальный инструмент: класс. Для большинства проблем, которые вы решаете в Python с помощью кортежа или словаря, в Java вы пишете собственный класс с переменными экземпляра, конструкторами, геттерами и сеттерами. Поэтому, когда вы работаете на Java, будьте готовы написать какой-нибудь шаблон.

Что касается структур данных, по умолчанию используются ArrayList, HashSet и HashMap. Есть отсортированные версии: TreeSet и TreeMap, когда они вам нужны, они очень полезны.

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

В Java вам также нравится встроенный параллелизм, но тут все усложняется: есть эффективные параметры, такие как ConcurrentHashSet/Map, а также синхронизированные оболочки для простых коллекций: Collections/synchronizedSet/Map/List (это методы, возвращающие объект-оболочку).

person Marko Topolnik    schedule 28.02.2013