Реализация Java Hashmap - PullRequest
       10

Реализация Java Hashmap

2 голосов
/ 01 мая 2011

Я хочу использовать хэш-карту для подсчета количества вхождений нескольких строк в файле.Как бы я поступил так?Кроме того, смогу ли я посчитать количество уникальных строк аналогичным образом?Примеры будут высоко оценены.

Ответы [ 2 ]

6 голосов
/ 01 мая 2011

В качестве примера, вот программа, которая будет читать слова из файла и подсчитывать, сколько раз встречалось ключевое слово Java.

import java.io.BufferedReader;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.util.Map;
import java.util.HashMap;

public class CountKeywords {

    public static void main(String args[]) {

        String[] theKeywords = { "abstract", "assert", "boolean", "break", "byte", "case", "catch", "char", "class", "const", "continue", "default", "do", "double", "else", "enum", "extends", "false", "final", "finally", "float", "for", "goto", "if", "implements", "import", "instanceof", "int", "interface", "long", "native", "new", "null", "package", "private", "protected", "public", "return", "short", "static", "strictfp", "super", "switch", "synchronized", "this", "throw", "throws", "transient", "true", "try", "void", "volatile", "while" };

        // put each keyword in the map with value 0 
        Map<String, Integer> theKeywordCount = new HashMap<String, Integer>();
        for (String str : theKeywords) {
            theKeywordCount.put(str, 0);
        }

        FileReader fr;
        BufferedReader br;
        File file = new File(args[0]); // the filename is passed in as a String

        // attempt to open and read file
        try {
            fr = new FileReader(file);
            br = new BufferedReader(fr);

            String sLine;

            // read lines until reaching the end of the file
            while ((sLine = br.readLine()) != null) {

                // if an empty line was read
                if (sLine.length() != 0) {

                    // extract the words from the current line in the file
                    if (theKeywordCount.containsKey(sLine)) {
                        theKeywordCount.put(sLine, theKeywordCount.get(sLine) + 1);
                    }
                }
            }

        } catch (FileNotFoundException exception) {
            // Unable to find file.
            exception.printStackTrace();
        } catch (IOException exception) {
            // Unable to read line.
            exception.printStackTrace();
        } finally {
                br.close();
            }

        // count how many times each keyword was encontered
        int occurrences = 0;
        for (Integer i : theKeywordCount.values()) {
            occurrences += i;
        }

        System.out.println("\n\nTotal occurences in file: " + occurrences);
    }
}

Чтобы ответить на ваш вопрос об уникальных строках, вы можете адаптировать способЯ использую HashMap аналогичным образом.

  1. создайте новый HashMap, назовите его uniqueStrings
  2. при чтении строк из файла, проверьте, отслеживает ли HashMap, который отслеживаетcount содержит текущую строку
    • , если ее нет, затем добавьте ее к uniqueStrings
    • , если она есть, затем удалите ее из uniqueStrings
  3. после прочтения файла у вас будут только уникальные строки в uniqueStrings

Дайте мне знать, если у вас есть вопросы.

Надеюсь, это поможет.
Христо

0 голосов
/ 21 апреля 2012

Для отслеживания уникальных строк вам не нужно отслеживать количество вхождений в файле.Скорее, вы можете использовать HashSet вместо HashMap для ясности кода.

Примечание: HashSet внутренне поддерживается HashMap с конечным объектом, используемым в качестве значения в паре ключ-значение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...