我想在我的网站上嵌入ShareThis/AddThis按钮,但网站的导航依赖于网址中的哈希标记.每个页面都分配有唯一的哈希值(即http://domain.com/index.php#products).无法更改导航/页面设计.这些服务是否会保留哈希值(在页面上嵌入JS)?如果他们不这样做,有哪些替代解决方案?
public abstract class HolidayPackageVariant {
private HolidayPackage holidayPackage;
private String typeHolidayPackage;
@Override
public int hashCode() {
return Objects.hashCode(getTypeHolidayPackage(), getHolidayPackage());
}
}
public final class FlightHolidayPackageVariant extends HolidayPackageVariant{
private Destination originCity;
@Override
public int hashCode() {
// need to add super.hashCode() here somehow ?
return Objects.hashCode(getOriginCity() );
}
}
Run Code Online (Sandbox Code Playgroud)
Google guava hashode():Objects.hashCode适用于成员对象.如何在derived :: hashCode()中指定超类hashCode()?我可以直接在派生类hashCode()函数中使用super.members,但是如果super.hashCode()以任何方式更改,那么这将不会反映在derived:hashCode(...)中.
嗨,我正在尝试学习hashcode()和equals()方法的目的.我尝试了以下程序.
import java.util.HashMap;
public class LearnHascode {
public String name;
public int age;
LearnHascode(String na)
{
name = na;
}
public int hashCode()
{
return name.hashCode();
}
public boolean equals(LearnHascode obj)
{
return this.name.equals(obj.name);
}
public static void main(String[] args)
{
HashMap h = new HashMap();
LearnHascode ob1 = new LearnHascode("Prabha");
LearnHascode ob2 = new LearnHascode("Prabha");
h.put(ob1, v1);
h.put(ob2, v2);
System.out.println(h);
System.(h.out.printlncontainsKey(new LearnHascode("Prabha")));
}
}
Run Code Online (Sandbox Code Playgroud)
输出:
{hash.LearnHascode@8ef7bdfc=Two, hash.LearnHascode@8ef7bdfc=one}
false
Run Code Online (Sandbox Code Playgroud)
我有两个疑问:
1)我认为HashMap将包含一个条目,因为两个对象(ob1和ob2)的hascode是相同的.任何人都可以解释为什么HashMap中有两个条目?
2)为什么System.(h.out.printlncontainsKey(new LearnHascode("Prabha"))); 返回假?
我正在尝试在更改其实例变量时将对象检索为Map中的键.就我而言,当我在Map结构中搜索一个关键对象时,它应该在hashCode方法返回与最初相同的值时出现.但是,基于以下代码,我无法通过方法get()检索变量权重的值来检索对象:
public class Car implements Comparable<Car> {
int weight;
String name;
public Car(int w, String n) {
weight=w;
name=n;
}
public boolean equals(Object o){
if(o instanceof Car){
Car d = (Car)o;
return ((d.name.equals(name)) && (d.weight==weight));
}
return false;
}
public int hashCode(){
return weight/2 + 17;
}
public String toString(){
return "I am " +name+ " with weight: "+weight;
}
public int compareTo(Car d){
if(this.weight>d.weight)
return 1;
else if(this.weight<d.weight)
return -1;
else
return this.name.compareTo(d.name);
}
}
public static void main(String[] …Run Code Online (Sandbox Code Playgroud) 我有一个HashSet,它在Graph中存储了一些边.每个Edge都有两个节点.
在图表未定向的情况下,添加副本应该失败:
Edge a = new Edge(new Node("aa"), new Node("bb"));
Edge duplicate = new Edge(new Node("aa"), new Node("bb"));
Run Code Online (Sandbox Code Playgroud)
但是在下面的例子中它起作用:
System.out.println(a.equals(duplicate));
Set<Edge> sete = new HashSet<Edge>();
System.out.println(sete.contains(a));
System.out.println(sete.add(a));
System.out.println(sete.contains(duplicate));
System.out.println(sete.add(duplicate));
Output:
true
false
true
false
true
Run Code Online (Sandbox Code Playgroud)
编辑:好的,现在我添加了一个hashCode方法,适用于定向边.有人可以帮我计算无向边的哈希吗?
public class Edge {
private Node first, second;
@Override
public /boolean equals(Object ob) {
if (ob instanceof Edge) {
Edge edge = (Edge) ob;
if (first.equals(edge.first)
&& second.equals(edge.second)
|| first.equals(edge.second)
&& second.equals(edge.first))
return true;
}
return false;
}
@Override
public int hashCode() {
int …Run Code Online (Sandbox Code Playgroud) 在下面的代码中,我想使用"term"属性来生成哈希码.如何使用此String属性生成哈希代码?
class Term {
String term;
@Override
public boolean equals(Object o) {
if (o instanceof Term) {
return this.term.equals(((Term)o).term);
}
return false;
}
@Override
public int hashCode() {
}
}
Run Code Online (Sandbox Code Playgroud) 我正在做一个小项目,最终用户将数据输入表单(jsp).我读取数据并保存到UserObject中,我需要将用户数据存储到一个file 不进入DB中.这里每个用户数据都存储为.txt文件中的单行文本.
我的要求是根据联系号码和电子邮件生成唯一ID,目前我正在考虑生成email-id,hashcode这将是该用户的唯一标识号.但我不想将-ve值作为唯一ID.我使用以下代码生成`hashcode'.
static int hashCode(User u) {
int hash = 37;
if (u != null) {
if (u.email != null && u.email.length() > 0) {
hash = "1@d&$2u".hashCode() + hash
+ u.email.toLowerCase().hashCode();
}
}
return hash;
}
Run Code Online (Sandbox Code Playgroud)
我在这里做错了吗?有没有其他方法可以根据电子邮件为每个用户对象生成唯一ID.如果两个用户对象相同email id,则两个对象hashcode 必须相同.
我在Supplier下面给出的类中重写了hashCode()和equals()方法.
public class Supplier {
private final String name;
public Supplier(String name) {
this.name = name;
}
public String getName() {
return name;
}
@Override
public int hashCode() {
char[] charArray = name.toCharArray();
int sumOfchars = 0;
for (char element : charArray) {
sumOfchars += element;
}
return 51 * sumOfchars;
}
@Override
public boolean equals(Object o) {
if (o == null) {
return false;
}
if (getClass() != o.getClass()) {
return false;
}
final Supplier other = …Run Code Online (Sandbox Code Playgroud) 这是" 在Java 8中使用Java 7 HashMap "的后续问题.有一些有趣的评论.有些我很清楚; 其他人少.
为什么这种hashCode()方法被认为很差?
乍一看,我觉得这很合理.也许17可以增加到31.否则,它似乎遵循普遍接受的公式Arrays.hashCode(Object[]).一个猜测:它适用于一般情况,其中项目数量相对较小(小于10.000),但对于非常大的集合(1.000.000或更高)表现不佳.
这是原始代码:(包含所有内容以提供一些上下文.)
import java.util.HashMap;
import java.util.Map;
import java.util.Random;
public class Test1 {
static int max_k1 = 500;
static int max_k2 = 500;
static Map<Node, Node> map;
static Random random = new Random();
public static void main(String[] args) {
for (int i = 0; i < 15; i++) {
long start = System.nanoTime();
run();
long end = System.nanoTime();
System.out.println((end - start) / 1000_000);
}
}
private static void run() …Run Code Online (Sandbox Code Playgroud) Foo如果double成员在另一个对象的给定范围内,则认为类的对象是相等的.由于浮点运算,可以容易地引入这样的错误.
该方法 isDoubleEquals和doubleArrayEquals的部分相等,但合同规定哈希码必须是相等的对象相同的会照顾.双精度的默认哈希码不会将close值映射到相同的值,因此为匹配双精度数获取相同哈希值的好方法是什么?
public class Foo {
double[] values;
public Foo(double[] values) {
this.values = values;
}
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
//TODO Arrays.hashCode will not work with the contract
result = prime * result + Arrays.hashCode(values);
return result;
}
@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
Foo other = …Run Code Online (Sandbox Code Playgroud)