有一个java汽车可能包含两个值:模型和价格。
现在假设我以这种方式覆盖等于()和hashcode(),只检查模型:
public boolean equals(Object o) {
return this.model.equals(o.model);
}
public int hashCode() {
return model.hashCode();
}
这样,我就可以通过这样的方式检查一下,一个数组是否已经包含相同型号的商品车(而不管价格):
List<Car> car = new ArrayList<Car>();
当我使用List.Contains(T item)时,我正在尝试执行一个很好的比较。
问题是我使用BaseItem作为列表项。我需要验证列表中的一个对象是否与我计划添加的对象具有相同的属性值。
例如:
public abstract class BaseItem
{
// some properties
public override bool Equals(object obj)
{
return obj != null && this.GetType() == obj.GetType();
}
}
public class
我有以下两个非常简单的类:
public class A {
private int a;
public A(int a)
{
this.a=a;
}
public int getA(){
return a;
}
public boolean equals(Object o)
{
if (!(o instanceof A))
return false;
A other = (A) o;
return a == other.a;
我有一个简单的实习生: public class Trainee {
private String firstName, lastName;
private int grade;
// constructors, getters-setters, etc. 我还需要编写一个方法,该方法在TreeSet<Trainee>中查找具有相同姓名和不同姓氏的受训人员。我的第一个尝试是使用for-each迭代TreeSet,然后是简单的if构造,返回true/false,但是我的老师说在TreeSet中检查每个元素不是一个好主意。我真的不知道怎么解决这个问题。嗯。
我知道在Java语言中,不能使用==比较两个不相关的实例,因为它会产生编译错误(不兼容的类型)。举个例子
class Animal {}
class Dog extends Animal {}
class Cat extends Animal {}
Dog d = new Dog();
Cat c = new Cat();
System.out.println( d == c );
是编译时错误。
但是为什么使用从Object继承的equals不会产生这样的错误:
System.out.println( d.equals(c) ); // is false
即使Object.equals在
我希望在TreeSet中有几对int,并根据第一个数字对它们进行排序。
代码
public static void main (String[] args) throws java.lang.Exception
{
SortedSet<int[]> s = new TreeSet<int[]>(new Comparator<int[]>(){
public int compare(int[] a, int[] b) {
return b[0] - a[0];
}
});
int[
更新:我猜HashSet.add(Object obj)不会调用contains。有没有办法实现我想要的(删除dup字符串,使用Set忽略大小写)?
原始问题:在java中尝试从字符串列表中删除dups,但是在下面的代码中CaseInsensitiveSet.contains(Object ob)没有被调用,为什么?
public static List<String> removeDupList(List<String>list, boolean ignoreCase){
Set<String> set = (ignoreCase?new Case
为什么这个简单的测试失败了?
var dict1 = new Dictionary<int, int> {{1, 15}};
var dict2 = new Dictionary<int, int> {{1, 15}};
var equals = EqualityComparer<IDictionary<int, int>>.Default.Equals(dict1, dict2);
Assert.IsTrue(equals);
...thank你非常喜欢。最后我有了自己的字典..。这看起来像一个人会而且应该做的事情吗?
public
我读过一些关于覆盖等于和GetHashcode的内容,但是当我有一个简单的等于方法时,我需要它吗?
如果我真的要推翻它
为什么?-应该在重写Id.GetHashCode()时使用GetHashCode()吗?
public class Foo {
public Guid Id { get; } = new Guid();
public bool Equal(Foo other) {
if (other == null) return false;
return Id == other.Id;
}
}
考虑以下Java代码:
Object a = new Integer(2);
Object b = new Integer(2);
System.out.println(a.equals(b));
Object x = new Object();
Object y = new Object();
System.out.println(x.equals(y));
第一个print语句打印true和第二个false。
如果这是有意为之的行为,这对Java编程有什么帮助呢?
如果这不是故意的行为,那么这是Java的一个缺陷吗?
我正在写一个关于javascript推力的小型游戏,我发现了一些奇怪的东西。
eval('{}=={}') // error
{}=={} // false in the console but is an error in a source file
eval('[]==[]') // no error => false
eval('{}') // no error => undefined
eval('({})') // no error => Object
eval('[]') /
我正在尝试从另一个IEnumerable中删除IEnumerable类型中的元素。
这里我得到了完整的列表
var tiposObj = from t in context.sistema_DocType
select
new tgpwebged.Models.SettingsModels.TipoIndiceModel
{
我知道在实现自定义相等性检查时重写GetHashCode的重要性-为此我已经实现了IEquality<T>接口,以及泛型和非泛型Equals 之间的区别现在是否有重写Equals(object t)的意义?难道不是所有的东西都属于泛型Equals(T t)吗?
public override int GetHashCode() //required for hashsets and dictionaries
{
return Id;
}
public bool Equals(T other) //IEquatable<T> here
{
return
我对Java中引用变量和动态方法解析的动态/静态类型的概念有点困惑。
考虑:
public class Types {
@Override
public boolean equals(Object obj){
System.out.println("in class Types equals()");
return false;//Shut-up compiler!
}
public static void main(String[] args){
Object typ = new Types(
我有一个TreeMap,其中RobotKey是一个由字符串字段域和长字段时间戳组成的类。RobotKey实现了类似的实现,如下:
@Override
public boolean equals(Object obj) {
if (this.domain.equals(((RobotKey) obj).getDomain()))
return true;
return false;
}
并根据以下compareTo函数对树状图进行排序:
@Override
public int compareTo(RobotKey arg0) {
if (this.las
当我试图删除接受对象的HashSet时,hashset.contains(Object)和iterator.equals(Object)总是假的,即使它们应该是真的。
public boolean removeElement(Element element)
{
Iterator<Element> itr = elements.iterator();
while (itr.hasNext()) {
Element oldElement = itr.next();
if (itr.equals(new Element(e
我使用以下代码处理TreeSet集合:
import java.util.*;
public class Employee implements Comparable<Employee>{
private int ID;
public Employee(int iD) {
ID = iD;
}
@Override
public int compareTo(Employee obj) {
return this.ID-obj.ID;
}
private static void intoTr
我最近遇到了一个有趣的行为。似乎如果我重写.equals()来接受Object以外的参数,它就不会被调用。有人能给我解释一下为什么会这样吗?这似乎违背了我对OOP中多态性的理解,但也许我遗漏了一些东西。
下面是简单得多的代码,它显示了我所看到的:
public class MyClass {
private int x;
public MyClass(int n) { x = n; }
public boolean equals(Object o) { return false; }
public boolean equals(MyClass mc) { return x ==
因此,我希望返回对象的属性,例如,泛型的或硬编码的类型(用户)
但是,我只想返回我要获取属性的对象的属性,该属性的值是针对它设置的,而不是默认值或null。这样做的原因是,我只能使用这些属性来构建表达式,以便只根据数据库中的列检查这些属性中的项。
我试过这样的方法,但是它仍然能带来所有的价值,
public User AutomatedUser {get;set;} // some properties of this will populated elsewhere
var props = typeof(User).GetProperties()
.Where(pi
在微软的MSDN Library关于IEquatable<T>.Equals方法()的文章中,提供了一个示例来演示如何重写等于和相等运算符。它看起来是这样的:
public class Person : IEquatable<Person>
{
private string uniqueSsn;
private string lName;
public bool Equals(Person other)
{
if (other == null)
return false;
if (this.uni