标签: hashcode

哈希码.如何使用它

虽然我非常了解HashCode是什么以及哈希表的作用,但我不得不承认我不知道如何使用它(超越常用词典).我想实现自己的哈希表,所以首先我想知道关于哈希的基本知识:

  • 我知道我可以在Java和Scala中使用getHashCode()/ 获取哈希码hashCode().这个数字是如何确定的.(只是出于好奇)
  • 如果我知道HashCode某个对象,我该如何访问它?也就是说,我该如何调用该内存桶?
  • 我可以更改/设置变量HashCode吗?

现在,我有一个非常大的(大约10 ^ 9)Int列表.我将访问其中一些(从无到有),我需要尽可能以最快的方式完成.哈希表是最好的方法吗?

PS:我不想讨论它,我只是想知道HashTable是否被认为是最有效的.如果存在其他好的方法,也许你可以指点我.

谢谢,

hash hashtable hashcode

0
推荐指数
1
解决办法
717
查看次数

Java Hashtable <Object,Someclass>,如果键是字符串?如果字符串相同,它将删除具有相同字符串的所有值

我需要一个基于密钥的Someclass值.键可以是字符串,布尔值或其他对象,这就是我使用Object作为键的原因.但是当对象是一个字符串时,我有一个问题.我有两个对象的字符串,它是等于,但它应该返回不同的值,因为它是一个不同的对象.

我的代码:

Object k = new String("action");
Object l = new String("action");
Hashtable<Object,SomeClass> map = new Hashtable<Object, SomeClass>();

map.put(k,anObject1);
map.put(l,anObject2);

map.remove(k); // it is removing both with k and l.
Run Code Online (Sandbox Code Playgroud)

当我检查两个对象的hashCode()时,它返回相同的值,这最终不是我想要的.

