Iterator it = hm.entrySet().iterator();
// Итератор для перебора всех точек входа в Map
while(it.hasNext()) {
entry = (Map.Entry)it.next();
System.out.println("For key = " + entry.getKey() + " value = " + ((TestObject)entry.getValue()).getText());
}
System.out.println();
System.out.println("Iteration over keySet");
String key = "";
// Итератор для перебора всех ключей в Map
it = hm.keySet().iterator();
while(it.hasNext()) {
key = (String)it.next();
System.out.println( "For key = " + key + " value = " +
((TestObject)hm.get(key)).getText());
}
}
}
Пример 14.19.
Результатом будет:
Object value for Key1 = Value 1
Iteration over entrySet
For key = Key3 value = Value 3
For key = Key2 value = Value 2
For key = Key1 value = Value 1
Iteration over keySet
For key = Key3 value = Value 3
For key = Key2 value = Value 2
For key = Key1 value = Value 1
Пример 14.20.
java.util.TreeMap - расширяет класс AbstractMap и реализует интерфейс SortedMap. TreeMap содержит ключи в порядке возрастания. Используется либо натуральное сравнение ключей, либо должен быть реализован интерфейс Comparable. Реализация алгоритма поиска обеспечивает логарифмическую зависимость времени выполнения основных операций ( containsKey, get, put и remove ). Запрещено применение null значений для ключей. При использовании дубликатов ключей ссылка на объект, сохраненный с таким же ключом, будет утеряна. Например:
public class Test {
public Test() {
}
public static void main(String[] args) {
Test t = new Test();
TreeMap tm = new TreeMap();
tm.put("key","String1");
System.out.println(tm.get("key"));
tm.put("key","String2");
System.out.println(tm.get("key"));
}
}
Результатом будет:
String1
String2
Класс Collections
Класс Collections является классом-утилитой и содержит несколько вспомогательных методов для работы с классами, обеспечивающими различные интерфейсы коллекций. Например, для сортировки элементов списков, для поиска элементов в упорядоченных коллекциях и т.д. Но, пожалуй, наиболее важным свойством этого класса является возможность получения синхронизированных вариантов классов-коллекций. Например, для получения синхронизированного варианта Map можно использовать следующий подход:
HashMap hm = new HashMap();
:
Map syncMap = Collections.synchronizedMap(hm);
:
Как уже отмечалось ранее, начиная с JDK 1.2, класс Vector реализует интерфейс List. Рассмотрим пример сортировки элементов, содержащихся в классе Vector.
public class Test {
private class TestObject {
private String name = "";
public TestObject(String name) {
this.name = name;
}
}
private class MyComparator implements Comparator {
public int compare(Object l,Object r) {
String left = (String)l;
String right = (String)r;
return -1 left.compareTo(right);
}
}
public Test() {
}
public static void main(String[] args) {
Test test = new Test();
Vector v = new Vector();
v.add("bbbbb");
v.add("aaaaa");
v.add("ccccc");
System.out.println("Default elements order");
test.dumpList(v);
Collections.sort(v);
System.out.println("Default sorting order");
test.dumpList(v);
System.out.println("Reverse sorting order with providing imlicit comparator");
Collections.sort(v,test.new MyComparator());
test.dumpList(v);
}
private void dumpList(List l) {
Iterator it = l.iterator();
while(it.hasNext()) {
System.out.println(it.next());
}
}
}
Пример 14.21.
Класс Properties
Класс Properties предназначен для хранения набора свойств (параметров). Методы
String getProperty(String key)
String getProperty(String key,
String defaultValue)
позволяют получить свойство из набора.
С помощью метода setProperty(String key, String value) это свойство можно установить.