
— Здравей, Амиго.
— Хей, Риши.
„Ели ми каза, че искаш още примери за колекции. Ще ти дам няколко. Ето списък с колекции и интерфейси:“
Интерфейс | Клас/внедряване | Описание |
---|---|---|
списък | ArrayList | списък |
LinkedList | списък | |
вектор | вектор | |
Стек | Стек | |
Комплект | HashSet | Комплект |
TreeSet | Комплект | |
СортиранНабор | Сортиран комплект | |
Карта | HashMap | Карта/речник |
TreeMap | Карта/речник | |
Сортирана карта | Сортиран речник | |
Хеш table | Хеш-table |
"Хм. Това е доста. Четири списъка, три комплекта и четири карти."
„Да, всички те са различни реализации на интерфейсите List, Set и Map.“
"Каква е разликата между тези реализации?"
"Точно за това ще говорим днес. Само имайте търпение."
— Имате ли други въпроси?
"Знам How да покажа списък на екрана. Как да покажа набор or карта?"
„Елементите на списъка имат определен ред, така че можете просто да използвате индекс, за да ги покажете. За набор or карта няма конкретен ред. Всъщност редът на техните елементи може да се промени, когато елементите се изтриват or се създават се добавят елементи."
"Невероятно."
„Ето защо бяха измислени специални обекти, наречени итератори, за работа с елементи на колекция. Те ви позволяват да преминете през всички елементи в колекция, дори ако имат само имена instead of индекси (Карта), or нито имена, нито индекси ( Комплект)."
"Ето няколко примера:"
public static void main(String[] args)
{
Set<String> set = new HashSet<String>();
set.add("Rain");
set.add("In");
set.add("Spain");
// Get an iterator for the set
Iterator<String> iterator = set.iterator();
while (iterator.hasNext()) // Check if there is another element
{
// Get the current element and move to the next one
String text = iterator.next();
System.out.println(text);
}
}
public static void main(String[] args)
{
List<String> list = new ArrayList<String>();
list.add("Rain");
list.add("In");
list.add("Spain");
Iterator<String> iterator = list.iterator();// Get an iterator for the list
while (iterator.hasNext()) // Check if there is another element
{
// Get the current element and move to the next one
String text = iterator.next();
System.out.println(text);
}
}
public static void main(String[] args)
{
// All elements are stored in pairs
Map<String, String> map = new HashMap<String, String>();
map.put("first", "Rain");
map.put("second", "In");
map.put("third", "Spain");
Iterator<Map.Entry<String, String>> iterator = map.entrySet().iterator();
while (iterator.hasNext())
{
// Get a key-value pair
Map.Entry<String, String> pair = iterator.next();
String key = pair.getKey(); // Key
String value = pair.getValue(); // Value
System.out.println(key + ":" + value);
}
}
"Уау. Чудя се Howво означава всичко това."
„Всъщност е доста просто. Първо, получаваме специален обект, итератор, от колекцията. Итераторът има само два метода.
1. Методът next() връща следващия елемент в колекцията.
2. Методът hasNext() проверява дали все още има елементи, които не са бor върнати от next()."
"Добре. Мисля, че вече става по-ясно. Нека се опитам да ви повторя това, което разбрах."
„И така... Първо, трябва да извикаме метода iterator() на колекция, за да получим този магически итератор обект.“
„След това получаваме елементи един по един, стига да има останали за получаване. Получаваме следващия елемент в колекцията, като извикваме next(), и проверяваме дали все още има елементи в колекцията, като извикваме hasNext() на итератор. Това правилно ли е?"
"Да, горе-долу. Но изчакайте добрата част."
"Java има съкратена нотация за работа с итератори. Следвайки модела на while и for , беше добавен още един специален оператор: за всеки . Той също така се посочва с помощта на ключовата дума for ."
"Инструкцията for-each се използва само за работа с колекции и контейнери. Той използва итератор имплицитно, но ние виждаме само върнатия елемент."
„Позволете ми да ви покажа дълъг и стенографски начин за работа с итератор:“
public static void main(String[] args)
{
Set<String> set = new HashSet<String>();
set.add("Rain");
set.add("In");
set.add("Spain");
Iterator<String> iterator = set.iterator();
while (iterator.hasNext())
{
String text = iterator.next();
System.out.println(text);
}
}
public static void main(String[] args)
{
Set<String> set = new HashSet<String>();
set.add("Rain");
set.add("In");
set.add("Spain");
for (String text : set)
{
System.out.println(text);
}
}
"Обърнете внимание, че думите, подчертани в червено or зелено, липсват в дясната част. Всъщност три реда са заменени с един:"
Iterator<String> iterator = set.iterator();
while (iterator.hasNext())
{
String text = iterator.next();
for (String text : set)
„Това изглежда прекрасно. Така ми харесва много повече.“
„Нека да разгледаме съкратената version на примерите по-горе:“
public static void main(String[] args)
{
Set<String> set = new HashSet<String>();
set.add("Rain");
set.add("In");
set.add("Spain");
for (String text : set)
{
System.out.println(text);
}
}
public static void main(String[] args)
{
List<String> list = new ArrayList<String>();
list.add("Rain");
list.add("In");
list.add("Spain");
for (String text : list)
{
System.out.println(text);
}
}
public static void main(String[] args)
{
Map<String, String> map = new HashMap<String, String>();
map.put("first", "Rain");
map.put("second", "In");
map.put("third", "Spain");
for (Map.Entry<String, String> pair : map.entrySet())
{
String key = pair.getKey(); // Key
String value = pair.getValue(); // Value
System.out.println(key + ":" + value);
}
}
— Сега говориш!
"Радвам се, че ти харесва."
GO TO FULL VERSION