import java.util.Arrays;
import java.util.Set;
import java.util.SortedSet;
import java.util.TreeSet;
public class Main {
public static void main(String[] args) {
TreeSet<String> states = new TreeSet<>();
states.add("Germany");
states.add("France");
states.add("Italy");
states.add("Spain");
states.add("Great Britain");
System.out.println(states);
// возвращаем набор в котором все элементы меньше текущего
SortedSet<String> setLower=states.headSet("Germany");
System.out.println("Это headSet " + setLower);
// возвращаем набор в котором все элементы больше текущего
SortedSet<String> setGreater=states.tailSet("Germany");
System.out.println("Это tailSet " + setGreater);
// получим поднабор от одного элемента до другого
SortedSet<String> set = states.subSet("Germany", "Italy");
System.out.println("Это subSet " + set);
}
}
Начну с headSet
:
Вот так мне отсортировало после добавления.
[France, Germany, Great Britain, Italy, Spain]
headSet
отработал правильно, вот что я прочитал про этот метод:
Возвращает набор в котором все элементы меньше текущего
Вывело в консоль:
Это headSet [France]
Получается если у нас Germany
на 2 месте, значит меньше него (текущего) только France
потому что она на 1 месте? Поэтому и вывело France?
tailSet
:
Возвращает набор в котором все элементы больше текущего
Вывело в консоль:
Это tailSet [Germany, Great Britain, Italy, Spain]
Получается метод tailSet выводит текущий элемент и те которые больше него? То есть у нас Germany
на 2 месте, а Great Britain
на 3, Italy
на 4 и Spain
на 5. Почему мы получили: [Germany, Great Britain, Italy, Spain], а не [Great Britain, Italy, Spain]?
subSet
:
Получим поднабор от одного элемента до другого
Вывело в консоль:
Это subSet [Germany, Great Britain]
Но я не понял почему? Мы же написали якобы от Germany
до Italy
, почему в консоли вышло Germany
и Great Britain
? Почему не только Great Britain
?
Видел вот такую конструкцию:
SortedSet<String> setLower=states.headSet("Germany");
и вот такую:
`setLower.headSet("Germany");` ?
Почему сразу записывают в конструктор?
Ещё видел вот такие вещи:
Set setLower = states.headSet("Germany");<br>
В чем отличие такой конструкции от SortedSet?
Описание работы этих методов в Вашем источнике не самое удачное.
В документации написано яснее:
SortedSet<E> headSet(E toElement)
:
Returns a view of the portion of this set whose elements are strictly less than toElement. ...
Возвращает отображение части текущего множества, элементы которого строго меньше toElement
SortedSet<E> tailSet(E fromElement)
:
Returns a view of the portion of this set whose elements are greater than or equal to fromElement. ...
Возвращает отображение части текущего множества, элементы которого больше либо равны toElement
...
SortedSet<E> subSet(E fromElement, E toElement)
:
Returns a view of the portion of this set whose elements range from fromElement, inclusive, to toElement, exclusive. (If fromElement and toElement are equal, the returned set is empty.) ...
Возвращает отображение части текущего множества, элементы которого входят в диапазон от fromElement
включительно до toElement
исключительно ...
В общем случае если указываются границы A и B (одна из которых может быть началом или концом коллекции), то имеется ввиду диапазон [A; B) (левая граница включается, правая исключается). С одной стороны это сделано просто потому что так принято, с другой — такое разбиение позволит «склеить» множество из частей не думая о границах отрезков.
Set setLower = states.headSet("Germany");
В чем отличие такой
конструкции от SortedSet?
Set
- это интерфейс, от которого произошли SortedSet, HashSet, и т.п. Вроде как такая конструкция - это полиморфизм. Одно из главных преимуществ такой конструкции - вы можете налету изменить тип вашей коллекции на другой:
sortSet = hashSet;
.
Более подробно помогут разобраться эти вопросы:
Чем отличается ArrayList ArList = new ArrayList();
Приведение типов
Как на практике применяется полиморфизм?
Видел вот такую конструкцию:
SortedSet<String> setLower=states.headSet("Germany");
и вот такую:
setLower.headSet("Germany");
? Почему сразу записывают в
конструктор?
Где вы увидели запись в конструктор? states.headSet(...)
возвращает коллекцию с определенными элементами. setLower
- теперь ссылка, которая ведет на эту коллекцию.
Про остальное - как уже написали, "описание работы методов не сходится с документацией оттого и все проблемы с пониманием". Если у вас плохо с английским - один из способов - скачайте расширение расширение для автопереводов, например Google Translate, и читайте английскую документацию.
Виртуальный выделенный сервер (VDS) становится отличным выбором
Всем привет, я пытаюсь использовать Winium для автоматизации Java тестов для десктоп приложенияЛокаторы подбираю с помощью тулы UiSpy, пытаюсь найти...
есть два метода в одном классе, первый ищет минимальное и максимальное значение в массиве public void min_max() , во втором нужно вызвать первый метод...