`
ldb19890624
  • 浏览: 243569 次
  • 性别: Icon_minigender_1
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

Java编程中的HashSet和BitSet

 
阅读更多

作者:chszs,转载需注明。
作者博客主页:http://blog.csdn.net/chszs

我在Apache的开发邮件列表中发现一件很有趣的事,Apache Commons包的ArrayUtils类的removeElements方法,原先使用的HashSet现在换成了BitSet。

HashSet<Integer> toRemove = new HashSet<Integer>();
for (Map.Entry<Character, MutableInt> e : occurrences.entrySet()) {
    Character v = e.getKey();
    int found = 0;
    for (int i = 0, ct = e.getValue().intValue(); i < ct; i++) {
        found = indexOf(array, v.charValue(), found);
        if (found < 0) {
            break;
        }
        toRemove.add(found++);
    }
}


return (char[]) removeAll((Object)array, extractIndices(toRemove));

作者:chszs,转载需注明。作者博客主页:http://blog.csdn.net/chszs

新代码如下:

BitSet toRemove = new BitSet();
for (Map.Entry<Character, MutableInt> e : occurrences.entrySet()) {
    Character v = e.getKey();
    int found = 0;
    for (int i = 0, ct = e.getValue().intValue(); i < ct; i++) {
        found = indexOf(array, v.charValue(), found);
        if (found < 0) {
            break;
        }
        toRemove.set(found++);
    }
}
return (char[]) removeAll(array, toRemove);

为什么会使用BitSet代替HashSet呢?

据Apache Commons作者指出,这样代码执行时可以占用更少的内存,速度也更快。




分享到:
评论

相关推荐

    Java编程中的HashSet和BitSet详解

    Java编程中的HashSet和BitSet详解 HashSet和BitSet是Java编程中两个常用的集合类,它们都可以用来存储大量的数据,但它们之间有着明显的差异。那么,为什么Apache Commons作者选择使用BitSet代替HashSet呢?在本文...

    Java海量数据处理BitSetmd,学习代码d

    在Java编程中,处理海量数据是一项常见的挑战,尤其是在大数据领域。BitSet是Java提供的一种高效的数据结构,用于存储和操作位集合,它非常适合处理大规模的数据,尤其当数据集中的元素是二进制状态(如存在或不存在...

    java.util包

    Java.util包是Java标准库中的核心包之一,它包含了大量用于通用编程的类和接口,是Java开发中不可或缺的一部分。这个包提供了数据结构、集合框架、事件处理、日期时间、随机数生成、位集以及与I/O流操作相关的辅助...

    java常用类库手册

    - **java.lang.\***:Java编程语言的基本类库。 - **java.math.\***:提供了整数算术和十进制算术的基本函数。 - **java.rmi**:提供了与远程方法调用相关的所有类。 - **java.net**:提供了用于实现网络通信应用的...

    从DELPHI到JAVA转换.docx

    而在Java中,集合使用BitSet、HashSet、TreeSet等类,例如:`BitSet option = new BitSet();option.set('a');option.set('b');`。需要注意的是,在Java中,集合元素必须唯一,每个元素都必须定义equals函数和...

    java.util包总结

    Java.util包是Java标准库中的核心包之一,它包含了大量用于日常编程的工具类和接口。这个包在Java 2版本中得到了显著增强,引入了许多重要的数据结构和算法,为Java程序员提供了更丰富的功能。 首先,Java.util包中...

    apriori的JAVA代码

    在Java中实现这些步骤时,可以使用数据结构如ArrayList、HashSet或BitSet来存储项集和候选集,以优化内存使用和查找效率。此外,为了提高性能,可以考虑使用多线程或者并行计算框架如Apache Spark来并行处理大型数据...

    最最适用的java数据结构全集

    Java数据结构是编程基础知识的重要组成部分,对于理解和优化程序性能至关重要。在这个“最最适用的Java数据结构全集”中,你将找到一系列关于如何在Java中实现和使用各种数据结构的源代码。让我们深入探讨一下这些...

    (java)指定范围的,不重复的随机数

    在Java编程语言中,生成指定范围内的不重复随机数是一个常见的需求,这通常涉及到数组、集合、以及随机数生成器的使用。以下是一些相关的知识点: 1. **Random类**: Java中的`java.util.Random`类是用于生成...

    apriori算法Java代码

    在Java中实现这个过程,需要考虑性能优化,例如使用BitSet或HashSet等高效数据结构来存储项集和候选集,减少不必要的遍历操作。同时,通过并行化处理或多线程技术,可以加速算法的执行。 在给定的文件"apriori"中,...

    基本基于java的数据结构.zip

    在Java编程语言中,数据结构是程序设计的基础,它涉及到如何高效地存储和组织数据,以便于访问和操作。这个“基本基于Java的数据结构.zip”压缩包可能包含了一系列关于Java实现常见数据结构的代码示例或教程。让我们...

    java学习手册

    `java.util`包的集合框架是理解和使用Java面向对象编程的重要一环,而`java.io`包则涉及程序与外部世界交互的基本方式,对于处理文件、网络通信、数据持久化等场景尤其重要。 学习手册可能还会涵盖其他关键话题,...

    JAVA--基础知识[归纳].pdf

    Java编程语言的基础知识涵盖了许多方面,这里我们主要关注的是`java.util`包,这是一个非常重要的工具类库,提供了丰富的数据结构和实用方法。在Java开发中,`java.util`包几乎无处不在,它包含了处理日期时间、...

    JBuider第七章:Java.util包.rar

    Java.util包是Java编程语言中的核心包之一,它包含了大量用于日常编程的类和接口,是Java程序员必备的知识点。本教程重点讲解了Java.util包中的主要组件和使用方法,旨在帮助初学者深入理解并熟练运用这个包。 1. *...

    28个java常用的工具类

    Java编程语言中有许多实用的工具类,它们提供了一种便捷的方式来执行常见的编程任务,从而提高开发效率。在本文中,我们将深入探讨28个常用的Java工具类,这些工具类广泛存在于Java的`java.util`包和其他相关包中。...

    Java的数据结构

    本章节将深入讲解Java中的数组以及Java集合框架,后者作为Java编程的重要组成部分,包含了各种接口和其实现类,如`Set`、`List`和`Map`等。我们还将探索集合框架提供的算法支持,如排序和查找等操作,并回顾早期Java...

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

    本文将详细介绍 Java 中的传统数据结构接口和类,包括枚举(Enumeration)、位集合(BitSet)、向量(Vector)、栈(Stack)、字典(Dictionary)、哈希表(Hashtable)以及属性(Properties)。此外,还将简要介绍 ...

    java实用工具类

    在Java编程中,`java.util`包是一个非常重要的工具类库,它包含了处理各种常见任务的类和接口。这个包提供了丰富的数据结构和算法,如日期和时间处理、集合框架、事件模型、国际化和资源管理等。以下是一些关键知识...

    面试java高级技术总结.pdf

    4. **集合框架**:集合是Java中存储多个对象的容器,包括接口(如`List`, `Set`, `Map`)和实现(如`ArrayList`, `LinkedList`, `HashSet`, `HashMap`等)。数组列表(ArrayList)是基于动态数组实现的,插入和删除...

Global site tag (gtag.js) - Google Analytics