Почему не делает java.util. Набор имеет, добираются (международный индекс)?

Да, можно ограничить доступ диапазоном IP-адресов или списком IP-адресов. По-видимому, эта функция находится в стадии бета-тестирования, и вам придется написать оператору Heroku по электронной почте.

https://devcenter.heroku.com/articles/private-spaces#trusted-ip-ranges-for-data-services

233
задан DontDivideByZero 13 March 2015 в 03:40
поделиться

11 ответов

Потому что у наборов нет порядка. Некоторые реализации делают это (особенно те, которые реализуют интерфейс java.util.SortedSet ), но это не является общим свойством наборов.

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

174
ответ дан 23 November 2019 в 03:33
поделиться

Единственная причина, по которой я могу использовать числовой индекс в наборе, - для итерации. Для этого используйте

for(A a : set) { 
   visit(a); 
}
5
ответ дан 23 November 2019 в 03:33
поделиться

Я не уверен, что кто-то излагал это именно так, но вам нужно понять следующее:

В наборе нет «первого» элемента.

Поскольку, как уже говорили другие, множества не имеют порядка. Набор - это математическая концепция, которая не включает в себя упорядочивание.

Конечно, ваш компьютер не может хранить список вещей, которые не упорядочены в памяти. Это должно иметь некоторый порядок. Внутренне это массив или связанный список или что-то. Но вы на самом деле не знаете, что это такое, и у него нет первого элемента; элемент, который выходит «первым», появляется таким образом случайно и может быть не первым в следующий раз. Даже если вы предприняли шаги, чтобы «гарантировать» конкретный первый элемент, он все равно выходит случайно, потому что вам просто удалось сделать это правильно для одной конкретной реализации набора; другая реализация может не работать таким образом с тем, что вы сделали. И, на самом деле, вы можете не знать, какую реализацию вы используете, так, как вы думаете.

Люди сталкиваются с этим ВСЕМ. . ВРЕМЯ. с системами RDBMS и не понимаю. Запрос RDBMS возвращает набор записей. Это тот же тип набора из математики: неупорядоченный набор элементов, только в этом случае элементы являются записями. Результат запроса СУБД вообще не имеет гарантированного порядка, если только вы не используете предложение ORDER BY, но все время люди предполагают, что он это делает, а затем когда-нибудь теряют самообладание, когда форма их данных или кода изменяется незначительно и запускает работу оптимизатора запросов другой путь, и внезапно результаты оказываются не в том порядке, в котором они ожидают.

17
ответ дан 23 November 2019 в 03:33
поделиться

Этот тип приводит к вопросу, когда вы должны использовать набор, а когда вы должны использовать список. Обычно совет гласит:

  1. Если вам нужны упорядоченные данные, используйте список
  2. . Если вам нужны уникальные данные, используйте набор
  3. . Если вам нужны оба, используйте либо: SortedSet (для данных, упорядоченных компаратором) или OrderedSet / UniqueList (для данных, упорядоченных путем вставки). К сожалению, Java API еще не имеет OrderedSet / UniqueList.

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

25
ответ дан 23 November 2019 в 03:33
поделиться

some data structures are missing from the standard java collections.

Bag (like set but can contain elements multiple times)

UniqueList (ordered list, can contain each element only once)

seems you would need a uniquelist in this case

if you need flexible data structures, you might be interested in Google Collections

10
ответ дан 23 November 2019 в 03:33
поделиться

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

Если я знаю, что хочу первый элемент, я могу используйте set.iterator (). next (), но в противном случае кажется, что я должен бросить массив для извлечения элемента в специфический индекс?

Каковы соответствующие способы извлекать данные из набора? (Другой чем использование итератора)

Вы также должны ознакомиться с интерфейсом SortedSet (наиболее распространенной реализацией которого является TreeSet ).

SortedSet - это Набор (то есть элементы уникальны), который упорядочен посредством естественного упорядочения элементов или с использованием некоторого Компаратора . Вы можете легко получить доступ к первому и последнему элементам, используя методы first () и last () . SortedSet пригодится время от времени, когда вам нужно сохранить свою коллекцию как без дубликатов, так и упорядоченным определенным образом.

