
java中往集合添加数据调用add();方法就行
//第一步先创建一个set集合的子类
HashSet has=new HashSet<>()
//给set集合添加的方法是add()
has.add(args)
资料拓展:Collection接口可以存放重复元素,也可以存放不重复元素。List可以存放重复元素,Set就是不重复的元素。
通过元素的equals方法,来判断是否为重复元素。
Set集合取出元素的方式可以采用:迭代器,增强 for
HashSet 比较两个对象是否相同的机制是 1.hash 2. == 3.equals()第一步就是比较两个对象的hash值是否相同(注意这里的hash值是经过处理的,为了使散列更均匀)
hash值相同的就会散列到一组 不相同就会散列到不同的组(此时就不会再继续比较了,因为在不同组hashset认为他们就是不同的对象)
第二步 如果hash值相同 则进行连等判断 即比较内存地址是否相同 如果不相同那么hashset就认为他们肯定不是相同的对象 如果内存地址相等(这一步最主要的目的其实就是删除元素的时候判断)那么进行第三步
第三步 如果equals返回相同 那么他们就是彻彻底底的相同的对象 不能添加到set里,如果返回不同那么他们就不是彻底的不相同 就可以添加到一个set里
楼主明白了吧,纯手打,希望对你有帮助
嘿嘿,这个就要说一下所谓的散列的概念了。像Set,Map这种东东在判断你的两个对象是否是一样的时候先回去判断你的hashCode方法返回的值是否一致,如果一致再去判断equals方法返回的值。所以,这个地方,你想玩的话,hashCode方法是需要重写的啦,像这种hashCode和equals方法在重写的时候有许多java规约性的东西,如果你想写好的话最好上网查查。这里顺便就说一下散列桶这个东西吧,在Set,Map这种容器里面存放对象数据的时候,这些数据以存在以hashCode为单位的散列桶里面的,hashCode相同的对象就会被放在同一个散列桶里面,在查找的时候会先定位到散列桶,然后再用equals方法去匹配散列桶里面的具体对象。所以,如果你定义的对象需要被存放在这类容器里面的话,hashCode和equals方法的重写就需要好好考虑一下了,不然会非常影响效率的。欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)