`

散列以及在java集合类中的应用

阅读更多

        散列是无需查找,只用元素的查找键来确定元素索引的方法。散列函数就是一种用来实现散列的函数,它接受一个查找键,计算出该键的散列码,然后再将此散列码压缩到散列表的范围内。在用散列来实现某种数据结构的时候,往往会遇到冲突的情况(不同的查找键有相同的散列码)此时就需要我们去处理冲突,而处理冲突的方法有两种:

  第一种:使用散列表的另一个位置。这里又可以采用三种不同的方法:

        1 : 线性探测开放定址法。此方法会导致一次聚集。

        2 ; 二次探测开放定址法。此方法会导致二次聚集。

        3 : 双散列开放定址法 。使用次方时要保证散列表元素是素数。因为只有这样才能探测到散列表中的所有位置。并且可以使元素均匀的分布到散列表中,避免了聚集。

  第二种:利用桶来处理冲突

        此方法要用到桶这个东东,桶一般用链表来实现,因为这样可以节约内存。此时的方法也可以叫链地址法。JAVA中的HashMap就是用桶来处理冲突的。

        散列里还有一个重要的概念就是装填因子。它是一个浮点数。在具体实现中,它是所有元素的个数与散列表位置的比值。它主要是用来决定是否要再散列的。不过在具体实现中要尽量避免再散列。在散列的开销很大。装填因子它也从一个侧面表示了程序中速度相对于内存使用的重要性:如果值低就表示注重的是速度,如果值高就表示注重的是内存的使用。不过无论采用何种处理冲突的方法,装填因子都有一个限制,对于第一种来说,规定装填因子要小于0.5,而对于第二种要求装填因子要小于1.0.

        JAVA中的很多集合类使用了散列这种方法。HashMap就是其中之一。并且HashSet底层也是用HashMap来存储它的元素,因为用到了散列,所以这两种集合类都不能保证元素的添加顺序。此外在对HashMap和HashSet操作时,特别注意两个方法:equals()和hasCode(),List接口用equals()来判断两个元素是否相同。而HashSet首先用hasCode()来算出两个元素的哈希吗,如果哈希吗不同,则两元素不同。如果哈希吗相同,那么就要用equals()方法来判断两个元素是否相同,如果equals()返回真,则相同,否则不相同。这就要求当我们的equals()方法返回真时,一定要保证这两个对象有相同的哈希吗。

                   

分享到:
评论

相关推荐

    JAVA集合类应用[借鉴].pdf

    总的来说,选择Java集合类取决于具体的应用场景,包括预期的数据量、是否需要排序、是否需要线程安全以及对性能的需求。了解每种集合类的特性和实现原理可以帮助开发者做出最佳选择。在实际编程中,开发者还应该关注...

    java集合框架的使用。集合的运算

    在这个“java集合框架的使用”主题中,我们将深入探讨如何利用Java集合框架进行基本的集合运算,包括散列集合、求子集以及集合的交和并。 首先,我们要理解Java集合框架的基本层次结构。它主要包括接口(如List、...

    Java集合框架总结

    本文档将深入探讨Java集合框架的关键组成部分、它们之间的关系以及如何有效地使用它们。 #### 二、Java集合框架结构 Java集合框架的核心部分包括以下几类: - **集合接口**:主要包括`Collection`、`Set`、`List`...

    java Date类和集合

    Java中的`Date`类和集合类是编程中非常基础且重要的概念。`Date`类主要用于处理日期和时间,而集合类则提供了存储和操作对象的容器。在这篇笔记中,我们将深入探讨这两个主题。 首先,`java.util.Date`类虽然在Java...

    Java集合详解

    了解这些集合类的工作原理和使用场景,可以帮助开发者在不同应用场景下选择最合适的集合类来存储数据。 在实际编程中,集合的使用非常频繁,如存储用户信息、商品信息等。由于数组的长度是固定的,当数组中已存储的...

    Java集合面试题 52道

    "Java集合面试题 52道" Java 集合框架是 Java 编程语言中的一种重要组件,它提供了一种方便的方式来存储和操作数据。在 Java 中,集合框架主要有三种类型:Set、List 和 Map,这三种类型的集合框架都有其特点和应用...

    java 集合 分析比较

    Java集合框架(Java Collection Framework)是Java标准库中的一个重要组成部分,它提供了一系列用于存储和操作数据的接口及实现类。通过合理选择不同的集合类型,可以有效地提高程序的运行效率和可维护性。 #### 二...

    Java集合框架常见面试题夜间阅读版.pdf

    这些知识点主要涉及Java集合框架中的各种数据结构,如List、Set、Map等,并深入探讨了它们在实际应用中的特性与用途。 ### Java集合框架简介 Java集合框架是Java标准库的一个组成部分,它为存储和操作对象提供了...

    Java集合框架

    Java集合框架是Java编程语言中用于处理数据结构的基础框架,它为程序员提供了大量集合类,用于存储和操作对象集合。Java集合框架不仅提高了数据处理效率,还简化了数据结构的操作,使得Java程序在处理大量数据时能够...

    java集合对象

    ### Java集合对象详解 #### 一、集合对象概述 在Java编程中,集合对象是一种非常重要的数据结构,它主要用于存储和操作多个数据项。与数组相比,集合对象提供了更多的灵活性和功能,例如动态调整大小的能力以及...

    Java Collections 作者 APress

    6. 高级集合特性:Java集合框架提供了一些高级特性,比如并发集合类(如ConcurrentHashMap和CopyOnWriteArrayList)适用于多线程环境,以及使用泛型来增强类型安全。 7. 集合框架的扩展:除了JDK自带的集合类,...

    JAVA泛型与集合框架PPT课件PPT学习教案.pptx

    在Java中,集合框架是指Java提供的一些实现常见数据结构的类,如链表、堆栈、散列映射、树集、树映射等。这些类称作Java集合框架。在JDK1.5后,Java集合框架开始支持泛型。 Java集合框架的主要组成部分包括...

    Java容器类学习心得.pdf

    总结以上,学习Java容器类对于深入理解Java集合框架,以及在实际开发中选择合适的数据结构来处理数据具有重要意义。通过理解各个接口和实现类的特性和用途,我们可以更加高效地利用Java集合框架来满足软件开发中的...

    java数据结构知识点集合.doc

    ### Java 数据结构知识点详解 #### 一、概述 在 Java 中,数据结构是程序设计的基础之一,对于构建高效、可维护...这些新的数据结构在现代 Java 应用程序开发中得到了广泛应用,是学习 Java 数据结构的重要组成部分。

    java数据结构课件与分析

    Java是一种广泛使用的编程语言,尤其在企业级应用和服务器端开发中占据主导地位。数据结构是计算机科学的基础,它涉及到如何有效地存储和组织数据,以便进行高效的操作。在Java中,理解和掌握数据结构对于编写高性能...

    js 集合类实现 (HashMap, Set, ArrayList, etc.)

    本篇文章将深入探讨JavaScript中的HashMap、Set和ArrayList等集合类的实现,并与Java中的相应概念进行对比,帮助开发者更好地理解和应用这些数据结构。 **1. HashMap** 在Java中,HashMap是一个散列映射容器,它...

    Java笔记-集合与算法

    本文主要介绍了Java集合框架中的核心概念,包括集合接口、集合实现以及相关的算法。理解这些概念对于开发高效、可靠的Java应用程序至关重要。此外,还讨论了集合与数组之间的转换方法以及常用的排序算法和二分查找...

    java工具类

    下面我们将深入探讨日期工具、字符串工具类以及加密解密工具类在Java中的应用。 1. **日期工具**: Java中,`java.util.Date`和`java.util.Calendar`是处理日期和时间的基本类,但它们的API设计并不直观。因此,...

Global site tag (gtag.js) - Google Analytics