CodeGym /Курсове /All lectures for BG purposes /Колекции — помощен клас

Колекции — помощен клас

All lectures for BG purposes
Ниво, Урок
На разположение

1. Списък на методите

Помните ли, че създателите на Java написаха цял помощен клас, призван Arraysза наше удобство при работа с масиви?

Те направиха същото за колекциите. Java има java.util.Collectionsклас, който има много методи, които са полезни за работа с колекции. Ето само най-интересните:

Методи Описание
addAll(colls, e1, e2, e3, ...)
Добавя елементите e1, e2, e3, ... към collsколекцията
fill(list, obj)
Заменя всички елементи в преминалия списък сobj
nCopies(n, obj)
Връща списък с nкопия на objобекта
replaceAll(list, oldVal, newVal)
Заменя всички случаи на oldValс newValв listсписъка
copy(dest, src)
Копира всички елементи от srcсписъка в destсписъка
reverse(list)
Обръща списъка.
sort(list)
Сортира списъка във възходящ ред
rotate(list, n)
Циклично премества елементите на listсписъка по nелементи
shuffle(list)
Произволно разбърква елементите в списъка
min(colls)
Намира минималния елемент в collsколекцията
max(colls)
Намира максималния елемент в collsколекцията
frequency(colls, obj)
Определя колко пъти objелементът се среща в collsколекцията
binarySearch(list, key)
Търси keyв сортиран списък и връща съответния индекс.
disjoint(colls1, colls2)
Връща true, ако колекциите нямат общи елементи
Важно:

Много от тези методи не използват класовете ArrayList, HashSetи HashMapсами по себе си, а със съответните интерфейси: Collection<T>, List<T>, Map<K, V>.

Това не е проблем: ако даден метод приема List<T>, винаги можете да му предадете ArrayList<Integer>, но операторът за присвояване не работи в обратната посока.


2. Създаване и модифициране на колекции

Collections.addAll(Collection<T> colls, T e1, T e2, T e3, ...)метод

Методът addAll()добавя елементите e1, e2, e3, ... към collsколекцията Могат да бъдат предадени произволен брой елементи.

Код Конзолен изход
ArrayList<Integer> list = new ArrayList<Integer>();
Collections.addAll(list, 1, 2, 3, 4, 5);

for (int i: list)
   System.out.println(i);
1
2
3
4
5

Collections.fill(List<T> list, T obj)метод

Методът fill()замества всички елементи на listколекцията с objелемента.

Код Конзолен изход
ArrayList<Integer> list = new ArrayList<Integer>();
list.add(1);
list.add(2);
list.add(3);

Collections.fill(list, 10);

for (int i: list)
   System.out.println(i);
10
10
10

Collections.nCopies(int n, T obj)метод

Методът nCopies()връща списък с nкопия на objелемента. Имайте предвид, че върнатият списък е неизменен, което означава, че не можете да го промените! Можете да го използвате само за четене на стойности:

Код Описание
List<String> immutableList = Collections.nCopies(5, "Hello");

ArrayList<String> list = new ArrayList<String>(immutableList);

for(String s: list)
   System.out.println(s);
Създайте неизменен списък от 5 Helloниза
Създайте променлив listи го попълнете със стойностите от immutableListсписъка.

Конзолен изход:
Hello
Hello
Hello
Hello
Hello

Collections.replaceAll (List<T> list, T oldValue, T newValue)метод

Методът replaceAll()замества всички елементи в колекцията, listравна на oldValueс newValue.

Код Конзолен изход
ArrayList<Integer> list = new ArrayList<Integer>();
list.add(1);
list.add(2);
list.add(3);

Collections.replaceAll(list, 2, 20);

for (int i: list)
   System.out.println(i);
1
20
3

Collections.copy (List<T> dest, List<T> src)метод

Методът copy()копира всички елементи на srcколекцията в destколекцията.

Ако destколекцията започва по-дълго от srcколекцията, тогава останалите елементи на destколекцията ще останат непокътнати.

Важно:
Колекцията destтрябва да е поне толкова дълга, колкото srcколекцията (в противен случай IndexOutOfBoundsExceptionще бъде хвърлен).
Код Конзолен изход
ArrayList<Integer> srcList = new ArrayList<Integer>();
Collections.addAll(srcList, 99, 98, 97);

