Spec-Zone .ru
спецификации, руководства, описания, API
Домашняя страница > Наборы > Интерфейсы

Ответы на Вопросы и Упражнения:

Вопросы

  1. Вопрос: Этот урок упоминает три способа пересечь a List. Опишите их, и отметьте ограничения каждого. Ответ:
    • Используйте улучшенный for оператор:
      List<Thing> list;
      ...
      for (Thing thing : list) {
          ...
      }
      
      Ограничения: не может использоваться, чтобы добавить, удалить, или изменить элементы.
    • Используйте традиционное for оператор вместе с Iterator:
      List<Thing> list;
      ...
      for (Iterator<Thing> it = list.iterator(); it.hasNext(); ) {
          Thing thing = it.next();
          ...
      }
      
      Ограничения: не может использоваться, чтобы изменить элементы.
    • Используйте традиционное for оператор вместе с ListIterator:
      List<Thing> list;
      ...
      for (ListIterator<Thing> it = list.iterator(); it.hasNext(); ) {
          Thing thing = it.next();
          ...
      }
      
      Ограничения: ни один.
  2. Вопрос: Рассмотрите четыре базовых интерфейса, Set, List, Queue, и Map. Для каждого из следующих четырех присвоений определите, какой из четырех базовых интерфейсов хорошо-костюм, и объясните, как использовать его, чтобы реализовать присвоение.
    Ответ:
    • Whimsical Toys Inc (WTI) должна записать имена всех своих сотрудников. Каждый месяц сотрудник будет выбран наугад из этих записей, чтобы получить свободную игрушку.
      Используйте a List. Выберите случайного сотрудника, выбирая число между 0 и size()-1.
    • WTI решил, что каждый новый продукт назовут после сотрудника — но только будут использоваться имена, и каждое имя будет использоваться только однажды. Подготовьте список уникальных имен.
      Используйте a Set. Наборы, которые реализуют этот интерфейс, не позволяют тому же самому элементу вводиться не раз.
    • WTI решает, что только хочет использовать самые популярные имена для своих игрушек. Подсчитайте численность персонала, у кого есть каждое имя.
      Используйте a Map, где ключи являются именами, и каждое значение является количеством численности персонала с тем именем.
    • WTI получает абонементы для локальной команды лакросса, чтобы быть совместно использованным сотрудниками. Создайте очередь для этого популярного вида спорта.
      Используйте a Queue. Вызвать add() добавить сотрудников к очереди, и remove() удалить их.
  3. Вопрос: следующая программа, как предполагается, печатает "Синюю" строку. Вместо этого это бросает ошибку. Почему?
    import java.util.*;
    
    public class SortMe {
        public static void main(String args[]) {
            SortedSet<StringBuffer> s = new TreeSet<StringBuffer>();
            s.add(new StringBuffer("Red"));
            s.add(new StringBuffer("White"));
            s.add(new StringBuffer("Blue"));
            System.out.println(s.first());
        }
    }
    
    Ответ:
    TreeSort элементы должны быть экземплярами class, который реализует Comparable. StringBuffer не делает.

Упражнения

  1. Осуществление: Запишите программу, которая печатает ее параметры в произвольном порядке. Не делайте копию массива параметра.
    Ответ:
    
    import java.util.*;
    
    public class Ran {
        public static void main(String[] args) {
            List<String> argList = Arrays.asList(args);
            Collections.shuffle(argList);
            for (String arg: argList) {
                System.out.format("%s ", arg);
            }
            System.out.println();
        }
    }
    
  2. Осуществление: Возьмите FindDups example и измените это, чтобы использовать a SortedSet вместо a Set. Определите a Comparator так, чтобы регистр игнорировался, сортируя и идентифицируя элементы набора.
    Ответ:
    import java.util.*;
    
    public class FindDups {
    
        public static void main(String[] args) {
            Comparator<String> comparator = new Comparator<String>() {
                public int compare (String s1, String s2) {
                    return s1.compareToIgnoreCase(s2);
                }
            };
    
            SortedSet<String> s = new TreeSet<String>(comparator);
            for (String a : args)
                if (!s.add(a))
                    System.out.println("Duplicate detected: " + a);
    
            System.out.println(s.size() + " distinct words: " + s);
        }
    }
    
  3. Осуществление: Запишите метод, который берет a List<String> и применяется String.trim к каждому элементу. Чтобы сделать это, Вы должны будете выбрать одну из трех итеративных идиом, что Вы описали рассматриваемый 1. Два из них не будут давать результат, который Вы хотите, так убедиться, что записали программу, которая демонстрирует, что метод фактически работает!
    Ответ:
    Улучшенный for оператор не позволяет Вам изменять List. Используя Iterator позволяет Вам удалять элементы, но не заменять существующий элемент или добавлять новый. То, что листы ListIterator:
    import java.util.*;
    
    public class ListTrim {
        static void listTrim(List<String> strings) {
            for (ListIterator<String> lit = strings.listIterator(); lit.hasNext(); ) {
                lit.set(lit.next().trim());
            }
        }
    
        public static void main(String[] args) {
            List<String> l = Arrays.asList(" red ", " white ", " blue ");
            listTrim(l);
            for (String s : l) {
                System.out.format("\"%s\"%n", s);
            }
        }
    }
    
«ПредыдущийTOC

Проблемы с примерами? Попытайтесь Компилировать и Выполнить Примеры: FAQ.
Жалобы? Поздравление? Предложения? Дайте нам свою обратную связь
.

Предыдущая страница: Вопросы и Упражнения: Интерфейсы