Подсчет узлов для каждого индекса + toString - PullRequest
0 голосов
/ 22 сентября 2019

Так что мне было интересно, есть ли способ распечатать, какой индекс списка имеет наибольшее количество коллизий?Кроме того, я хотел знать, каков наилучший способ создания toString () для моего LinkedList?Я пытался несколько раз с реализацией по умолчанию для LinkedList toString, но я не могу понять, как это сделать.

Заранее спасибо!

Код:

static LinkedList<Node> hashTable[] = new LinkedList[100];

static class Node {
    int value;
    int key;

    @Override
    public String toString() {
        return "Value: " + value + " " + "Key: " + key;
    }
}

public static void main(String[] args) throws FileNotFoundException {

    File f = new File("Ex5.txt");

    Scanner scan = new Scanner(f);

    if (f.exists() == false) {
        System.out.println("File doesn't exist or could not be found.");
        System.exit(0);
    }

    for (int i = 0; i < 100; i++) {
        hashTable[i] = null;
    }

    while (scan.hasNextInt()) {
        int n = scan.nextInt();
        insert(n, hashFunction(n));
    }

    for (int i = 0; i < 100; i++) {
        System.out.println(hashTable[i]);
    }

    int emptyEntries = 0;

    for (int i = 0; i < 100; i++) {
        if (hashTable[i] == null) {
            emptyEntries += 1;
        }
    }
    System.out.println("Number of empty entries: " + emptyEntries);
}

public static void insert(int key, int value) {
    int index = hashFunction(value);
    LinkedList<Node> items = hashTable[index];

    if (items == null) {
        items = new LinkedList<>();

        Node item = new Node();
        item.key = key;
        item.value = value;

        items.add(item);

        hashTable[index] = items;
    } else {
        for (Node item : items) {
            if (item.key == key) {
                item.value = value;
                return;
            }
        }

        Node item = new Node();
        item.key = key;
        item.value = value;

        items.add(item);
    }
}

public static int hashFunction(int value) {
    int hashKey = value % 100;
    return hashKey;
}

1 Ответ

0 голосов
/ 22 сентября 2019

Классы являются объектами.LinkedList - это класс.Все объекты расширяют java.lang.Object, и вы всегда можете вызвать Object.toString() для них, но то, что вы, вероятно, ищете, это способ распечатать все значения.В этом случае лучше всего использовать цикл for:

for(int i=0; i<items.size(); i++){
    System.out.println(items.get(i));
}

Вы печатаете несколько строк, каждая из которых содержит различное количество Node объектов.Вы хотите узнать, какая строка содержит наибольшее количество объектов Node.

Способ сделать это прост.Вам нужно использовать вложенные циклы for, чтобы напечатать это, и, таким образом, вы можете сделать это с помощью ваших циклов for

int maxNodes = Integer.MIN_VALUE;
int index = -1;
for(int i=0; i<LinkedList.size(); i++){
    int nodes = 0;
    for(int j=0; j<nestedLinkedList.size(); j++){
        System.out.print(NodeInformation);
        nodes++;
    }
    if(nodes>maxNodes){
        index = i;
        maxNodes = nodes;
    }
    System.out.println();
}

Этот пример кода определит, какая строка будет содержать наибольшее количество объектов Node.

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