Java对象平等

Nit*_*eti -2 java equality data-structures

两张卡片c1和c4似乎相等......但它们不是原因.我希望它们相等,以便在Set中只允许其中一个.:|

import java.util.*;
class Card2
{
 private int value;
 private String type;

 public Card2(int v,String t)
 {
  value=v;
  type=t;
 }

 public int getValue()
 {
  return value;
 }

 public String getType()
 {
  return type;
 }

 public String toString()
 {
  return(type+" "+value);
 }

 public boolean equals(Object oo)
 {
  if(!(oo instanceof Card))
  return false;

  Card cc=(Card) oo;

  if(this.getValue()==cc.getValue() && this.getType().equals(cc.getType()))
  return true;
  else
  return false;
 }

 public int hashCode()
 {
  return value;
 }

 public static void main(String args[])
 {
  HashSet<Card> deck=new HashSet<Card>();

  Card c1=new Card(5,"Spade");

  Card c2=new Card(10,"Hearts");

  Card c3=c2; //Equal Ref card entity

  Card c4=new Card(5,"Spade");

  System.out.println(c1.equals(c4));

  deck.add(c1);
  deck.add(c2);
  deck.add(c4);
  deck.add(c3);

  for(Card cc:deck)
  System.out.println(cc);
 }
}
Run Code Online (Sandbox Code Playgroud)

Joa*_*uer 5

首先:你叫你的类Card2,但称其为Card无处不在(包括equals()方法,这个答案假定您替换的所有实例.Card2Card).

如果卡的值和类型相同equals(),则以某种方式定义返回true.

c1有一个值5和一个类型Spade.

c4有一个值5和一个类型Spade.

看起来和我差不多.