算法与数据结构:散列表的Java实现

Posted 小乖乖的臭坏坏

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了算法与数据结构:散列表的Java实现相关的知识,希望对你有一定的参考价值。


例子:假设有一个数组{2,18,15,28},现在要把他们存入散列表,并且要根据散列表判断某一个元素是否在数组中出现。

代码:

public class HashSearch {

    public static void main(String[] args) {
        int m = 13;
        int[] arr = new int[]{2,18,15,28};
        int[] hash_table = new int[m];
        for(int i=0;i<m;i++){
            hash_table[i] = Integer.MIN_VALUE;
        }
        for(int i=0;i<arr.length;i++){
            int temp = insert(hash_table, arr[i]);
            hash_table[temp] = arr[i];
        }

        System.out.println("打印散列表:");
        for(int i=0;i<m;i++){
            System.out.print(hash_table[i] + " ");
        }

        int test_number = 18;
        System.out.println("\\n" + test_number + "在数组中是否存在?\\n" + (search(hash_table, test_number) != Integer.MIN_VALUE));
        test_number = 9;
        System.out.println("\\n" + test_number + "在数组中是否存在?\\n" + (search(hash_table, test_number) != Integer.MIN_VALUE));
    }

    public static int h1(int key){
        return (key % 13);
    }

    public static int h2(int key){
        return 1 + (key % (13-1));
    }

    public static int h(int key, int i){
        return (h1(key + i * h2(key)) % 13);
    }

    public static int insert(int[] T, int key){
        int i=0;
        while(true){
            int j = h(key, i);
            if(T[j]==Integer.MIN_VALUE){
                T[j] = key;
                return j;
            }
            else{i++;}
        }
    }

    public static int search(int[] T, int key){
        int i = 0;
        while(true){
            int j = h(key, i);
            if(T[j] == key){
                return j;
            }
            else if(T[j] == Integer.MIN_VALUE || i >= 13){
                return Integer.MIN_VALUE;
            }
            else {i++;}
        }
    }
}

输出:

打印散列表:
-2147483648 -2147483648 2 -2147483648 -2147483648 18 15 28 -2147483648 -2147483648 -2147483648 -2147483648 -2147483648 
18在数组中是否存在?
true

9在数组中是否存在?
false

以上是关于算法与数据结构:散列表的Java实现的主要内容,如果未能解决你的问题,请参考以下文章

Java数据结构与算法解析——散列表

数据结构和算法篇——散列表

《数据结构与算法之美》15——散列表如何实现工业级别的散列表

数据结构与算法—散列表

JavaScript数据结构与算法 - 散列表

Java数据结构与算法——哈希表