数据结构之哈希

HashMap是Java语言中的一个重要数据结构,它实现了Map接口,允许你将键映射到值。HashMap是非线程安全的,它允许使用null作为键或值。无序存储,能放引用类型。

HashMap的工作原理是使用哈希表(Hash table)来存储键值对。在HashMap中,每个键值对被存储为一个桶(bucket),这些桶被组织成一个链表或其他数据结构。当你尝试获取或插入一个键值对时HashMap使用键的哈希码(hash code)来确定应该将该键值对存储在哪个桶中。

以下是HashMap的一些主要特点:

  1. 允许使用null作为键或值。
  2. 不保证键值对的顺序,特别是TreeMap会按照键的自然顺序进行排序。
  3. 是非线程安全的,这意味着多个线程同时修改HashMap时可能会导致数据不一致。
  4. 允许使用任何对象作为键,不仅限于字符串。
  5. 在大多数情况下,HashMap比Hashtable更快,因为Hashtable是线程安全的。
  6. HashMap没有限制,可以存储任意数量的元素。
  7. HashMap实现了Serializable接口,因此可以将对象序列化并传输到其他Java虚拟机中。

下面是一个简单的例子,演示如何使用HashMap:

import java.util.HashMap;  
import java.util.Map;    
public class HashMapExample {      
    public static void main(String[] args) {          
    // 创建一个HashMap对象          
    Map map = new HashMap<>();            
    // 向HashMap中插入键值对          
    map.put("apple", 1);          
    map.put("banana", 2);          
    map.put("orange", 3);            
    // 获取键对应的值          
    int value = map.get("banana");          
    System.out.println("Value of banana: " + value); // 输出: Value of banana: 2            
    // 遍历HashMap中的所有键值对          
    for (Map.Entry entry : map.entrySet()) {              
        System.out.println("Key: " + entry.getKey() + ", Value: " + entry.getValue());          
       }      
   } 
}

哈希表

public class Hash {
    public int id;
    public String name;
    public Hash next;

    public Hash(int id, String name) {
        this.id = id;
        this.name = name;
    }
}
public class HaXiLinkList {
    public Hash head;

    //添加
    public void add(Hash person){
        if(head == null){
            head = person;
            return;
        }
        Hash index = head;
        while(index.next!=null){
            index=index.next;
        }
        index.next = person;
    }

    //遍历
    public void list(int i){
        if(head==null){
            System.out.println("第"+i+"条链表为空");
            return;
        }
        Hash index = head;
        System.out.println("这是第"+i+"条链表");
        while(index!=null){
            System.out.println("id: "+index.id+"; name: "+index.name);
            index = index.next;
        }
    }
}
public class HashTab {
    public HaXiLinkList[] arr;
    public int size;

    public HashTab(int size) {
        this.size = size;
        arr = new HaXiLinkList[size];
        for(int i=0; i
public class Test {
    public static void main(String[] args){
        HashTab hashTab = new HashTab(8);
        Hash p1 = new Hash(14,"张三");
        Hash p2 = new Hash(32,"李三");
        Hash p3 = new Hash(31,"王三");
        Hash p4 = new Hash(46,"徐三");
        Hash p5 = new Hash(50,"刘三");
        Hash p6 = new Hash(63,"周三");
        Hash p7 = new Hash(75,"陈三");
        Hash p8 = new Hash(81,"赵三");
        hashTab.add(p1);
        hashTab.add(p2);
        hashTab.add(p3);
        hashTab.add(p4);
        hashTab.add(p5);
        hashTab.add(p6);
        hashTab.add(p7);
        hashTab.add(p8);
        hashTab.list();
}

//输出结果
这是第0条链表
id: 32; name: 李三
这是第1条链表
id: 81; name: 赵三
这是第2条链表
id: 50; name: 刘三
这是第3条链表
id: 75; name: 陈三
第4条链表为空
第5条链表为空
这是第6条链表
id: 14; name: 张三
id: 46; name: 徐三
这是第7条链表
id: 31; name: 王三
id: 63; name: 周三

你可能感兴趣的:(数据结构,哈希算法,算法)