黑马程序员技术交流社区
标题: Set里的equals()和iterator()方法 [打印本页]
作者: 李九一 时间: 2013-6-29 09:55
标题: Set里的equals()和iterator()方法
Set里的元素是不能重复的,那么用iterator()方法来区分重复与否。equals()是判读两个Set是否相等。
equals()和==方法决定引用值是否指向同一对象equals()在类中被覆盖,为的是当两个分离的对象的内容和类型相配的话,返回真值。
作者: zms2100 时间: 2013-6-29 10:21
见Lz的问题,我想起《银河系漫游指南》中的一句话,你的问题是什么?我才能给出答案。(不太准确,类似啊,是关于那个终极问题到底是什么的话)
就我的理解:
1、Set集合中保证元素唯一性分两种情况: HashSet和TreeSet的不同实现;
存储到HashSet的类对象要: 复写hashCode方法和equals方法来保证元素的唯一性。
存储到TreeSet的类对象要: 复写compareTo方法(实现Comparable接口)或者compare方法(使用实现Comparator的比较器)中的来保证元素的唯一性。
2、iterator()方法是实现Iterator接口获得的创建迭代器实例对象方法(从JDK1.5开始有此接口,之前直接嵌套在Collection内部),这是迭代/遍历集合中元素的方法,而不是比较重复性;
3、equals()方法,因为HashSet只需比较两个对象元素是否相同,无需其他排序(自动进行哈希表排序),所以复写hashCode和equals方法;
而TreeSet需要进行自然排序或指定排序方式,它内部比较两个对象元素时可能是通过equals来比较两个对象,但是比较的方式是通过对象内部的compareTo()方法或指定比较器的compare()方法来进行排序。(此处对象类中的equals无需复写,比较两个对象时自动调用对象自身等的比较方式);
4、equals()和hashCode()等方法还起到判断元素是否存在于Set集合中、删除元素等的功能。
作者: 王楚鑫 时间: 2013-6-29 13:29
本帖最后由 王楚鑫 于 2013-6-29 13:33 编辑
见Lz的问题,我想起《银河系漫游指南》中的一句话,你的问题是什么?我才能给出答案。
保持队形吗???(*^__^*) 嘻嘻……
就我的理解:
Set接口实现了Collection接口,Set接口不允许存放重复的对象,排序方式为按照自身内部的排序规则。
Set接口的常用方法:iterator()方法返回一个迭代器,
equals()方法能快速且准确的判断在集合中是否存在与添加对象相同的对象。
附上个iterator()使用的代码- import java.util.HashSet;
- import java.util.Iterator;
- import java.util.Set;
- public class DemoHashSet {
- private String name; // 姓名属性
- private long id_card; // 证件号码属性
- public DemoHashSet(String name, long id_card) { // 构造方法
- this.name = name;
- this.id_card = id_card;
- }
- public long getId_card() { // 获取证件号码属性的方法
- return id_card;
- }
- public void setId_card(long id_card) { // 设置证件号码属性的方法
- this.id_card = id_card;
- }
- public String getName() { // 获取姓名属性的方法
- return name;
- }
- public void setName(String name) { // 设置姓名属性的方法
- this.name = name;
- }
- public static void main(String[] args) {
- Set<DemoHashSet> hashSet = new HashSet<DemoHashSet>(); // 创建Set集合对象
- hashSet.add(new DemoHashSet("陈同学", 220181)); // 向集合中添加对象
- hashSet.add(new DemoHashSet("王同学", 220186));
- hashSet.add(new DemoHashSet("李同学", 220193));
- Iterator<DemoHashSet> it = hashSet.iterator(); // 创建集合迭代器
- System.out.println("集合中的元素是:");
- while (it.hasNext()) { // 循环遍历迭代器
- DemoHashSet person = it.next();
- System.out.println(person.getName() + " " + person.getId_card());
- }
- }
- }
复制代码 equals()方法和==的区别:
1.==可用于基本类型和引用类型:当用于基本类型时候,是比较值是否相同;当用于引用类型的时候,是比较对象是否相同。
2.对于String a = “a”; Integer b = 1;这种类型的特有对象创建方式,==的时候值是相同的。
3.基本类型没有equals方法,equals只比较值(对象中的内容)是否相同(相同返回true)。
4.一个类如果没有定义equals方法,它将默认继承Object中的equals方法,返回值与==方法相同。
作者: 神之梦 时间: 2013-6-29 14:40
《银河系漫游指南》这个是神马?
作者: zms2100 时间: 2013-6-29 19:38
一本科幻小说书,也有电影版,电影的剪辑有点菜,不过还是值得看,O(∩_∩)O~
在国外是挺畅销的书,传说小说男猪脚的名字还成为现实中一个小行星的名字,呵呵
作者: 神之梦 时间: 2013-6-29 23:10
{:3_56:}
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) |
黑马程序员IT技术论坛 X3.2 |