![]() |
|
Модераторы: LSD, AntonSaburov |
![]()
|
|
| Grig |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 809 Регистрация: 29.4.2005 Где: Иркутск Репутация: нет Всего: 16 |
Здравствуйте!
Существует ли функция поиска в массиве значения типа php-шной inArray: функция("массив","значение") возвращает true или false в зависимости от того, содержит ли массив это значение -------------------- |
|||
|
||||
| Kangaroo |
|
|||
|
AA - Aussie Animal ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2042 Регистрация: 7.10.2006 Где: US Репутация: 21 Всего: 104 |
Для простыхо массивов - нету.
В коллекциях - contains(Object o); -------------------- Lost.... |
|||
|
||||
| math64 |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2505 Регистрация: 12.4.2007 Репутация: 8 Всего: 72 |
1. Есть класс java.util.Arrays. Можешь отсортировать массив Arrays.sort() и потом искать Array.binarySearch();
2. Можешь поместить все элементы массива в Collection и искать в ней. |
|||
|
||||
| Grig |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 809 Регистрация: 29.4.2005 Где: Иркутск Репутация: нет Всего: 16 |
Товарищи, спасибо!
Всё решилось вот так:
-------------------- |
|||
|
||||
| BegemotX2 |
|
||||||
|
Новичок Профиль Группа: Участник Сообщений: 21 Регистрация: 13.11.2005 Репутация: 1 Всего: 1 |
товарищи, вы че??? сортировки предлагают в порядка n*log(n) операций. причем часть из них - перестановки. при том, что простой поиск
займет максимум n операций, а в среднем n/2 Одумайтесь.. сортировать массив, чтобы один раз в нем что-то искать - это даже хуже, чем по-индийски. -----
Это сообщение отредактировал(а) powerOn - 6.5.2008, 00:18 |
||||||
|
|||||||
| v2v |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1620 Регистрация: 20.9.2006 Где: Киев Репутация: 8 Всего: 56 |
во первых , товарищ BegemotX2, давайте поспокойней, нечего грубить.
во вторых кто говорил что поиск будет проводится только один раз ? |
|||
|
||||
| Platon |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1801 Регистрация: 25.4.2006 Репутация: 16 Всего: 40 |
В любом случае, лучше бы прогонять через весь массив. Удивило, что в шестерке есть Arrays.copyOf, но нет Arrays.contains...
Добавлено через 6 минут и 41 секунду Grig, мыслится мне угроза в вашем коде. На входе значит массив в одном порядке, а после поиска в другом. представьте себе удивление человека, который уверен, что в массиве n-й элемент это тот, что нужно, но после проверки isInArray() его код рушится. Не хорошо для столь простой функции. |
|||
|
||||
| niasilil |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 325 Регистрация: 4.6.2007 Где: USA Репутация: 8 Всего: 9 |
хоть и грубо, но точно. -------------------- SCJP 5.0, SCJD |
|||
|
||||
| Grig |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 809 Регистрация: 29.4.2005 Где: Иркутск Репутация: нет Всего: 16 |
Platon, согласен конечно, просто удивило, что в Яве не предусмотрены такие очевидные функции, это кстати касается не только инАррэя.
Уверен, программисты php меня поймут =) -------------------- |
|||
|
||||
| Platon |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1801 Регистрация: 25.4.2006 Репутация: 16 Всего: 40 |
||||
|
||||
| BegemotX2 |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 21 Регистрация: 13.11.2005 Репутация: 1 Всего: 1 |
Как java программист могу предположить, что методов типа Arrays.contains(...) нет потому, что они "идеологически неправильны".
А разработчики java стараются не делать таких вещей, даже если бы они сэкономили несколько строчек программистам-пользователям. Массив - хранилище объектов доступом по индексу, и не более. Операции поиска элемента в обычном массиве неэффективны сами по себе. Если необходимо эффетивно проверять, есть ли элемент в хранилище - нужно использовать множества (Set), либо с самого начала работы с массивом как-то упорядочивать массив (пример - как раз сортировка и binarySearch) А метод java.util.List.contains(...) - всего лишь "наследие" java.util.Collection, являющегося предком не только списков, но и множеств и словарей (Map) |
|||
|
||||
| Platon |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1801 Регистрация: 25.4.2006 Репутация: 16 Всего: 40 |
Тем не менее Arrays.copyOf введен как раз для того чтобы
Добавлено через 3 минуты и 2 секунды Да тут назревает спор, Модераторам предлагаю отделить тему начиная с этого поста: http://forum.vingrad.ru/index.php?showtopi...t&p=1502497 |
|||
|
||||
| BegemotX2 |
|
||||
|
Новичок Профиль Группа: Участник Сообщений: 21 Регистрация: 13.11.2005 Репутация: 1 Всего: 1 |
Arrays.copyOf - по моему мнению, не содержит идеологических противоречий. Уточню. Если в том, что такая функция
есть "индийский в квадрате" метод - я уверен, то по поводу Причин (не-)существования методов Arrays.contains и Arrays.copyOf я высказал всего-лишь свое мнение и понимание java. Так что спор врядли получится. Хотя, если есть что по делу сказать, обменяться взглядами было бы полезно Это сообщение отредактировал(а) BegemotX2 - 6.5.2008, 11:44 |
||||
|
|||||
| Platon |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1801 Регистрация: 25.4.2006 Репутация: 16 Всего: 40 |
Что-то разницы не улавливаю... вместо Arrays.contains() мне придется в своем проекте писать это, а представьте несколько проектов, и все поиск делают идентинчно, получается несколько копий одного и того же. Или хуже того. Человеку кажется быстрей накатать, не оформляя в отдельную процедуру, цикл прямо на месте, к примеру чтоб написать этот блок в IDE мне составит 2 секунды (утрирую). Представьте, что на каждом шагу будет такой разброс. Обертка бы не помешала. Нам не нужно эффективно проверять, нам нужно просто проверить есть ли данные в массиве или нет, при чем в документе на функцию будет так и описано linear search, или лучше того, сделать пару методов indexOf и lastIndexOf Еще, у меня назрел вопрос, может можно как-то обернуть массив в Vector или ArrayList, тогда уж вопрос сам собой отпадет. но подозреваю, что с примитивными типами такой номер не пройдет. |
|||
|
||||
| LSD |
|
|||
![]() Leprechaun Software Developer ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 15719 Регистрация: 24.3.2004 Где: Dublin Репутация: 210 Всего: 538 |
О сколько нам открытий чудных... Я вообще не понимаю о чем спор. Понятно, что сортировка при каждом обращении, это мягко говоря не хорошо с точки зрения производительности (не говоря у о замечании Platon). С другой стороны такая функция реализуется за 5 минут, если так влом самому ее реализовывать, скачайте Commons-Lang там есть класс ArrayUtils в котором есть все что нужно. А если охота просто постонать, на тему как все в Java плохо и нет самых необходимых функций - идите во флейм. -------------------- Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it. |
|||
|
||||
![]()
|
| Правила форума "Java" | |
|
|
Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux, javastic. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Java: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |