java查找算法:二分查找、哈希查找等

简介: java查找算法:二分查找、哈希查找等

Java中的查找算法主要包括二分查找(Binary Search)和哈希查找(Hashing)。这两种算法都是基于特定数据结构的高效查找方法。以下是它们在Java中的实现示例。

二分查找

二分查找是一种在已排序数组中查找元素的搜索算法。它将数组分为两个部分,每次比较中间元素与目标值,然后根据比较结果决定在左半部分还是右半部分继续查找。

public class BinarySearch {
   
    public static int binarySearch(int[] arr, int target) {
   
        int left = 0;
        int right = arr.length - 1;

        while (left <= right) {
   
            int mid = left + (right - left) / 2;

            if (arr[mid] == target) {
   
                return mid;
            } else if (arr[mid] < target) {
   
                left = mid + 1;
            } else {
   
                right = mid - 1;
            }
        }

        // 如果未找到目标元素,则返回-1
        return -1;
    }
}

哈希查找

哈希查找利用哈希函数将键映射到哈希表中的位置,从而快速查找或插入元素。哈希函数应该尽量减少冲突,并且哈希表需要支持动态调整大小以保持良好的性能。

以下是一个简单的哈希表实现:

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

public class HashTable<K, V> {
   
    private final Map<K, List<V>> map;

    public HashTable() {
   
        this.map = new HashMap<>();
    }

    public void put(K key, V value) {
   
        map.computeIfAbsent(key, k -> new ArrayList<>()).add(value);
    }

    public boolean containsKey(K key) {
   
        return map.containsKey(key);
    }

    public List<V> get(K key) {
   
        return map.getOrDefault(key, List.of());
    }
}

在这个实现中,我们使用了Java内置的HashMap来存储键值对。每个键对应的值是一个列表,因为一个键可能对应多个值。通过put方法可以插入键值对,通过containsKey检查键是否存在,通过get获取与给定键关联的所有值。

请注意,以上哈希表实现不考虑删除操作以及解决哈希冲突的方法。在实际应用中,你可能需要选择更复杂的哈希表实现,如Open Addressing、Separate Chaining等策略来处理冲突。

相关文章
|
2月前
|
存储 人工智能 算法
数据结构与算法细节篇之最短路径问题:Dijkstra和Floyd算法详细描述,java语言实现。
这篇文章详细介绍了Dijkstra和Floyd算法,这两种算法分别用于解决单源和多源最短路径问题,并且提供了Java语言的实现代码。
89 3
数据结构与算法细节篇之最短路径问题:Dijkstra和Floyd算法详细描述,java语言实现。
|
2月前
|
存储 算法 Java
解析HashSet的工作原理,揭示Set如何利用哈希算法和equals()方法确保元素唯一性,并通过示例代码展示了其“无重复”特性的具体应用
在Java中,Set接口以其独特的“无重复”特性脱颖而出。本文通过解析HashSet的工作原理,揭示Set如何利用哈希算法和equals()方法确保元素唯一性,并通过示例代码展示了其“无重复”特性的具体应用。
50 3
|
2月前
|
Java 开发者
在Java的集合世界里,Set以其独特的特性脱颖而出,它通过“哈希魔法”和“红黑树防御”两大绝技
【10月更文挑战第13天】在Java的集合世界里,Set以其独特的特性脱颖而出。它通过“哈希魔法”和“红黑树防御”两大绝技,有效抵御重复元素的侵扰,确保集合的纯洁性和有序性。无论是“人海战术”还是“偷梁换柱”,Set都能从容应对,成为开发者手中不可或缺的利器。
32 6
|
2月前
|
Java
在 Java 中实现二分查找法
【10月更文挑战第9天】
33 1
|
2月前
|
存储 算法 C#
C#哈希查找算法
C#哈希查找算法
|
2月前
|
算法 C# 索引
C#二分查找算法
C#二分查找算法
|
2月前
|
算法 Java
java冒泡排序与二分查找(详解)
java冒泡排序与二分查找(详解)
40 4
|
2月前
|
算法 搜索推荐 Java
java 后端 使用 Graphics2D 制作海报,画echarts图,带工具类,各种细节:如头像切割成圆形,文字换行算法(完美实验success),解决画上文字、图片后不清晰问题
这篇文章介绍了如何使用Java后端技术,结合Graphics2D和Echarts等工具,生成包含个性化信息和图表的海报,并提供了详细的代码实现和GitHub项目链接。
128 0
java 后端 使用 Graphics2D 制作海报,画echarts图,带工具类,各种细节:如头像切割成圆形,文字换行算法(完美实验success),解决画上文字、图片后不清晰问题
|
2月前
|
存储 算法 C语言
【C语言】二分查找算法
【C语言】二分查找算法
|
2月前
|
算法 Java Linux
java制作海报一:java使用Graphics2D 在图片上写字,文字换行算法详解
这篇文章介绍了如何在Java中使用Graphics2D在图片上绘制文字,并实现自动换行的功能。
133 0