Редактировать : Если вам нужен Набор, элементы которого хранятся в порядке вставки (очень похоже на List), взгляните на LinkedHashSet .

29
ответ дан 23 November 2019 в 03:33
поделиться

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

5
ответ дан 23 November 2019 в 03:33
поделиться

Использование программных интерфейсов рамки невозможно. Решение о том, когда процесс должен быть удален или оставаться в памяти, принимается по усмотрению операционной системы (Android). Это из соображений эффективности: если пользователь решает перезапустить приложение, то оно уже есть без необходимости его загрузки в память.

Так что нет, это не только обескуражено , это невозможно сделать.

-121--665843-

Можно преобразовать его в CString, а затем добавить к нему расширение.

Существует встроенный конструктор CString, который позволит выполнить это преобразование

Пример:

CString(Textbox->Text)

В вашем конкретном случае:

private: System::Void Button_Click(System::Object^ sender, System::EventArgs^ e) 
{
    ofstream myfile (CString(Textbox->Text) + ".txt"); 
    myfile.close(); 
}
-121--4594680-

Это правда, элементы в Set не упорядочены по определению Set Collection. Так что они не могут получить доступ по индексу.

Но почему бы нам не использовать метод get (object), не предоставив индекс в качестве параметра, а объект, равный искомому? Таким образом, мы можем получить доступ к данным элемента внутри набора, просто зная его атрибуты, используемые равным методом.

7
ответ дан 23 November 2019 в 03:33
поделиться

На самом деле это повторяющийся вопрос при написании приложений JavaEE, которые используют объектно-реляционное сопоставление (например, с Hibernate); и из всех людей, которые здесь ответили, Андреас Петерссон - единственный, кто понял реальную проблему и предложил правильный ответ: в Java отсутствует UniqueList! (или вы также можете назвать его OrderedSet или IndexedSet).

Максвинг упомянул этот вариант использования (в котором вам нужны упорядоченные И уникальные данные) и предложил SortedSet, но это не то, что действительно нужно Марти Питту.

Этот «IndexedSet» НЕ то же самое, что и SortedSet - в SortedSet элементы сортируются с использованием компаратора (или с использованием их «естественного» порядка).

Но вместо этого он ближе к LinkedHashSet (который также предлагали другие) или даже в большей степени к (также несуществующему) «ArrayListSet», потому что он гарантирует, что элементы возвращаются в том же порядке, в котором они были вставлены.

Но LinkedHashSet - это реализация, а не интерфейс! Что необходимо, так это интерфейс IndexedSet (или ListSet, или OrderedSet, или UniqueList)! Это позволит программисту указать, что ему нужна коллекция элементов в определенном порядке и без дубликатов, а затем создать ее экземпляр с любой реализацией (например, реализацией, предоставленной Hibernate).

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

73
ответ дан 23 November 2019 в 03:33
поделиться

Чтобы получить элемент в Set, я использую следующий:

public T getElement(Set<T> set, T element) {
T result = null;
if (set instanceof TreeSet<?>) {
    T floor = ((TreeSet<T>) set).floor(element);
    if (floor != null && floor.equals(element))
    result = floor;
} else {
    boolean found = false;
    for (Iterator<T> it = set.iterator(); !found && it.hasNext();) {
    if (true) {
        T current = it.next();
        if (current.equals(element)) {
        result = current;
        found = true;
        }
    }
    }
}
return result;
}
-3
ответ дан 23 November 2019 в 03:33
поделиться

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

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

Не найдя подходящей коллекции в коллекциях java.util или google, я счел несложным реализовать ее самостоятельно. Основная идея состоит в том, чтобы обернуть SortedSet и создать список, когда требуется доступ через индекс (и забыть список при изменении SortedSet). Это, конечно, работает эффективно только при изменении обернутого SortedSet и доступ к списку разделен на время существования Collection. В противном случае он ведет себя как список, который часто сортируется, т.е. слишком медленно.

При большом количестве дочерних элементов это значительно улучшило производительность по сравнению со списком, который я отсортировал через Collections.sort.

3
ответ дан 23 November 2019 в 03:33
поделиться
Другие вопросы по тегам:

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