Java哈希表

哈希

主要用于快速查找、存储和比较数据。哈希的核心在于哈希函数(Hash Function),它将输入(通常称为键,key)映射到一个固定范围的输出值,这个输出值称为哈希值(Hash Value)或哈希码。

HashMap

HashMap<Integer, String> hashmap= new HashMap<Integer, String>();

增:

hashmap.put(1, "string1"); // 执行完后hash表内为{1=string1}
hashmap.put(2, "string2"); // 执行完后hash表内为{1=string1, 2=string2}
hashmap.put(2, "string2"); // 执行完后hash表内为{1=string1, 2=string2, 3=string3}

删:

hashmap.remove(1); // 执行完后hash表内为{2=string2, 3=string3}
hashmap.remove(2); // 执行完后hash表内为{3=string3}
hashmap.remove(3); // 执行完后hash表内为{}
// 删除所有键值对
hashmap.clear();

查:

复制代码
package runtime;
 
import java.util.HashMap;
 
public class Goat {    //代码示例3
    public static void main(String[] args) {
        
        HashMap<String, Integer> map = new HashMap<String, Integer>();
        map.put("Tom", 100);
        map.put("Tom", 0);
        int score = map.get("Tom");// 获取key对应的value
        System.out.println(score);// key不允许重复,若重复,则覆盖已有key的value
 
    }
}
复制代码

替换:

hashmap.replace(key,value); // 返回0

大小:

size()  返回Map集合中数据数量,准确说是返回key-value的组数。

复制代码
package runtime;
 
import java.util.HashMap;
 
public class Goat {    //代码示例4
    public static void main(String[] args) {
        
        HashMap<String, Integer> map = new HashMap<String, Integer>();
        map.put("Tom", 100);
        map.put("Jim", 90);
        map.put("Sam", 91);
        System.out.println(map.size());
        
    }
}
复制代码

 HashSet

Set<Integer> hashset= new HashSet<Integer>();

增:

hashset.add(1);
int[] nums = new int[]{1,2,3,4,5,6}
for(int x : nums) hash.add(x);

判断元素是否存在:

hashset.contains(1);

删:

hashset.remove(1);
// 删除所有元素
hashset.clear();

转换为数组

HashSet<Integer> set = new HashSet();
int[] a = set.stream().mapToInt(Integer::intValue).toArray()

 对比

 

HashSet学习总结

HashSet是Java集合框架中实现Set接口的一个重要类,它提供了一种无序且不重复元素的集合。HashSet的核心特点是:

不重复性:HashSet不允许存储重复的元素,这是通过调用元素的hashCode()和equals()方法来确保的。这两个方法共同决定元素的唯一性。
无序性:HashSet不保证元素的插入顺序,遍历HashSet时得到的顺序可能与插入顺序不同。
基于HashMap实现:HashSet实际上是对HashMap的一种包装,它将元素作为HashMap的键,而值统一设为一个固定对象(如PRESENT常量),从而达到只关心键的目的。
性能优势:得益于HashMap的哈希表实现,HashSet提供了高效的添加、删除和查找操作,平均时间复杂度接近O(1)。
注意事项:使用自定义对象作为HashSet的元素时,必须重写hashCode()和equals()方法,确保逻辑上相同(根据业务定义)的对象具有相同的哈希值和相等性判断。
HashMap学习总结

HashMap是Java中最常用的键值对集合,它实现了Map接口,提供了一种快速存取键值对的方式。HashMap的主要特征有:

键值对存储:每个元素由一个键和一个值组成,键是唯一的,值可以重复。
哈希表结构:内部使用哈希表实现,通过哈希函数将键映射到数组的特定索引,解决冲突的方法是链地址法(JDK 7及以前是链表,JDK 8引入了链表/红黑树的结构转换)。
线性探测法和扩容:当哈希碰撞导致冲突时,通过开放寻址法(如线性探测)或链表/红黑树解决。当HashMap的填充程度达到一定阈值(由负载因子控制,默认0.75),会触发扩容,以保持高效性能。
线程不安全:HashMap在多线程环境下不是线程安全的,若在并发环境中使用,推荐使用ConcurrentHashMap。
null值处理:HashMap允许一个null键和多个null值,这是与某些其他集合类不同的地方。

posted on   gjwqz  阅读(82)  评论(0编辑  收藏  举报

相关博文:
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· AI 智能体引爆开源社区「GitHub 热点速览」
· 写一个简单的SQL生成工具
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

统计

点击右上角即可分享
微信分享提示