为每个索引+ toString计数节点

时间:2019-09-21 22:55:20

标签: java hashmap

所以我想知道是否有一种方法可以打印出列表中哪个索引冲突最多?除此之外,我想知道,为我的LinkedList生成toString()的最佳方法是什么?我已经尝试过几次使用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 :(得分:0)

类是对象。 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对象。