精华内容
下载资源
问答
  • HashSet 添加元素,首先比较hash值 ...测试方法,使用一个Java Bean的person类,有name和age两域,覆写public boolean equals(Object obj) 和public int hashCode() 两方法,覆写方法中都添加句输出语句,测试是

    HashSet 添加元素,首先比较hash值 是否有相同hash,没有则添加成功,有则继续比较equals,如果不同则添加成功,否则不添加。


    测试方法,使用一个Java Bean的person类,有name和age两个域,覆写public boolean equals(Object obj)  和public int hashCode()  两个方法,覆写方法中都添加一句输出语句,测试是否该方法被调用/

    person类:


    package info.dyndns.oszc;
    
    public class Person {
    
    	public String name;
    	public int age;
    	
    	public Person(String name, int age)
    	{
    		this.name = name;
    		this.age = age;
    	}
    	
    	public void print(){
    		System.out.println(name + age);
    	}
    
    	public String getName() {
    		return name;
    	}
    
    	public void setName(String name) {
    		this.name = name;
    	}
    
    	public int getAge() {
    		return age;
    	}
    
    	public void setAge(int age) {
    		this.age = age;
    	}
    	public String toString(){
    		return getName() +".." + getAge();
    	}
    
    	@Override
    	public boolean equals(Object obj) {
    		System.out.println("调用equals方法");  //这里打印为了看清程序是否调用了equals方法
    		if( !(obj instanceof Person)){
    			return false;
    		}
    		
    		Person p =(Person) obj;
    		
    		return getName().equals(p.getName()) && getAge()==p.getAge();
    	}
    
    	@Override
    	public int hashCode() {
    		System.out.println("调用hashCode方法,hash为:"+ getName().hashCode() + getAge()*9); //这里打印为了看清程序是否调用了equals方法
    		return getName().hashCode() + getAge()*9;
    	}
    	
    }
    




    工具类


    package info.dyndns.oszc;
    
    import java.util.*;
    
    public class Utils {
    
    	public static <E>void print(E e)
    	{
    		System.out.println(e);
    	}
    	public static <E>void printElements(Collection<E> al)
    	{
    		Iterator<E> it = al.iterator();
    	
    		while (it.hasNext()){
    			print(it.next());
    		}
    	}
    	public static <E>void put (Collection al,E e)
    	{
    		if (!al.contains(e))
    			al.add(e);
    	}
    }
    

    测试类,首先添加两个不同的元素

    package info.dyndns.oszc;
    
    import java.util.HashSet;
    
    public class HashSetTest {
    
    	public void test(){
    		HashSet<Person> hs = new HashSet<Person>();
    		hs.add(new Person("zs", 11));
    		hs.add(new Person("ls", 12));
    		Utils.printElements(hs);
    	}
    	
    	public static void main(String[] args) {
    		HashSetTest hst = new HashSetTest();
    		hst.test();
    	}
    }
    

    output:

    调用hashCode方法,hash为:389799
    调用hashCode方法,hash为:3463108
    ls..12
    zs..11
    

    显然调用了两次hashcode方法,由于hash值不同,所以没有调用equals方法。


    然后我们添加两遍同一个元素:

    package info.dyndns.oszc;
    
    import java.util.HashSet;
    
    public class HashSetTest {
    
    	public void test(){
    		HashSet<Person> hs = new HashSet<Person>();
    		hs.add(new Person("zs", 11));
    		hs.add(new Person("zs", 11));
    		Utils.printElements(hs);
    	}
    	
    	public static void main(String[] args) {
    		HashSetTest hst = new HashSetTest();
    		hst.test();
    	}
    }
    

    output:

    调用hashCode方法,hash为:389799
    调用hashCode方法,hash为:389799
    调用equals方法
    zs..11
    

    可以看出当hash值相同时,equals方法会被调用,当他们都相同,则hashset判断两个元素完全一致,所以后一个元素未能加入到hashset集合中。


    所以我们在自定义类要添加到hashset中时候,务必重写以上两个方法,来保证hashset添加元素的唯一性。

    展开全文
  • java判断个对象是否同一个对象

    千次阅读 2019-02-26 14:57:44
    比较两个对象是否相等,主要通过equals()和hashCode() equals()方法 hashCode()方法 equals()和hashCode()在hashSet中使用 、equals() equals()是Object中的方法,比较的对象的内存地址(如图)...

    比较两个对象是否相等,主要通过equals()和hashCode()

    • equals()方法
    • hashCode()方法
    • equals()和hashCode()在hashSet中使用

    一、equals()

    equals()是Object中的方法,比较的对象的内存地址(如图一)。

    Object源码

    但是也有的类重写了equals()方法,比较的内容是否相等。例如:String 、Math、Integer、Double等

    String源码

     

    二、hashCode()

    比较的哈希码中的索引位置。可以快速定位对象的物理位置,能提高查找效率。

    equals()相等,hashCode()一定相等
    hashCode()不相等,equals()一定不相同
    hashCode()相等,equals不一定相等

    三、equals()和hashCode()

    在hashSet中使用,hashset是元素无序,不重复的集合。

    先有一个例子看一下其实hashSet也是可以添加重复元素的。

    输出结果:

    看这个结果hashSet无序倒是体现出来了,但是里面为什么被添加了重复元素?难道是hashSet元素不可以重复是错误?当然不是啦!首先我们分析一下hashSet中我们是怎么添加元素的,由上图可见我们每次添加的对象都是new出来的,使用new就是创建一个对象,既然每次都创建了一个新的对象,hashCode()可能就不相同,hashSet自然就把他们当做不同对象添加到集合里面啦。那么对于自定义对象我们才能保持不重复呢?如下:

    重写自定义对象的equals()和hashCode()后

    输出:问题解决

     

    展开全文
  • JQuery中采用$("#ID").is($("compareId"))是否同一个object对象
    JQuery中采用$("#ID").is($("compareId"))是否是同一个object对象
    
    展开全文
  • Java判断一个对象是否是数组

    万次阅读 2018-02-05 17:06:35
    Java判断一个对象是否是一数组类型的可以使用反射获取对象的Class类的isArray方法; 如下代码: /** * * 方法描述 判断一个对象是否是一数组 * * @param obj * @return * * @author yaomy * @date...
        Java判断一个对象是否是一个数组类型的可以使用反射获取对象的Class类的isArray方法;
    

    如下代码:

        /**
         * 
         * 方法描述 判断一个对象是否是一个数组
         *
         * @param obj
         * @return
         * 
         * @author yaomy
         * @date 2018年2月5日 下午5:03:00
         */
        public static boolean isArray(Object obj) {
            if(obj == null) {
                return false;
            }
            return obj.getClass().isArray();
        }
    展开全文
  • 如何判断jq对象同一个对象

    千次阅读 2017-04-12 17:19:13
    如果说要判断是否同一对象,当然是用 === 来判断,但实际上两不同的 jQuery 对象可能是对同一个/组 DOM 对象的封装,这时候可以用 is 来判断,比如 var a = $(".editor"); var b = $(".editor"); ...
  • 那我们new两相同的对象什么属性都一样,为什么编译的时候不相同,这是因为我们调用的是父类也就是Object的equals方法,这里我们就需要重写这equals方法。public class Test5 { public static void main(String[]...
  • 判断一个对象是否是JSON对象

    万次阅读 2018-03-30 09:58:32
    if(typeof(obj) == "object" &amp;&amp; Object.prototype.toString.call(obj).toLowerCase() == "[object object]" &amp;&amp; !...alert('是JSON对象'); }
  • js判断两次点击是否同一个对象

    千次阅读 2017-04-02 21:07:12
    &lt;!DOCTYPE html&gt; &lt;html&gt; &lt;head&gt; &lt;meta charset="UTF-8"&gt; &lt;title&gt;&lt;... window.onload=function(){
  • print "\n~~~~~~~如何判断python对象的内容和对象的内存地址~~~~~~~~~" t1 = (1,2,3,4) ...print t1 is t2 # 使用is判断是否同一个对象(内存地址) print "=======比较大小======...
  • NSArray *musicArr2 = [musicDao queryCurrdentDataWithandroidId:androidId]; //查询得到的对象数组 ... // 要判断对象,因为这个对象在其他地方获取的,这里只是做示范 MusicObj *muObj = [[MusicO
  • 个对象都可以调用类对象,如果它们是一个类出来的,它们的类对象也是一样的,所以判断对象是否属于同一个类,就判断它们的类对象是否相同。
  • 通过Calendar来获取date对象的年份和在该年份中第几天,然后比较这两信息来判断是不是同一天 SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); Date date = format.parse(&...
  • 如何判断一个对象是否是垃圾对象

    千次阅读 2018-11-04 14:12:18
    对象添加一个引用计数器,每当有一个地方引用它时,计数器值加1;当引用失效时,计数器值就减1;计数器为0,说明对象没有被使用 但是主流的java虚拟机里面没有选用引用计数法来管理内存,其中最重要的原因是它很难解决...
  • 如何判断一个对象是否为jquery对象

    千次阅读 2018-11-14 08:33:27
    如何判断一个对象是否为jquery对象
  • java判断对象是否一个类的实例

    千次阅读 2019-07-05 14:34:01
    Java:如何判断一个对象是否是特定类的实例 一、InstanceOf运算符 InstanceOf运算符是用来在运行时指出对象是否是特定类的一实例。InstanceOf通过返回一布尔值来指出,这个对象是否是这特定类或者是它的子类的...
  • a = 5 b = 6 c = 6 print(a is b) # False print(a is c) # False print(b is c) # True print(id(a), id(b), id(c)) # 504911664 504911680 504911680  
  • java 判断一个对象是否为空对象

    千次阅读 2020-03-30 22:29:29
    最近项目中遇到一个问题,在用户没填数据的时候,我们需要接收从前端传过来的对象为null,但是前端说他们一个一个判断特别麻烦,只能传对象过来,我第一个想法就是可以通过反射来判断对象是否为空。 第版: ...
  • 如何判断一个js对象是否DOM对象

    千次阅读 2017-10-13 18:35:12
    判断一个对象是否DOM对象,首先想到的无非就是它是否具有DOM对象的各种属性或特征,比如是否有nodeType属性,有tagName属性,等等。判断的特征越多,也就越可靠,因为毕竟我们自定义的js对象也可以有那些属性。...
  • 判断一个对象是否为Buffer对象

    千次阅读 2016-06-28 22:40:18
    1、问题背景 不同数据类型对象变量,如何判断一个对象是否为Buffer对象2、实现源码> you='anikdjfijkfjkdsjfkdjfkdjfkdjfkdjfkd'; 'anikdjfijkfjkdsjfkdjfkdjfkdjfkdjfkd' > hai=Buffer(128); ...
  • JS中如何判断一个对象是否为空对象

    万次阅读 2018-07-03 21:58:34
    1. 通过 for...in... 遍历属性 ,如果是空对象返回false, 否则返回 true 。例: var judgeObj = function(obj){ for(var item in obj){ return true; } return false;... 通过ES6新增的一个Ob...
  • js判断是否对象

    万次阅读 2018-07-27 02:12:06
    1、toString(推荐) Object.prototype.toString.call(obj) === '[Object Object]' 2、constructor obj.constructor === Object 3、instanceof 需要注意的是由于数组也是对象,因此用 arr instanceof Object ...
  • js 判断一个 Object 对象是否为空

    千次阅读 2019-04-22 17:27:07
    判断一个对象是否为空对象,本文给出三种判断方法: 1.最常见的思路,for...in...遍历属性,为真则为“非空数组”;否则为“空数组” for (var i in obj) { // 如果不为空,则会执行到这一步,返回true return ...
  • js 判断一个 object 对象是否为空

    万次阅读 多人点赞 2017-09-27 15:46:51
    js 判断一个 object 对象是否为空转载原文判断一个对象是否为空对象,本文给出三种判断方法:1.最常见的思路,for...in... 遍历属性,为真则为“非空数组”;否则为“空数组”for (var i in obj) { // 如果不为空,...
  • 判断一个对象是否包含一属性有多种的方式,如下: const obj = { name: 'john' } var a = 'name' in obj var b = Reflect.has(obj, 'name') var c = Reflect.hasOwnProperty.call(obj, 'name') var d = Object....
  • JavaScript判断一个对象是否为空

    千次阅读 2018-11-04 18:10:32
    写一函数 isEmptyObject,判断一个对象是不是空对象 function isEmptyObject(obj){ for(var item in obj){ return false } { return true } } console.log(isEmptyObject( {} )); //true console....
  • 因为开发过程中经常要判断一下是否是真正的对象,比如要用到for in等,又老记错,所以在这里记录一下,需要的时候再来看 const obj = {}; 1、toString 注意大小写,推荐用此方法 Object.prototype.toString....

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,891,108
精华内容 756,443
关键字:

如何判断是否是同一个对象