ArrayList<Integer> destList = new ArrayList<Integer>();
Collections.addAll(destList, 1, 2, 3, 4, 5, 6, 7);

Collections.copy(destList, srcList);

for (int i: destList)
   System.out.println(i);
99
98
97
4
5
6
7


3. Ред на елементите

Collections.reverse(List<T> list)метод

Методът reverse()обръща реда на елементите от преминалия списък.

Код Конзолен изход
ArrayList<Integer> list = new ArrayList<Integer>();
Collections.addAll(list, 1, 2, 3, 4, 5);

Collections.reverse(list);

for (int i: list)
   System.out.println(i);
5
4
3
2
1

Collections.sort(List<T> list)метод

Методът sort()сортира преминалия списък във възходящ ред.

Код Конзолен изход
ArrayList<Integer> list = new ArrayList<Integer>();
Collections.addAll(list, 11, 2, 23, 4, 15);

Collections.sort(list);

for (int i: list)
   System.out.println(i);
2
4
11
15
23

Collections.rotate(List<T> list, int distance)метод

Методът rotate()циклично измества елементите от преминатия списък с distanceпозиции напред.

Код Конзолен изход
ArrayList<Integer> list = new ArrayList<Integer>();
Collections.addAll(list, 1, 2, 3, 4, 5, 6, 7, 8, 9);

Collections.rotate(list, 3); // Shift by 3 positions

for (int i: list)
   System.out.println(i);
7
8
9
1
2
3
4
5
6

Collections.shuffle(List<T> list)метод

Методът shuffle()произволно разбърква всички елементи от преминатия списък. Резултатът всеки път е различен.

Код Конзолен изход
ArrayList<Integer> list = new ArrayList<Integer>();
Collections.addAll(list, 1, 2, 3, 4, 5);

Collections.shuffle(list); // Shuffle the elements

for (int i: list)
   System.out.println(i);
5
2
4
3
1


4. Намиране на елементи в колекции

Collections.min(Collection<T> colls)метод

Методът min()връща минималния елемент в колекцията.

Код Конзолен изход
ArrayList<Integer> list = new ArrayList<Integer>();
Collections.addAll(list, 11, 2, 23, 4, 15);

int min = Collections.min(list);

System.out.println(min);
2

Collections.max(Collection<T> colls)метод

Методът max()връща максималния елемент в колекцията.

Код Конзолен изход
ArrayList<Integer> list = new ArrayList<Integer>();
Collections.addAll(list, 11, 2, 23, 4, 15);

int max = Collections.max(list);

System.out.println(max);
23

Collections.frequency(Collection<T> colls, T obj)метод

Методът frequency()отчита колко пъти елементът objсе среща в collsколекцията

Код Конзолен изход
ArrayList<Integer> list = new ArrayList<Integer>();
Collections.addAll(list, 11, 2, 23, 4, 15, 4, 2, 4);

int count = Collections.frequency(list, 4);

System.out.println(count);
3

Collections.binarySearch(Collection<T> colls, T obj)метод

Методът binarySearch()търси елемента objв collsколекцията. Връща индекса на намерения елемент. Връща отрицателно число, ако елементът не е намерен.

Важно:
Преди да извикате binarySearch()метода, колекцията трябва да бъде сортирана (използвайте Collections.sort()).
Код Конзолен изход
ArrayList<Integer> list = new ArrayList<Integer>();
Collections.addAll(list, 11, 2, 23, 5, 15, 4, 2, 4);

Collections.sort(list);  // 2, 2, 4, 4, 5, 11, 15, 23

int index = Collections.binarySearch(list, 5);    // 4
System.out.println(index);

int index2 = Collections.binarySearch(list, 15);  // 6
System.out.println(index2);

int index3 = Collections.binarySearch(list, 16); // The element doesn't exist
System.out.println(index3);
4
6
-8

Collections.disjoint(Collection<T> coll1, Collection<T> coll2)метод

Методът disjoint()се връща true, ако предадените колекции нямат ниHowви общи елементи.

Код Конзолен изход
ArrayList<Integer> list = new ArrayList<Integer>();
Collections.addAll(list, 1, 2, 3, 4, 5, 6, 7);

ArrayList<Integer> list2 = new ArrayList<Integer>();
Collections.addAll(list2, 99, 98, 97);

boolean isDifferent = Collections.disjoint(list, list2);
System.out.println(isDifferent);
true

Коментари
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION