java: Set类及子类:TreeSet有序子类,HashSet无序子类:重复元素
2017-09-03 10:56
399 查看
Set类及子类:
TreeSet有序子类;
HashSet无序(散列)子类
HashSet子类的内容是没有顺序的,单个元素也不会重复的(对象除外)。
TreeSet有序:
TreeSet子类实现了SortSet子类(排序)接口,TreeSet接口是可以排序的。
向TreeSet类中添加自定义对象时,该自定义对象需要复写Comparable接口中的CompareTo排序方法,否则会报:类转换异常
java.lang.ClassCastException
可能需要在复写toString()方法,否则打印的时候报错:
[org.conllection.Person@139a55, org.conllection.Person@1db9742, org.conllection.Person@106d69c]
例如:
添加数据时,有一个自定义类:Person类,2个元素,Name(名字),age(年龄),如果用年龄排序,重复年龄会被剔除掉
person:
setdemo2:
结果如下:
所以,应该在Comparable的CompareTo方法里面在判断name是否重复。
修改后:
结果如下:
[姓名:张三, 年龄:30, 姓名:李四, 年龄:30, 姓名:王五, 年龄:31, 姓名:赵六, 年龄:31, 姓名:田七, 年龄:32]
TreeSet有序子类;
HashSet无序(散列)子类
HashSet子类的内容是没有顺序的,单个元素也不会重复的(对象除外)。
Set<String> allSet = new HashSet<String>(); allSet.add("a"); //重复数据 allSet.add("b"); allSet.add("b"); allSet.add("c"); allSet.add("d"); //重复数据 allSet.add("e"); allSet.add("e"); allSet.add("f"); System.out.println(allSet);
TreeSet有序:
TreeSet子类实现了SortSet子类(排序)接口,TreeSet接口是可以排序的。
向TreeSet类中添加自定义对象时,该自定义对象需要复写Comparable接口中的CompareTo排序方法,否则会报:类转换异常
java.lang.ClassCastException
可能需要在复写toString()方法,否则打印的时候报错:
[org.conllection.Person@139a55, org.conllection.Person@1db9742, org.conllection.Person@106d69c]
例如:
添加数据时,有一个自定义类:Person类,2个元素,Name(名字),age(年龄),如果用年龄排序,重复年龄会被剔除掉
person:
public class Person implements Comparable<Person> { private String name; private int age; public Person(String name, int age) { 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 "姓名:" + name + ", 年龄:" + age + ""; } public int compareTo(Person o) { // TODO 自动生成的方法存根 if(this.age > o.age) { return 1; }else if(this.age < o.age) { return -1; }else{ return 0; } } }
setdemo2:
Set<Person> allSet = new TreeSet<Person>(); allSet.add(new Person("张三",30)); allSet.add(new Person("李四",30)); allSet.add(new Person("王五",31)); allSet.add(new Person("赵六",31)); allSet.add(new Person("田七",32)); System.out.println(allSet);
结果如下:
[姓名:张三, 年龄:30, 姓名:王五, 年龄:31, 姓名:田七, 年龄:32]
所以,应该在Comparable的CompareTo方法里面在判断name是否重复。
修改后:
public int compareTo(Person o) { // TODO 自动生成的方法存根 if(this.age > o.age) { return 1; }else if(this.age < o.age) { return -1; }else{ //如果age年龄相同需要在判断name,是否重复 return this.name.compareTo( o.name ); } }
结果如下:
[姓名:张三, 年龄:30, 姓名:李四, 年龄:30, 姓名:王五, 年龄:31, 姓名:赵六, 年龄:31, 姓名:田七, 年龄:32]
相关文章推荐
- java:Set对象TreeSet有序子类,HashSet无序子类,重复对象二
- 整理的Java List Set Map是否有序,元素是否允许重复
- 整理的Java List Set Map是否有序,元素是否允许重复
- java怎么判断两个Set 里的对象的值是否相同【两个set中的值是否相等】、java treeset和hashset如何判断元素是否相同【即对象是否完全相同;利用一个set去除重复元素】
- 整理的Java List Set Map是否有序,元素是否允许重复
- java集合系列——Set之HashSet和TreeSet介绍(十)
- Java面试题:用什么方法来区分Set里的元素是否重复
- Java基础-17总结,登录注册案例,Set集合,HashSet,TreeSet,LinkHashSet
- Java中Set包含重复元素的问题
- [bxd学习java基本点]10.set元素不重复,取元素顺序会变的。TreeSet取值时,是安顺序来的。
- 排序及重复元素去重的说明,TreeSet,HashSet
- java集合系列——Set之HashSet和TreeSet介绍(十)
- java中set集合如何去除重复元素
- Java基础-17总结,登录注册案例,Set集合,HashSet,TreeSet,LinkHashSet
- java的集合中的Set以及set的实现类HashSet和TreeSet
- Java记录 -56- 详解HashSet不含重复元素的实现
- java 实现从无序数组中 找出第k大的数, 无序数组充许有重复元素
- Java学习疑点(6)--Set集合添加元素时底层如何实现无重复元素?
- <顺序表>从一个无序顺序表(也可以有序)中删除重复的元素,并使剩余元素间的相对次序保持不变
- 30、Java中Set集合之HashSet、TreeSet和EnumSet