Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/360.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 计算每个索引的节点数+;托斯特林_Java_Hashmap - Fatal编程技术网

Java 计算每个索引的节点数+;托斯特林

Java 计算每个索引的节点数+;托斯特林,java,hashmap,Java,Hashmap,所以我想知道是否有一种方法可以打印出列表中哪个索引冲突最多?除此之外,我还想知道,为我的LinkedList生成toString()的最佳方法是什么?我已经尝试了几次LinkedList toString的默认实现,但我不太明白如何实现它 提前谢谢 代码: 静态LinkedList哈希表[]=新建LinkedList[100]; 静态类节点{ int值; int键; @凌驾 公共字符串toString(){ 返回“值:”+值+“+”键:“+键; } } 公共静态void main(字符串[]ar

所以我想知道是否有一种方法可以打印出列表中哪个索引冲突最多?除此之外,我还想知道,为我的LinkedList生成toString()的最佳方法是什么?我已经尝试了几次LinkedList toString的默认实现,但我不太明白如何实现它

提前谢谢

代码:

静态LinkedList哈希表[]=新建LinkedList[100];
静态类节点{
int值;
int键;
@凌驾
公共字符串toString(){
返回“值:”+值+“+”键:“+键;
}
}
公共静态void main(字符串[]args)引发FileNotFoundException{
文件f=新文件(“Ex5.txt”);
扫描仪扫描=新扫描仪(f);
如果(f.exists()==false){
System.out.println(“文件不存在或找不到”);
系统出口(0);
}
对于(int i=0;i<100;i++){
哈希表[i]=null;
}
while(scan.hasNextInt()){
int n=scan.nextInt();
插入(n,hashFunction(n));
}
对于(int i=0;i<100;i++){
System.out.println(哈希表[i]);
}
int emptyEntries=0;
对于(int i=0;i<100;i++){
if(哈希表[i]==null){
空入口+=1;
}
}
System.out.println(“空条目数:“+emptyEntries”);
}
公共静态void插入(int键,int值){
int index=hashFunction(值);
LinkedList items=哈希表[索引];
if(items==null){
items=newlinkedlist();
节点项=新节点();
item.key=key;
项目价值=价值;
项目。添加(项目);
哈希表[索引]=项;
}否则{
用于(节点项:项){
如果(item.key==key){
项目价值=价值;
返回;
}
}
节点项=新节点();
item.key=key;
项目价值=价值;
项目。添加(项目);
}
}
公共静态int哈希函数(int值){
int hashKey=值%100;
返回hashKey;
}

类是对象。LinkedList是一个类。所有对象都扩展了java.lang.Object,您始终可以对它们调用
Object.toString()
,但您可能要寻找的是打印所有值的方法。在这种情况下,最好使用for循环:


for(int i=0;iYou在哈希表存在时使用LinkedList作为哈希表。为什么?根据我的作业要求,除了LinkedList+文件开启器/读取器之外,我不能使用任何库,我应该提到这一点。抱歉。
file f=new file(“Ex5.txt”);
您尝试在创建后立即读取此空文件。您将不会得到任何输入。哦,我忘了,它在我的计算机上,但每行上只有一个随机整数,共100行。如果您想测试代码,您可以少做几行,效果相同。下次,请在代码中添加更多注释,以突出显示响应的代码部分对于这个问题,我负责重要的任务。就我个人而言,我很难理解你的代码。这不是我想要的,我需要找到哈希表的哪个索引[]拥有最多的冲突,也有很多冲突。除此之外,我认为Object.toString不起作用,因为我必须打印数组实例而不是对象。这些值仍然打印得很奇怪。首先,(你的单词经过0次修改)
还有,我想知道,生成toString()的最佳方法是什么对于我的LinkedList?
冲突是什么意思?我如何准确地找到与代码中信息的冲突?如果我最初发布的代码是运行的,那么数组将被打印出来,每行有多个节点,我需要找到一种方法来打印/找到其中节点最多的一个。更新:我设法获得了toString()通过为节点本身实现它来工作。错过了这个想法lol。
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;
}