这有什么解决方案吗?我是否需要创建一个覆盖对象的Equals()的新类?但是,仍然是hashCode.:(问题是我需要一个hashCode,为不同的Object返回不同的值.

编辑:我这样做是因为我需要根据字符串的内容执行不同的操作,但操作将因map与键返回的值而不同.

更新:好的,这就是为什么我需要这个奇怪的事情.

我有一个玩家实例和3个陆地实例.所以我希望玩家能够耕种land1,land2,land3.如果玩家想要耕种土地,那个土地会形成一个正在运行的线程,告诉玩家移动到位置X,完成工作action,并wait()通过对象action,当另一个线程按照notify对象线程时action,土地然后自行修改.然后玩家根据对象制作动画action.我正在ArrayList<Position> destination和'ArrayList action`拥有它.也许你可以在这里阅读我的其他问题.

所以我想让动作取消.我通过传递action对象来实现它.我有一个按钮,显示每个动作,每个按钮将取消该动作.我也经过action这里.因此,当我点击按钮时,土地将获得notify.问题是我无法通过ArrayList<Position>删除目的地Action,因为它不知道索引在哪里.我是Java的新手,但是我一直在使用C++,所以我考虑使用Hashtables,因为它的O(1)与C++ O(log n)不同,并且因为我当前代码没有太多变化,所以很方便.

这可以理解吗?

java string hashtable equals hashcode

0
推荐指数
1
解决办法
2243
查看次数

删除Java中的重复对象

我的User对象如下所示:

User.java:

    public class User {
        public String firstName;
        public String lastName;

        public String getFirstName() {
            return firstName;
        }   
        public void setFirstName(String firstName) {
            this.firstName = firstName;
        }
        public String getLastName() {
            return lastName;
        }
        public void setLastName(String lastName) {
            this.lastName = lastName;
        }

        @Override
        public int hashCode() {
            return (this.firstName.hashCode() + this.lastName.hashCode());
        }

        @Override
        public boolean equals(Object obj) {
            if(obj instanceof User) {
                User temp = (User) obj;
                if(this.firstName.equals(temp.firstName) && this.lastName.equals(temp.lastName)) {
                    return true;
                }
            }
            return false;
        } …
Run Code Online (Sandbox Code Playgroud)

java hashcode

0
推荐指数
2
解决办法
6080
查看次数

相同的字符串,不同的哈希码

我正在编写一个简单的查找,总是以某种方式失败.进一步调查,我发现了一些我无法解释的事情:似乎虽然我的字符串是相同的,但它们并没有得到相同的哈希码.

fr.unice.i3s.modalis.jSeduite.technical.restaurant.CourseFinder Hex: 66722E756E6963652E6933732E6D6F64616C69732E6A536564756974652E746563686E6963616C2E72657374617572616E742E436F7572736546696E646572 Hash code: 1515256474
fr.unice.i3s.modalis.jseduite.technical.restaurant.CourseFinder Hex: 66722E756E6963652E6933732E6D6F64616C69732E6A736564756974652E746563686E6963616C2E72657374617572616E742E436F7572736546696E646572 Hash Code: 2099127532
Run Code Online (Sandbox Code Playgroud)

使用Java 6重复实验,我遇到了类似的问题.请注意,无论哪种方式,事情都不是常数:

fr.unice.i3s.modalis.jSeduite.technical.restaurant.CourseFinder Hex: 66722E756E6963652E6933732E6D6F64616C69732E6A536564756974652E746563686E6963616C2E72657374617572616E742E436F7572736546696E646572 Hash code: 1515256474
fr.unice.i3s.modalis.jseduite.technical.restaurant.CourseFinder Hex: 66722E756E6963652E6933732E6D6F64616C69732E6A736564756974652E746563686E6963616C2E72657374617572616E742E436F7572736546696E646572 Hash Code:  - 1772912571
Run Code Online (Sandbox Code Playgroud)

我的代码依赖于这个匹配,我不想运行.equals(),因为它可能太慢了.

根据我的理解,对于相同的字符串,哈希码应该是相同的.这是JVM中的错误吗?是否涉及一些神奇的Scala干扰?

环境:

  • 斯卡拉2.10
  • 64位Oracle Java 1.7.0_17和Oracle Java 1.6.0_43
  • IntelliJ IDEA(最新社区版)

java scala hashcode

0
推荐指数
1
解决办法
1000
查看次数

C++旧版本(不是c ++ 11) - map - >覆盖哈希码

我是一个java家伙..学习c ++.我正在尝试使用c ++中的map std::map.不知何故,我还需要覆盖其哈希码和equals方法.我可以在c ++ 11中使用unordered_map但是如何在旧版本中执行此操作.我知道std::map,第三个参数是operator<但不是哈希码(如in unordered_map).我也知道std::map(有序地图)实际上是一个TreeMap(红黑树).但我怎么做,我想做,使用这个数据结构或旧的c ++版本中的其他一些.

c++ hashcode

0
推荐指数
1
解决办法
429
查看次数

F#HashCode枚举转换

我有一个带掩码的错误代码的枚举,带有字符串表示和二进制int表示:

type ErrorCodes = 
    | NoError = 0
    | InvalidInputError = 1
    | AuthenticationFailedError = 2
    | InvalidArgumentError = 4
    | ItemNotFoundError = 8
    | UnknownError = 16
Run Code Online (Sandbox Code Playgroud)

当我浏览程序时,我使用按位OR运算符(|||)收集所有错误.所以现在我有一些看起来像01100的东西.如何打印到控制台:"InvalidArgumentError"和"ItemNotFoundError?"

我只想使用:

for i = 0 to 32 do
    if ((err.GetHashCode() % 2) = 1) then
        Console.WriteLine("ErrorCode: {0}",err.GetHashCode())
Run Code Online (Sandbox Code Playgroud)

但现在我仍然坚持如何打印实际的字符串

error-handling enums f# hashcode bitmask

0
推荐指数
1
解决办法
71
查看次数

从HashCode Java获取价值

我正在尝试创建一个函数,该函数使用类型为BasicAsteroid的(x,y,velocity x,velocity y)值生成随机小行星,这是创建随机小行星的构造函数和函数:

private double x, y;
private double vx, vy;

public BasicAsteroid(double x, double y, double vx, double vy) {
    this.x = x;
    this.x = y;
    this.vx = vx;
    this.vy = vy;
}

public static BasicAsteroid makeRandomAsteroid() {
    Random rand = new Random();
    BasicAsteroid x = new BasicAsteroid((rand.nextInt()%FRAME_WIDTH), (rand.nextInt()%FRAME_HEIGHT), (rand.nextInt()%MAX_SPEED), (rand.nextInt()%MAX_SPEED));
    System.out.println(x);
    return x;
}
Run Code Online (Sandbox Code Playgroud)

然而,这是我创建小行星时的输出:

game1.BasicAsteroid@6773120a

game1.BasicAsteroid@4261b6b3

game1.BasicAsteroid@2673b915

game1.BasicAsteroid@113eb90b

game1.BasicAsteroid@1abcc522

如何输出值而不是类@saskcode?

谢谢.

java hashcode

0
推荐指数
1
解决办法
723
查看次数

在java中覆盖Triplet类的equals和hashcode

我有一个Triple类,它是一个可以包含3个整数(x,y,z)的类.我想覆盖equals/hashcode方法,以便它们可以在一个集合中使用.所以带(1,2,3)的obj应该等于(3,2,1)或(3,1,2),所以应该等于它的任何排列.我知道如何使用(x,y)对Pair类执行此操作 - 我对此的对类的代码是:

class Pair {
    int x;
    int y;

    public Pair(int x, int y) {
        this.x = x;
        this.y = y;
    }


    @Override
    public boolean equals(Object obj) {

        if(obj instanceof  Pair) {
            Pair p = (Pair) obj;

            if (this.x == p.x && p.y == this.y || this.x == p.y && this.y == p.x) {
                return true;
            }
        }

        return false;
    }

    @Override
    public int hashCode() {
        return Integer.hashCode(x) * Integer.hashCode(y);
    }
}
Run Code Online (Sandbox Code Playgroud)

这工作正常,但如果我想将它扩展为Triple类,我知道我可以编辑equals方法并添加更多条件来检查,但这似乎很长.如果不在Java中使用外部库,我有什么方法可以做到这一点?

java overriding class equals hashcode

0
推荐指数
1
解决办法
310
查看次数

我很困惑哈希码和等于怎么样 - 为什么用相同参数创建的两个对象彼此不相等?

我正在努力深入理解Java,我正在尝试比较相同的对象.

我创建了两个具有相同值的字符串对象,但分配给了不同的变量.事实证明它们具有相同的哈希码.

之后,我创建了表示person的简单类,并使用传递给构造函数的相同参数创建了此类的两个实例.原来他们有不同的哈希码.

现在我很困惑它是如何工作的.你能解释一下吗?

我的代码:

 public static class Person {

        public String name;
        public String lastName;

        public Person(String name, String lastName) {
            this.name = name;
            this.lastName = lastName;
        }
    }

    public static void main(String[] args) {

        String s1 = new String("foo");
        String s2 = new String("foo");
        System.out.println("String1 hashcode: " + s1.hashCode());
        System.out.println("String2 hashcode: " + s2.hashCode());
        System.out.println("Is String1 equal to String2?: " + s1.equals(s2));

        Person p1 = new Person("John", "Doe");
        Person p2 = new Person("John", "Doe");
        System.out.println("Person1 hashcode: " + …
Run Code Online (Sandbox Code Playgroud)

java equals object hashcode

0
推荐指数
1
解决办法
84
查看次数

Java是否有类似Hashable,Hasher的东西?

对于Hash数据结构,例如HashSet,HashMap等,我们需要实现哈希码。但是,这不是很方便。我们可以改用Hashable或Hasher吗?

这是Swift中的示例:https : //developer.apple.com/documentation/swift/hashable

java hashmap hashcode hashable

0
推荐指数
1
解决办法
76
查看次数

标签 统计

hashcode ×10

java ×7

equals ×3

hashtable ×2

bitmask ×1

c++ ×1

class ×1

enums ×1

error-handling ×1

f# ×1

hash ×1

hashable ×1

hashmap ×1

object ×1

overriding ×1

scala ×1

string ×1