我正在尝试在Bash中添加String.hashCode()函数。我找不出窃听器。
这是我的示例实现
function hashCode(){ #similar function to java String.hashCode()
foo=$1
echo $foo
h=0
for (( i=0; i<${#foo}; i++ )); do
val=$(ord ${foo:$i:1})
echo $val
if ((31 * h + val > 2147483647))
then
h=$((-2147483648 + (31 * h
中公认的答案为寻找哈希码提供了一种似乎很好的方法。但我对哈希密码并不熟悉,所以我不知道该怎么做。
对于1),我选择什么非零值重要吗?1和其他数字(如素数31 )一样好吗?
对于2),我是否将每个值加到c?如果我有两个字段,它们都是long、int、double等等,该怎么办?
我在这节课上解释得对吗:
public MyClass{
long a, b, c; // these are the only fields
//some code and methods
public int hashCode(){
return 37 * (37 * ((i
它困扰了我一段时间,但我还没有找到令人信服的答案,所以为什么Java中的hashCode函数没有任何大小限制?下面是我找到的的实现
public int hashCode() {
int h = hash;
if (h == 0 && value.length > 0) {
char val[] = value;
for (int i = 0; i < value.length; i++) {
h = 31 * h + val[i];
}
hash = h;
我有一个并发袋收集,我也添加了项目。现在,我可能会有多个相同的项(由3个字符串属性定义为相等)。
我不确定有两件事。
如何从3个属性中生成哈希代码
如果将并发包转换为列表,然后使用自定义派生比较器对其执行不同的操作,则是正确的方法。
基本上,我们的目标是让cityProcessor属性NotFoundCities包含重复的属性,然后在addcities方法中只获得一个非dups的列表。
public class CityProcesor
{
public ConcurrentBag<CityNotFound> NotFoundCities { get;
我做了一些关于方法的测试。我遇到了一个完全让我困惑的案子。下面是一个例子。
public abstract class Ge {
private boolean valid;
public Ge(boolean valid) {
this.valid = valid;
}
@Override
public int hashCode() {
return this.getClass().getSimpleName().hashCode();
}
@Override
public boolean equals(Object obj) {
第一次在put方法中获得冲突时,即当hasKey返回-1时,rehashing方法启动,触发冲突的值将转到可能为空时隙的加倍数组。但是System.out.println(m.get("1000"));给出了一些键的空值,这意味着它们丢失了。我不明白为什么它们会丢失,因为在keyArray中没有什么可以覆盖它们。
import java.util.*;
public class StringMapParallel implements Iterable<String>{
private int nButckets = 2000;
private
对于如何为由其他类组成的类实现hashCode()方法,是否有标准的元算法或最佳实践:
class A { B b; C c; ... }
如果我们假设B和C在实现hashCode()上花了一些功夫,那么将A的哈希码建立在B和C的哈希码的基础上当然是一个好主意。但是如何最好地将它们结合起来呢?
我之所以这样问,是因为某些操作显然不太适合,比如:
class Naive {
B b1, b2;
public int hashCode() { return b1.hashCode() ^ b2.hashCode(); }
}
对于恰好有两个相等的B对象的每个原始对象,这将导致哈希码为
在字典中查找条目是基于哈希码的。哈希码是基于下面代码中的物品id的,所以我不应该改变物品id。但我做了一些实验,我改变了项id,并在字典中搜索它,但我得到了KeyNotFoundException。谁能给我解释一下为什么?
class Program
{
public class Point
{
public int Id { get; set; }
public override bool Equals(object obj)
{
return obj is Point point &&
我需要使用这个散列算法,但我的问题是,惠特,我能给它定长吗?我需要它长6或7个字符,有时更大,有时更小.
String.prototype.hashCode = function () {
var hash = 0,
i, chr, len;
if (this.length == 0) return hash;
for (i = 0, len = this.length; i < len; i++) {
chr = this.charCodeAt(i);
hash = ((hash << 5) - ha
我刚刚意识到,使用实现以下计算流哈希码的算法是不可能的。问题是哈希代码的初始种子是1,它不是累加器的标识。
的算法:
int hashCode = 1;
for (E e : list)
hashCode = 31*hashCode + (e==null ? 0 : e.hashCode());
您可能会倾向于认为以下内容是正确的,但事实并非如此,尽管如果流处理没有被拆分,它将工作。
List<Object> list = Arrays.asList(1,null, new Object(),4,5,6);
int hashCode = list.stream().map(Ob
我有一个有50万行的文件,我想检查每一行L是否有其他行以L结尾。
我已经按行的长度对文件进行了排序,并编写了以下代码,但这是为了减缓速度:
def main(args: Array[String]): Unit = {
val buffer = new BufferedReader(new FileReader("input.txt"))
val fw = new FileWriter("output.txt")
var line = buffer.readLine()
var list = List.empty[String]
我有个产品课,
public class Product
{
public int Id { get; set; }
public string Name { get; set; }
public string ModelNumber { get; set; }
public string Sku { get; set; }
public string Description { get; set; }
public double Price { get; set; }
public double NewPrice { get; set;
我有一个具有id (字符串)的模型列表(DocumentSnapshot from Firestore)。我需要为其中每一个创建一个通知,它们可能很多(来自聊天的消息),我需要使用一个int id来分配给通知。我需要使用他们的字符串id,因为我可以接收到该模型的更新版本,所以我想更新通知前面的精确模型。什么是解决办法?
可能重复:
我应该为自定义类人员实现哈希码和等号。人由
首名
lastname
我应该实现等于和哈希码,这样两个具有名字的和姓氏的人应该返回true for equals,并且应该被Hashmap接受。我实现了这样的Person类:
public class Person {
String firstname;
String lastname;
public Person(String firstname, String lastname) {
this.firstname = firstname;
this.las
我们能找到包含自身为hashcode的list的element吗?
我知道这是一个糟糕的做法,但这是面试官的要求。
当我运行以下代码时,它会抛出一个StackOverflowError
public class Main {
public static void main(String args[]) {
ArrayList<ArrayList> a = new ArrayList();
a.add(a);
a.hashCode();
}
}
现在我有两个问题:
为什么会有StackOverflowError