我想在我的程序中使用HashSet.
但我不能宣布HashSet.
我的电脑安装了Microsoft .Net FrameWork 3.5.
而且我也声明了命名空间.(使用System.Collections.Generic)
但它没有用.
我如何解决这个问题?
我使用visual studio 2005(c#)和Windows 7.
谢谢.
为什么我的Java HashMap不起作用?我的对象具有.equals平等意味着hashCode平等的属性。
您可以假定将对象添加到中之后,正在修改对象的字段HashMap。
我在Java中使用已实现的HashSet找到了一个(对我来说)无法解释的行为.我像这样实现了HashSet并用列表的值填充它.
HashSet<Integer> set = new HashSet<Integer>(list);
Run Code Online (Sandbox Code Playgroud)
我首先使用包含数字0到9的数字列表来填充HashSet:
示例: {1,0,5,9,6,7,3,1,3,6,1,5,1,3,4,9,9,7}
输出: [0, 1, 3, 4, 5, 6, 7, 9]
由于HashSets通常以递增的排序顺序返回值,直到现在一切正常.但是当我开始使用包含更大vaues的列表时,它会以奇怪的方式开始回馈值:
示例:{67,1,122,19,456,42,144,42,3,34,5,5,42}
输出:[1, 34, 67, 3, 5, 456, 42, 144, 19, 122]
我读到了一些关于这取决于这里的内部哈希算法:Java HashSet以奇怪的顺序显示列表,总是从3开始,但这更令人困惑,因为我使用完全相同的HashSet只是具有不同的值.
可以请有人解释我为什么会这样吗?
如果我有2个大小为5的哈希集,我如何从第一个哈希集中获取x项并将它们与第二个哈希集中的x项交换?
例如 :
HashSet 1 has elements = {a , b, c , d ,e}
HashSet 2 has elements = {r , s ,t ,u , w}
Run Code Online (Sandbox Code Playgroud)
交换后我想获得:
HashSet 1 = {r, s , c ,d e}
HashSet 2 = {a, b, t , u ,w}
Run Code Online (Sandbox Code Playgroud)
我不需要特别的订单.
考虑员工类 -
public class Employer implements Serializable{
private Long id;
private String name;
@Override
public boolean equals(Object obj) {
if (obj == null)
return false;
if (obj instanceof Employer) {
Employer employer = (Employer) obj;
if (this.id == employer.id) {
return true;
}
}
return false;
}
//Idea from effective Java : Item 9
@Override
public int hashCode() {
int result = 17;
result = 31 * result + id.hashCode();
//result = 31 * result + name.hashCode();
return result;
} …Run Code Online (Sandbox Code Playgroud) 我正在寻找整数列表与整数散列集之间的比较/性能考虑因素。这就是HashSet<T> 和 List<T> 的区别是什么?谈论T为整数。
我将有多达几千个整数,我想找出单个整数是否包含在这个集合中。
现在当然这对散列集大喊大叫,但我想知道散列在这里是否有益,因为它们只是开始时的整数。首先散列它们不会在这里增加不必要的开销吗?
或者换句话说:使用散列集是否有益,即使对于整数集?
这是我试过的。
import java.util.*;
public class SetDemo {
public static void main(String[] args) {
// TODO Auto-generated method stub
HashSet<String> s1=new HashSet<String>();
s1.add("Java");
s1.add("C++");
s1.add("C");
s1.add("dotNet");
s1.add("JavaScript");
s1.add("Script");
s1.add("Python");
s1.add("JavaScript");
}
}
Run Code Online (Sandbox Code Playgroud)
输出 [Java、Script、C++、dotNet、C、JavaScript、Python]
我有一个HashSet<ArrayList<String>>名为possibleRoutes并希望将其转换为类型ArrayList<ArrayList<String>>.
你如何转换HashSet<Arraylist<String>>成ArrayList<ArrayList<String>>Java中?
如何向 HashMap 内的 HashSet 添加值?
Map<String, Set<String>> myMap;
Run Code Online (Sandbox Code Playgroud) 最近我遇到了这个
String s = "9495963";
Set<Character> set = new HashSet<Character>();
for(char e : s.toCharArray()){
set.add(e);
}
System.out.println(set);//[3, 4, 5, 6, 9]
Run Code Online (Sandbox Code Playgroud)
我得到的输出是[3,4,5,6,9],所以,如果HashSet不保留任何顺序,那么为什么这些数字按升序排列?
PS:这个 HashSet 是如何产生排序输出的? 这篇文章没有回答我的问题。我知道如果我将任何数字放入哈希集中,我将不会得到排序顺序。
但是,我发现如果我将所有 [1, 2, 3, ..., n] 放入具有任何混洗顺序的 HashSet 中并迭代 HashSet,我将得到一个guranteed sorted order。我不明白为什么它总是会发生。我已经多次测试过任何 n < 10000 ,它总是正确的,因此这不应该是巧合,应该有一些原因!即使我不应该依赖这个实现细节,请告诉我为什么它总是发生。
PS:我知道如果我将 [0,1,2, ..., n-1] 或 [1+k, 2+k, .., n+k] (k != 0) 插入 HashSet,迭代顺序未排序,我已经测试过。HashSet 的迭代顺序未排序是正常的。但是,为什么 [1,2,3,4,..,n] 的任何插入顺序都意外地总是正确的?我已经检查了实现细节。如果我跟踪路径,整个过程将包括调整桶数组的大小,以及从链表到红黑树的转换。如果我以无序的顺序插入整个 [1-n],则 HashSet 的中间状态是未排序的。但是,如果我完成所有插入,它会意外地排序。
我使用 JDK 1.8 进行了以下测试。
public class Test {
public static void main(String[] args) throws IOException {
List<Integer> res = printUnsortedCase(10000);
System.out.println(res);
}
private static List<Integer> printUnsortedCase(int n){
List<Integer> res = new …Run Code Online (Sandbox Code Playgroud) 绊倒我发现这个非常有趣的程序,允许添加重复元素HashSet.我希望有人可以很好地解释它
public class Human implements Comparable<Human> {
Integer age;
public Human(int age) {
this.age = age;
}
public int compareTo(Human h) {
return h.age.compareTo(this.age);
}
public String toString() {
return ""+this.age;
}
}
Run Code Online (Sandbox Code Playgroud)
主要课程
public class Test {
public static void main(String[] args) {
Set<Human> humans = new HashSet<Human>();
humans.add(new Human(13));
humans.add(new Human(33));
humans.add(new Human(21));
humans.add(new Human(21));
System.out.println("Size : "+humans.size());
System.out.print(humans);
}
}
Run Code Online (Sandbox Code Playgroud)
预期产出: [21, 33, 13]
取而代之的是: [21, 21, 33, 13]