Вход/Регистрация
Философия Java3
вернуться

Эккель Брюс

Шрифт:

Четыре метода представляют математические операции с множествами: union возвращает объект Set, полученный объединением множеств-аргументов, intersection возвращает объект Set с общими элементами аргументов, difference вычисляет разность множеств, a complement) — объект Set со всеми элементами, не входящими в пересечение. Чтобы создать простой пример использования этих методов, мы воспользуемся перечислением, содержащим разные названия акварельных красок:

//: generics/watercolors/Watercolors java package generics.watercolors;

public enum Watercolors {

ZINC. LEM0N_YELL0W. MEDIUM_YELLOW, DEEP_YELLOW, ORANGE. BRILLIANT_RED. CRIMSON. MAGENTA. ROSE_MADDER. VIOLET. CERULEAN_BLUE_HUE. PHTHALO_BLUE, ULTRAMARINE. COBALT_BLUE_HUE, PERMANENT_GREEN. VIRIDIAN_HUE. SAP_GREEN. YELL0W_0CHRE. BURNT_SIENNA. RAWJJMBER, BURNTJJMBER. PAYNES_GRAY. IVORY_BLACK } ///:-

Для удобства (чтобы избежать уточнения всех имен) в следующем примере это перечисление импортируется статически. Мы используем EnumSet — новый инструмент Java SE5 для простого создания Set на базе перечисления. Статическому методу EnumSet.range передаются первый и последний элементы диапазона, по которому строится множество:

II: generics/WatercolorSets.java import generics.watercolors.*; import java.util.*;

import static net.mindview.util.Print.*; продолжение &

import static net.mindview util.Sets *; import static generics.watercolors.Watercolors.*;

public class WatercolorSets {

public static void main(String[] args) { Set<Watercolors> setl =

EnumSet.range(BRILLIANT_RED, VIRIDIAN_HUE); Set<Watercolors> set2 =

EnumSet range(CERULEAN_BLUE_HUE, BURNT_UMBER), printCsetl. " + setl); print("set2- " + set2);

print("union(setl. set2)- " + union(setl. set2)); Set<Watercolors> subset = intersection(setl. set2); print("intersection(setl. set2). " + subset). print("difference(setl. subset)- " +

difference(setl. subset)). print("difference(set2. subset). " +

difference(set2. subset)); print("complement(setl. set2) " + complement(setl. set2));

}

} /* Output.

setl. [BRILLIANT_RED. CRIMSON. MAGENTA. ROSE_MADDER, VIOLET. CERULEAN_BLUE_HUE. PHTHALO_BLUE. ULTRAMARINE. COBALT_BLUE_HUE. PERMANENT_GREEN. VIRIDIAN_HUE] set2- [CERULEAN_BLUE_HUE, PHTHALO_BLUE. ULTRAMARINE. COBALT_BLUE_HUE. PERMANENT_GREEN. VIRIDIAN_HUE. SAP_GREEN. YELL0W_0CHRE. BURNT_SIENNA. RAWJJMBER. BURNT_UMBER] union(setl. set2) [SAP_GREEN. ROSE_MADDER, YELL0W_0CHRE. PERMANENT_GREEN. BURNTJJMBER, COBALT_BLUE_HUE, VIOLET. BRILLIANT_RED. RAWJJMBER. ULTRAMARINE. BURNT_SIENNA. CRIMSON. CERULEAN_BLUE_HUE. PHTHALO_BLUE. MAGENTA. VIRIDIAN_HUE]

intersection(setl. set2): [ULTRAMARINE. PERMANENT_GREEN. COBALT_BLUE_HUE. PHTHALO_BLUE. CERULEAN_BLUE_HUE. VIRIDIAN_HUE]

difference(setl, subset): [ROSE_MADDER, CRIMSON. VIOLET. MAGENTA. BRILLIANT_RED] difference(set2. subset): [RAWJJMBER, SAP_GREEN. YELLOW J3CHRE, BURNT_SIENNA, BURNTJJMBER]

complement(setl, set2): [SAP_GREEN. ROSE_MADDER. YELL0W_0CHRE. BURNTJJMBER, VIOLET. BRILLIANT_RED, RAW_UMBER. BURNT_SIENNA. CRIMSON. MAGENTA] *///:-

В выходных данных показаны результаты выполнения каждой операции. В следующем примере представлены варианты вызова Sets.difference для разных классов Collection и Map из java.util:

//: net/mi ndvi ew/uti1/Contai nerMethodDi fferences.java package net.mindview.util; import java lang reflect *; import java.util.*,

public class ContainerMethodDifferences {

static Set<String> methodSet(Class<?> type) {

Set<String> result = new TreeSet<String>; for (Method m : type.getMethodsO) result.add(m.getNameO); return result;

}

static void interfaces(Class<?> type) {

System.out.print("Interfaces in " +

type getSimpleNameO + ": "); List<String> result = new ArrayList<String>;

for(Class<?> с : type.getlnterfacesO) result.add(c.getSimpleName); System.out.println(result);

}

static Set<String> object = methodSet(Object.class); static { object.add("clone"); } static void

differencesass<?> superset, Class<?> subset) {

System.out.pri nt(superset.getSimpleName +

" extends " + subset.getSimpleNameO + ", adds: "); Set<String> comp = Sets.difference(

methodSet(superset). methodSet(subset)); сотр.removeAll(object); // He показывать методы 'Object' System.out.println(comp); interfaces(superset),

}

public static void main(String[] args) {

System.out.printlnC'Collection: " +

methodSet(Collection.class)), interfaces(Collection.class); difference(Set.class. Collection.class); difference(HashSet.class. Set.class); difference(LinkedHashSet.class, HashSet.class); difference(TreeSet.class. Set.class); differences st. class. Col 1 ecti on.cl ass); difference(ArrayList.class, List.class); differences nkedLi st. class. List.class); difference(Queue.class. Collection.class); di fference(Pri ori tyQueue.class. Queue.class); System.out.println("Map: " + methodSet(Map.class)); difference(HashMap.class. Map.class); difference(LinkedHashMap.class. HashMap.class); difference(SortedMap.class. Map.class); difference(TreeMap.class, Map class);

  • Читать дальше
  • 1
  • ...
  • 159
  • 160
  • 161
  • 162
  • 163
  • 164
  • 165
  • 166
  • 167
  • 168
  • 169
  • ...

Ебукер (ebooker) – онлайн-библиотека на русском языке. Книги доступны онлайн, без утомительной регистрации. Огромный выбор и удобный дизайн, позволяющий читать без проблем. Добавляйте сайт в закладки! Все произведения загружаются пользователями: если считаете, что ваши авторские права нарушены – используйте форму обратной связи.

Полезные ссылки

  • Моя полка

Контакты

  • chitat.ebooker@gmail.com

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