Чтение онлайн

на главную - закладки

Жанры

Программирование на Java
Шрифт:

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) это свойство можно установить.

Метод load(InputStream inStream) позволяет загрузить набор свойств из входного потока (потоки данных подробно рассматриваются в лекции 15). Как правило, это текстовый файл, в котором хранятся параметры. Параметры - это строки, которые представляют собой пары ключ/значение. Предполагается, что по умолчанию используется кодировка ISO 8859-1. Каждая строка должна оканчиваться символами \r,\n или \r\n. Строки из файла будут считываться до тех пор, пока не будет достигнут его конец. Строки, состоящие из одних пробелов, или начинающиеся со знаков ! или #, игнорируются, т.е. их можно трактовать как комментарии. Если строка оканчивается символом /, то следующая строка считается ее продолжением. Первый символ с начала строки, отличный от пробела, считается началом ключа. Первый встретившийся пробел, двоеточие или знак равенства считается окончанием ключа. Все символы окончания ключа при необходимости могут быть включены в название ключа, но при этом перед ними должен стоять символ \. После того, как встретился символ окончания ключа, все аналогичные символы будут проигнорированы до начала значения. Оставшаяся часть строки интерпретируется как значение. В строке, состоящей только из символов \t, \n, \r, \\, \", \', \ и \uxxxx, они все распознаются и интерпретируются как одиночные символы. Если встретится сочетание \ и символа конца строки, то следующая строка будет считаться продолжением текущей, также будут проигнорированы все пробелы до начала строки-продолжения.

Метод save(OutputStream inStream,String header) сохраняет набор свойств в выходной поток в виде, пригодном для вторичной загрузки с помощью метода load. Символы, считающиеся служебными, кодируются так, чтобы их можно было считать при вторичной загрузке. Символы в национальной кодировке будут приведены к виду \uxxxx. При сохранении используется кодировка ISO 8859-1. Если указан header, то он будет помещен в начало потока в виде комментария (т.е. с символом # в начале), далее будет следовать комментарий, в котором будет указано время и дата сохранения свойств в потоке.

В классе Properties определен еще метод list(PrintWriter out), который практически идентичен save. Отличается лишь заголовок, который изменить нельзя. Кроме того, строки усекаются по ширине. Поэтому данный метод

для сохранения Properties не годится.

public class Test {

public Test {

}

public static void main(String[] args) {

Test test = new Test;

Properties props = new Properties;

StringWriter sw = new StringWriter;

sw.write("Key1 = Value1 \n");

sw.write(" Key2 : Value2 \r\n");

sw.write(" Key3 Value3 \n ");

InputStream is = new ByteArrayInputStream(sw.toString.getBytes);

try {

props.load(is);

}

catch (IOException ex) {

ex.printStackTrace;

}

props.list(System.out);

props.setProperty("Key1","Modified Value1");

props.setProperty("Key4","Added Value4");

props.list(System.out);

}

}

Пример 14.22.

Результатом будет:

– - listing properties --

Key3=Value3

Key2=Value2

Key1=Value1

– - listing properties --

Key4=Added Value4

Key3=Value3

Key2=Value2

Key1=Modified Value1

Пример 14.23.

Интерфейс Comparator

В коллекциях многие методы сортировки или сравнения требуют передачи в качестве одного из параметров объекта, который реализует интерфейс Comparator. Этот интерфейс определяет единственный метод compare(Object obj1,Object obj2), который на основании определенного пользователем алгоритма сравнивает объекты, переданные в качестве параметров. Метод compare должен вернуть:

– 1 если obj1 < obj2

0 если obj1 = obj2

1 если obj1 > obj2

Класс Arrays

Статический класс Arrays обеспечивает набор методов для выполнения операций над массивами, таких, как поиск, сортировка, сравнение. В Arrays также определен статический метод public List aList(a[] arr), который возвращает список фиксированного размера, основанный на массиве. Изменения в List можно внести, изменив данные в массиве.

public class Test {

public Test {

}

public static void main(String[] args) {

Test test = new Test;

String[] arr = {"String 1","String 4",

"String 2","String 3"

};

test.dumpArray(arr);

Arrays.sort(arr);

test.dumpArray(arr);

int ind = Arrays.binarySearch(arr, "String 4");

System.out.println(

"\nIndex of \"String 4\" = " + ind);

}

void dumpArray(String arr[]) {

System.out.println;

for(int cnt=0;cnt < arr.length;cnt++) {

System.out.println(arr[cnt]);

}

}

}

Класс StringTokenizer

Этот класс предназначен для разбора строки по лексемам ( tokens ). Строка, которую необходимо разобрать, передается в качестве параметра конструктору StringTokenizer(String str). Определено еще два перегруженных конструктора, которым дополнительно можно передать строку-разделитель лексем StringTokenizer(String str, String delim) и признак возврата разделителя лексем StringTokenizer(String str, String delim, Boolean returnDelims).

Поделиться:
Популярные книги

Аксиомы религиозного опыта

Ильин Иван Александрович
Научно-образовательная:
философия
5.00
рейтинг книги
Аксиомы религиозного опыта

Русские дети (сборник)

Фрай Макс
Проза:
современная проза
5.60
рейтинг книги
Русские дети (сборник)

Берег динозавров (Сборник)

Лаумер Кейт Джон
Шедевры фантастики
Фантастика:
научная фантастика
6.00
рейтинг книги
Берег динозавров (Сборник)

Театральная Энциклопедия

Неизвестен 3 Автор
Справочная литература:
словари
5.00
рейтинг книги
Театральная Энциклопедия

Локки 5. Потомок бога

Решетов Евгений Валерьевич
5. Локки
Фантастика:
юмористическое фэнтези
аниме
фэнтези
5.00
рейтинг книги
Локки 5. Потомок бога

В тебе моя жизнь...

Струк Марина
Любовные романы:
исторические любовные романы
9.21
рейтинг книги
В тебе моя жизнь...

Цикл романов "Все секреты мира"

Берри Стив
Детективы:
триллеры
крутой детектив
5.00
рейтинг книги
Цикл романов Все секреты мира

Неучтенный элемент. Том 3

NikL
3. Антимаг. Вне системы
Фантастика:
фэнтези
5.00
рейтинг книги
Неучтенный элемент. Том 3

Колдуны и капуста

Уланов Андрей Андреевич
2. Однажды на Диком западе
Фантастика:
фэнтези
7.54
рейтинг книги
Колдуны и капуста

Собрание сочинений в 10 томах. Том 4

Хаггард Генри Райдер
4. Собрание сочинений в 10 томах
Приключения:
исторические приключения
6.25
рейтинг книги
Собрание сочинений в 10 томах. Том 4

Ганнибал

Харрис Томас
3. Ганнибал Лектер
Детективы:
триллеры
8.80
рейтинг книги
Ганнибал

Гражданская кампания

Буджолд Лоис Макмастер
12. Сага о Форкосиганах
Фантастика:
космическая фантастика
9.14
рейтинг книги
Гражданская кампания

Экспансия — II

Семенов Юлиан Семенович
11. Штирлиц
Детективы:
исторические детективы
7.78
рейтинг книги
Экспансия — II

Компьютерные сети. 6-е изд.

Д. Таненбаум Э. С., Фимстер Н. , Уэзеролл
Старинная литература:
прочая старинная литература
5.00
рейтинг книги
Компьютерные сети. 6-е изд.