标签: hashset

67
推荐指数
4
解决办法
3万
查看次数

HashSet removeAll方法非常慢

我有一个集合 - 一个HashSet我想从中删除一些项目......"removals"集合中的所有项目都不在原始集合中.

我在命令行中指定"source"集的大小和"removals"集合的大小,并构建它们.源集仅包含非负整数; 删除集仅包含负整数.我测量使用System.currentTimeMillis()移除所有元素所需的时间,这不是世界上最准确的秒表,但在这种情况下绰绰有余,正如您将看到的那样.这是代码:

import java.util.*;
public class Test 
{ 
    public static void main(String[] args) 
    { 
       int sourceSize = Integer.parseInt(args[0]); 
       int removalsSize = Integer.parseInt(args[1]); 

       Set<Integer> source = new HashSet<Integer>(); 
       Collection<Integer> removals = new ArrayList<Integer>(); 

       for (int i = 0; i < sourceSize; i++) 
       { 
           source.add(i); 
       } 
       for (int i = 1; i <= removalsSize; i++) 
       { 
           removals.add(-i); 
       } 

       long start = System.currentTimeMillis(); 
       source.removeAll(removals); 
       long end = System.currentTimeMillis(); 
       System.out.println("Time taken: " + (end - start) + "ms"); 
    }
}
Run Code Online (Sandbox Code Playgroud)

让我们从一个简单的工作开始: …

java collections performance hashset

64
推荐指数
1
解决办法
9824
查看次数

TreeSet 是否可能等于 HashSet 但 HashSet 不等于 TreeSet

我今天接受了采访,接受采访的人对他的陈述感到困惑,询问是否可能TreeSet等于HashSet但不HashSet等于TreeSet。我说“不”,但据他说,答案是“是”。

怎么可能?

java collections hashset treeset

64
推荐指数
3
解决办法
1924
查看次数

HashSet是否保留了插入顺序?

HashSet.NET 3.5中引入的集合在使用迭代时是否保留了插入顺序foreach

文件指出,该集合没有排序,但它并没有说明插入顺序什么.预发布的BCL 博客条目表明它是无序的,但是本文声明它旨在保留插入顺序.我的有限测试表明,该顺序得以保留,但这可能是巧合.

.net hashset

62
推荐指数
4
解决办法
3万
查看次数

使HashSet <string>不区分大小写

我有HashSet参数的方法.我需要在其中做不区分大小写的包含:

public void DoSomething(HashSet<string> set, string item)
{
    var x = set.Contains(item);
    ... 
}
Run Code Online (Sandbox Code Playgroud)

是否可以使现有的HashSet不区分大小写(不创建新的)?

我正在寻找具有最佳性能的解决方案.

编辑

包含可以多次调用.因此,由于性能低于本机HashSet Contains方法,IEnumerable扩展对我来说是不可接受的.

既然,回答我的问题是NO,那是不可能的,我已经创建并使用了以下方法:

public HashSet<string> EnsureCaseInsensitive(HashSet<string> set)
{
    return set.Comparer == StringComparer.OrdinalIgnoreCase
           ? set
           : new HashSet<string>(set, StringComparer.OrdinalIgnoreCase);
}
Run Code Online (Sandbox Code Playgroud)

.net c# hashset

62
推荐指数
2
解决办法
2万
查看次数

为什么java.util.HashSet没有get(Object o)方法?

我已经看到了有关Set根据索引值获取对象的其他问题,我理解为什么这是不可能的.但我无法找到一个很好的解释为什么不允许通过对象获取,所以我想问.

HashSetHashMap得到一个对象的支持应该非常简单.就像现在一样,似乎我必须遍历每个项目HashSet并测试相等,这似乎是不必要的.

我可以使用一个,Map但我不需要一个键:值对,我只需要一个Set.

比如说我有Foo.java:

package example;

import java.io.Serializable;

public class Foo implements Serializable {

    String _id;
    String _description;

    public Foo(String id){
        this._id = id
    }

    public void setDescription(String description){
        this._description = description;
    }

    public String getDescription(){
        return this._description;
    }

    public boolean equals(Object obj) {
        //equals code, checks if id's are equal
    }

    public int hashCode() {
        //hash code calculation
    }

}
Run Code Online (Sandbox Code Playgroud)

并且Example.java:

package example;

import java.util.HashSet; …
Run Code Online (Sandbox Code Playgroud)

java hashset

58
推荐指数
4
解决办法
8万
查看次数

什么是相当于C#HashSet的JavaScript?

我有几千个整数键的列表.我需要对此列表执行的唯一操作是说明给定值是否在列表中.

对于C#,我会用a HashSet来快速查找.什么是JavaScript等价物?


最低支持级别:IE 9 +,jQuery(当前)

javascript jquery hashset

58
推荐指数
4
解决办法
5万
查看次数

是否应该允许在Java中将HashSet添加到自身?

根据Java in Set的合同,"不允许集合将自己包含为元素"(来源).但是,对于HashSet of Objects,这是可能的,如下所示:

Set<Object> mySet = new HashSet<>();
mySet.add(mySet);
assertThat(mySet.size(), equalTo(1));
Run Code Online (Sandbox Code Playgroud)

这个断言通过了,但我希望行为是将结果集合为0或抛出异常.我意识到HashSet的底层实现是一个HashMap,但似乎应该在添加元素之前进行相等检查以避免违反该合同,不是吗?

java collections set contract hashset

52
推荐指数
4
解决办法
3372
查看次数

如何确定两个HashSets是否相等(按值,而不是通过引用)?

我试图确定HashSet.NET 3.5(C#)中的两个对象是否是相等的集合,包含相同的值.这似乎是人们显然想做的事情,但是所提供的功能似乎都没有给你这些信息.

我能想到这样做的方法是检查两组的计数是否相等,一组是另一组的子集(不合适).我认为唯一可能发生的方法是它们是否相同.示例代码:

HashSet<int> set1 = new HashSet<int>();
set1.Add(1);
set1.Add(2);
set1.Add(3);

HashSet<int> set2 = new HashSet<int>();
set2.Add(1);
set2.Add(2);
set2.Add(3);

if(set1.Count == set2.Count && set1.IsSubsetOf(set2))
{
    // do something
}
Run Code Online (Sandbox Code Playgroud)

这会一直有效吗?有没有更好的办法?为什么不HashSet具有 public bool IsEqualSetWith()的功能?

.net c# set hashset .net-3.5

51
推荐指数
2
解决办法
2万
查看次数

为什么我不能预先分配一个hashset <T>

为什么我不能预先分配hashset<T>

有时我可能会添加很多元素,我想消除调整大小.

c# hashset

48
推荐指数
4
解决办法
1万
查看次数

标签 统计

hashset ×10

c# ×4

java ×4

.net ×3

collections ×3

set ×2

.net-3.5 ×1

contract ×1

javascript ×1

jquery ×1

performance ×1

string ×1

treeset ×1