【Java类集】_排序及重复元素说明笔记(实例亲测)
来源:互联网 发布:linux所有版本 编辑:程序博客网 时间:2024/05/19 16:51
【Java类集】_排序及重复元素说明笔记(实例亲测)
分类: Java
【Java类集】_排序及重复元素说明笔记
本章目标:
掌握TreeSet的排序原理
掌握Set接口中重复元素的定义
3.具体内容:
TreeSet类的内容是可以排序的,那么现在我任意给出一个类,观察能否进行排序的操作。
执行时出现了以下的错误:
Exception in thread "main" java.lang.ClassCastException: Person cannot be cast t
o java.lang.Comparable
at java.util.TreeMap.put(Unknown Source)
at java.util.TreeSet.add(Unknown Source)
at TreeSetDemo02.main(TreeSetDemo02.java:22)
修改代码如下:
此时,去掉的重复元素并不是真正意义上的重复元素的取消。
此时,并没有去掉重复的元素,那么重复元素该如何去掉呢?
如果要想取消掉重复元素,则需要Object类中的两个方法帮助:
hashCode(); 表示一个唯一的编码,一般通过计算表示。
equals(); 进行对象的比较操作。
如果要想使用Set,则就必须注意以上的两个问题。
4.总结:
1.之前曾经强调过,一个好的类应该覆写Object类中的equals()、hashCode()、toString()三个方法,实际上在String中已经全部覆写完成了。
2.Set接口依靠hashCode()和equals()完成重复元素的判断,关于这一点在日后的Map接口中也有体现
3.TreeSet依靠Comparable接口完成排序的操作(需覆写CompareTo()方法)。
本章目标:
掌握TreeSet的排序原理
掌握Set接口中重复元素的定义
3.具体内容:
TreeSet类的内容是可以排序的,那么现在我任意给出一个类,观察能否进行排序的操作。
- import java.util.Set;
- import java.util.TreeSet;
- class Person{
- private String name;
- private int age;
- public Person(String name,int age){
- this.name = name;
- this.age = age;
- }
- public String toString(){
- return "姓名:"+this.name+";年龄:"+this.age;
- }
- }
- public class TreeSetDemo02{
- public static void main(String args[]){
- Set<Person> allSet = new TreeSet<Person>();
- allSet.add(new Person("张三",30));
- allSet.add(new Person("李四",31));
- allSet.add(new Person("王五",31));
- allSet.add(new Person("王五",32));
- allSet.add(new Person("赵六",33));
- allSet.add(new Person("孙七",34));
- allSet.add(new Person("张三",35));
- System.out.println(allSet);
- }
- }
执行时出现了以下的错误:
Exception in thread "main" java.lang.ClassCastException: Person cannot be cast t
o java.lang.Comparable
at java.util.TreeMap.put(Unknown Source)
at java.util.TreeSet.add(Unknown Source)
at TreeSetDemo02.main(TreeSetDemo02.java:22)
修改代码如下:
- import java.util.Set;
- import java.util.TreeSet;
- 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 toString(){
- return "姓名:"+this.name+";年龄:"+this.age+"\n";
- }
- public int compareTo(Person per){//此方法一定要与equals区分开,虽然容易混淆
- if(this.age>per.age){
- return 1;
- }else if(this.age<per.age){
- return 0;
- }else{
- return this.name.compareTo(per.name);//调用String中的compareTo()方法
- }
- }
- }
- public class TreeSetDemo02{
- public static void main(String args[]){
- Set<Person> allSet = new TreeSet<Person>();
- allSet.add(new Person("张三",30));
- allSet.add(new Person("李四",31));
- allSet.add(new Person("王五",31));
- allSet.add(new Person("王五",32));
- allSet.add(new Person("赵六",33));
- allSet.add(new Person("孙七",34));
- allSet.add(new Person("张三",35));
- System.out.println(allSet);
- }
- }
此时,去掉的重复元素并不是真正意义上的重复元素的取消。
- import java.util.Set;
- import java.util.HashSet;
- class Person{
- private String name;
- private int age;
- public Person(String name,int age){
- this.name = name;
- this.age = age;
- }
- public String toString(){
- return "姓名:"+this.name+";年龄:"+this.age+"\n";
- }
- }
- public class TreeSetDemo03{
- public static void main(String args[]){
- Set<Person> allSet = new HashSet<Person>();
- allSet.add(new Person("张三",30));
- allSet.add(new Person("李四",31));
- allSet.add(new Person("王五",32));
- allSet.add(new Person("王五",32));
- allSet.add(new Person("赵六",33));
- allSet.add(new Person("孙七",34));
- allSet.add(new Person("张三",35));
- System.out.println(allSet);
- }
- }
此时,并没有去掉重复的元素,那么重复元素该如何去掉呢?
如果要想取消掉重复元素,则需要Object类中的两个方法帮助:
hashCode(); 表示一个唯一的编码,一般通过计算表示。
equals(); 进行对象的比较操作。
- import java.util.Set;
- import java.util.TreeSet;
- class Person{
- private String name;
- private int age;
- public Person(String name,int age){
- this.name = name;
- this.age = age;
- }
- public String toString(){
- return "姓名:"+this.name+";年龄:"+this.age;
- }
- public boolean equals(Object obj){//覆写equals,完成对象比较
- if(this==obj){
- return true;
- }
- if(!(obj instanceof Person)){
- return false;
- }
- Person p = (Person)obj;//向下转型
- if(this.name.equals(p.name)&&this.age==p.age){
- return true;
- }else{
- return false;
- }
- }
- public int hashCode(){
- return this.name.hashCode()*this.age;
- }
- public String toString(){
- return "姓名:"+this.name+";年龄:"+this.age;
- }
- }
- public class RepeatDemo02{
- public static void main(String args[]){
- Set<Person> allSet = new HashSet<Person>();
- allSet.add(new Person("张三",30));
- allSet.add(new Person("李四",31));
- allSet.add(new Person("王五",32));
- allSet.add(new Person("王五",32));
- allSet.add(new Person("赵六",33));
- allSet.add(new Person("孙七",34));
- allSet.add(new Person("张三",35));
- System.out.println(allSet);
- }
- }
如果要想使用Set,则就必须注意以上的两个问题。
4.总结:
1.之前曾经强调过,一个好的类应该覆写Object类中的equals()、hashCode()、toString()三个方法,实际上在String中已经全部覆写完成了。
2.Set接口依靠hashCode()和equals()完成重复元素的判断,关于这一点在日后的Map接口中也有体现
3.TreeSet依靠Comparable接口完成排序的操作(需覆写CompareTo()方法)。
0 0
- 【Java类集】_排序及重复元素说明笔记(实例亲测)
- 【Java类集】_排序及重复元素说明笔记(实例亲测)
- Java类集 _排序及重复元素说明
- java类集--排序及重复元素说明
- JAVA类集----Set接口排序及重复元素说明
- 算法笔记 //05_有重复元素的排列问题(针对字母排序)
- 快速排序(Java),针对重复元素
- Java反射实例及说明
- 【Java类集】_foreach及Enumeration接口笔记(实例亲测)
- 【Java类集】_foreach及Enumeration接口笔记(实例亲测)
- java数组元素重复次数及重复次数的最大值
- 排序单链表去重复元素
- Selenuim+Python之元素定位总结及实例说明
- Java实现单链表(已排序)去重(保留重复元素第一次出现的节点)
- Java实现-删除排序链表的重复元素1
- Java实现-删除排序链表中的重复元素2
- java-reflect 常用方法说明及实例
- JAVA注解说明及应用实例
- Documentation目录下binfmt_misc文档的翻译
- HDU 1018 求阶乘的位数
- pushlet给特定用户,分组,群发推送消息(新手亲测,解决新手使用遇到的困难!)
- 【Java类集】_Set接口笔记(实例亲测)
- Python快速入门
- 【Java类集】_排序及重复元素说明笔记(实例亲测)
- 【Java类集】_SortedSet接口笔记(实例亲测)
- 内部排序--冒泡排序,快速排序
- Threads are going to be renewed over time to try and avoid a probable memory leak.
- 【Java类集】_Iterator接口笔记(实例亲测)
- 【Java类集】_ListIterator接口笔记(实例亲测)
- BZOJ 1507 NOI 2003 Editor Splay
- 【Java类集】_foreach及Enumeration接口笔记(实例亲测)
- 顺序栈实现 马踏棋盘