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

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

Вопросы

  1. Вопрос: Вы планируете записать программу, которая использует несколько основных интерфейсов набора: Set, List, Queue, и Map. Вы не уверены, какие реализации будут работать лучше всего, таким образом, Вы решите использовать реализации общего назначения, пока Вы не получаете лучшее представление, как Ваша программа будет работать в реальном мире. Какие реализации - они?
    Ответ:
    Set: HashSet
    List: ArrayList
    Queue: LinkedList
    Map: HashMapВопрос: Если Вы нуждаетесь в a Set реализация, которая обеспечивает упорядоченную значением итерацию, которую class следует использовать?
    Ответ:
    TreeSet гарантии, что сортированный набор находится в возрастающем порядке элемента, сортированном согласно естественному порядку элементов или Comparator если.
  2. Вопрос: Который class Вы используете для реализаций обертки доступа?
    Ответ:
    Вы используете Collections class, который обеспечивает статические методы, которые работают на или наборы возврата.

Упражнения

  1. Осуществление: Запишите программу, которая читает текстовый файл, определенный первым параметром командной строки, в a List. Программа должна тогда напечатать случайные строки от файла, числа строк, напечатанных, чтобы быть определенной вторым параметром командной строки. Запишите программу так, чтобы правильно размерный набор был выделен внезапно, вместо того, чтобы быть постепенно расширенным, поскольку файл читается в. Подсказка: Чтобы определить число строк в файле, использовать java.io.File.length чтобы получить размер файла, затем разделитесь на принятый размер средней строки.
    Ответ:
    Так как мы получаем доступ List в произвольном порядке мы будем использовать ArrayList. Мы оцениваем число строк, беря размер файла и делясь на 50. Мы тогда удваиваем то число, так как более эффективно оценить слишком высоко чем к underestmate.
    
    import java.util.*;
    import java.io.*;
    
    public class FileList {
        public static void main(String[] args) {
            final int assumedLineLength = 50;
            File file = new File(args[0]);
            List<String> fileList = 
                new ArrayList<String>((int)(file.length() / assumedLineLength) * 2);
            BufferedReader reader = null;
            int lineCount = 0;
            try {
                reader = new BufferedReader(new FileReader(file));
                for (String line = reader.readLine(); line != null;
                        line = reader.readLine()) {
                    fileList.add(line);
                    lineCount++;
                }
            } catch (IOException e) {
                System.err.format("Could not read %s: %s%n", file, e);
                System.exit(1);
            } finally {
                if (reader != null) {
                    try {
                        reader.close();
                    } catch (IOException e) {}
                }
            }
            int repeats = Integer.parseInt(args[1]);
            Random random = new Random();
            for (int i = 0; i < repeats; i++) {
                System.out.format("%d: %s%n", i,
                        fileList.get(random.nextInt(lineCount - 1)));
            }
        }
    }
    
    Эта программа фактически проводит большую часть своего времени, читая в файле, таким образом предварительно выделяя ArrayList имеет немного влияет на его производительности. Определение начальной емкости заранее, более вероятно, будет полезно, когда Ваша программа repeatly создаст большой ArrayList объекты без прошедшего ввода-вывода.
«ПредыдущийTOC

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

Предыдущая страница: Вопросы и Упражнения: Реализации