Set集合重复元素的判断
2015-04-03 19:08
411 查看
Set集合比较特殊,他的方法基本上和Collection接口的方法一致,并且他没有根据索引得到对应值的get(int index)方法. 更重要的是Set集合不能放置重复的元素.她是怎么判断的呢?那么,我们首先要让对象具有比较性
一,存储的自定义对象实现接口 Comparable
复写public int compareTo()方法. 返回0表示二者相等. 如果返回大于0的整数(一般写1),则认为该对象大于比较的对象.如果返回小于0的整数(一般是-1),则认为该对象小于比较的对象.
下面我们定义一个类Person,如果对象的年龄相等,我们就认为这两个对象相等
运行结果为:
Person [name=Tom, age=20]
Person [name=Jim, age=21]
size = 2
由此分析,在操作treeSet.add(new Person(“Jim”, 20));的时候认为他是一个相同的对象,那么就无法再放入了
二,存储的自定义对象实现接口 Comparable
结果是:
Person [name=Tom, age=20]
Person [name=Jim, age=21]
size = 2
存入了两个结果.
treeSet.add(new Person(“Jim”, 20)); Jim的年龄和Tom相同被认为是一样的对象
一,存储的自定义对象实现接口 Comparable
复写public int compareTo()方法. 返回0表示二者相等. 如果返回大于0的整数(一般写1),则认为该对象大于比较的对象.如果返回小于0的整数(一般是-1),则认为该对象小于比较的对象.
下面我们定义一个类Person,如果对象的年龄相等,我们就认为这两个对象相等
public static void main(String[] args) { testTreeSet(); } private static void testTreeSet() { TreeSet<Person> treeSet = new TreeSet<Person>(); treeSet.add(new Person("Tom", 20)); treeSet.add(new Person("Jim", 21)); treeSet.add(new Person("Jim", 20)); Iterator<Person> it = treeSet.iterator(); while (it.hasNext()) { Person p = it.next(); System.out.println(p.toString()); } System.out.println("size = "+treeSet.size()); } static class Person implements Comparable<Person> { private String name; private int age; public Person(String name, int age) { super(); this.name = name; this.age = 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; } @Override public int hashCode() { System.out.println("hashcode " + 17 * age); return 17 * age; } @Override public boolean equals(Object obj) { Person p = (Person) obj; boolean b = (this.age == p.getAge()); if (b) { System.out.println("一样 " + this.toString() + " " + p.toString()); } else { System.out.println("不一样 " + this.toString() + " " + p.toString()); } return b; } @Override public String toString() { return "Person [name=" + name + ", age=" + age + "]"; } @Override public int compareTo(Person o) { if (this.age == o.getAge()) { return 0; } if (this.age > o.getAge()) { return 1; } return -1; } }
运行结果为:
Person [name=Tom, age=20]
Person [name=Jim, age=21]
size = 2
由此分析,在操作treeSet.add(new Person(“Jim”, 20));的时候认为他是一个相同的对象,那么就无法再放入了
二,存储的自定义对象实现接口 Comparable
public static void main(String[] args) { testTreeSet(); } private static void testTreeSet() { TreeSet<Person> treeSet = new TreeSet<Person>(new Comparator<Person>() { @Override public int compare(Person o1, Person o2) { if (o1.getAge() == o2.getAge()) { return 0; } if (o1.getAge() > o2.getAge()) { return 1; } return -1; } }); treeSet.add(new Person("Tom", 20)); treeSet.add(new Person("Jim", 21)); treeSet.add(new Person("Jim", 20)); Iterator<Person> it = treeSet.iterator(); while (it.hasNext()) { Person p = it.next(); System.out.println(p.toString()); } System.out.println("size = "+treeSet.size()); } static class Person { private String name; private int age; public Person(String name, int age) { super(); this.name = name; this.age = 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; } @Override public String toString() { return "Person [name=" + name + ", age=" + age + "]"; } }
结果是:
Person [name=Tom, age=20]
Person [name=Jim, age=21]
size = 2
存入了两个结果.
treeSet.add(new Person(“Jim”, 20)); Jim的年龄和Tom相同被认为是一样的对象
相关文章推荐
- 怎样判断set集合元素是否可以重复存取
- 怎样判断set集合元素是否可以重复存取
- 通过set集合判断一个集合的元素是否重复
- JDK源码阅读之Set不重复元素集合接口
- java怎么判断两个Set 里的对象的值是否相同【两个set中的值是否相等】、java treeset和hashset如何判断元素是否相同【即对象是否完全相同;利用一个set去除重复元素】
- List和Set之间的转换:达到集合元素去重复
- [Set集合]利用Set集合的不重复元素的特性来实现数组去重
- Java中的Set接口,了解如何判断是否重复元素。
- Java判断一个值,或者对象是否存在list集合中和去掉list集合中重复的元素
- 第二百九十八节,python操作redis缓存-Set集合类型,可以理解为不能有重复元素的列表
- 使用HashSet<>去除重复元素的集合
- set练习:集合元素判断
- Java 集合(List、Set)遍历、判断、删除元素时的小陷阱
- 判断Set里的元素是否重复、==、equals、hashCode方法研究-代码演示
- Set和数学中的集合是同一个概念,就是没有重复元素的集合。
- SetUniqueList使List集合中的元素没有重复值
- Set集合没有重复的元素
- [2016/12/1]判断是否存在重复元素 -- c++ set的巧妙用法
- Set集合去除重复元素
- java中set集合如何去除重复元素