本章目标
掌握TreeSet的排序原理
掌握Set接口中重复元素的定义
关于TreeSet的排序说明
一个普通的类对象是不能向TreeSet集合中加入的,如果直接加入会出现以下的异常:
——java.lang.ClassCastException
如果要想使用TreeSet则对象所在的类必须实现Compable接口
排序类
import java.util.Set; import java.util.TreeSet; class Person implements Comparable<Person>{//定义 Person 类,实现比较器 private String name;//定义 name 属性 private int age;//定义 age 属性 public Person(String name, int age) {//通过构造方法为属性赋值 this.name = name;//为 name 属性赋值 this.age = age;//为 age 属性赋值 } public String toString(){//覆写 toString() 方法 return "姓名:"+this.name+";年龄:"+this.age; } public int compareTo(Person per){//覆写 compareTo() 方法,指定排序规则 if(this.age > per.age){//按照年龄排序 return 1; }else if(this.age <per.age){ return -1; }else{ return 0; } } } public class TreeSetDemo03 { public static void main(String[] args){ Set<Person> allSet = new TreeSet<Person>();//实例化 Set 接口对象 allSet.add(new Person("张三", 30));//加入元素 allSet.add(new Person("李四", 31));//加入元素 allSet.add(new Person("王五", 32));//加入元素 allSet.add(new Person("王五", 32));//重复元素,不能加入 allSet.add(new Person("王五", 32));//重复元素,不能加入 allSet.add(new Person("赵六", 33));//加入元素 allSet.add(new Person("孙七", 33));//年龄重复 System.out.println(allSet);//输出集合,调用 toString() } /* 结果: * [姓名:张三;年龄:30, 姓名:李四;年龄:31, 姓名:王五;年龄:32, 姓名:赵六;年龄:33] * */ }
关于重复元素的说明
Set接口中是不允许存放重复元素的
一个类的对象是否重复需要依靠Object类中的以下方法完成:
——hashCode():指定哈希码
——equals():对象比较
重复对象判断
import java.util.HashSet; import java.util.Set; class Person {//定义 Person 类,实现比较器 private String name;//定义 name 属性 private int age;//定义 age 属性 public Person(String name, int age) {//通过构造方法为属性赋值 this.name = name;//为 name 属性赋值 this.age = age;//为 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(){//覆写 hashCode() 方法 return this.name.hashCode()*this.age;//指定编码公式 } public String toString(){//覆写 toString() 方法 return "姓名:"+this.name+";年龄:"+this.age; } } public class RepeatDemo02 { public static void main(String[] args){ Set<Person> allSet = new HashSet<Person>();//实例化 Set 接口对象 allSet.add(new Person("张三", 30));//加入元素 allSet.add(new Person("李四", 31));//加入元素 allSet.add(new Person("王五", 32));//加入元素 allSet.add(new Person("王五", 32));//重复元素,不能加入 allSet.add(new Person("王五", 32));//重复元素,不能加入 allSet.add(new Person("赵六", 33));//加入元素 allSet.add(new Person("孙七", 33));//年龄重复 System.out.println(allSet);//输出集合,调用 toString() } /* 结果: * [姓名:张三;姓名:30, 姓名:李四;姓名:31, 姓名:王五;姓名:32, 姓名:赵六;姓名:33] * */ }
相关推荐
无论哪种情况,我们返回`head`作为处理后的链表头节点,因为所有需要删除的重复元素都已被删除。 总的来说,这个问题的核心在于通过遍历链表并比较相邻节点的值来找到并删除重复元素。这种方法的时间复杂度是O(n),...
当我们面对包含重复元素的排列问题时,我们需要考虑如何有效地生成所有可能的排列,并解决与这些排列相关的计算挑战。这个问题在数据结构、图论、组合优化以及计算机程序设计竞赛等领域都有广泛的应用。 首先,让...
在VB.NET编程中,处理数组时经常会遇到需要删除重复元素的情况。这有助于优化数据结构,减少内存占用,尤其是在处理大量数据时。本示例提供的源码和可执行程序旨在演示如何在VB.NET环境中有效地实现这一功能。以下是...
如果当前节点的值等于下一个节点的值,说明找到了重复元素,此时我们直接跳过下一个节点(即更新`$current->next`为下一个节点的下一个节点)。如果值不相同,则`$current`向后移动一位。最后返回`$head`,完成链表...
删除排序链表中的重复元素 II”要求我们在已排序的链表中,删除相邻的重复元素。与原问题“删除排序链表中的重复元素”不同,这里要求删除的是连续重复的元素,而非任意重复元素。 例如,对于链表 1->1->2->3->3->...
冒泡排序是一种基础的排序算法,它的基本思想是通过相邻元素之间的比较和交换,使得每一次遍历都能将最大(或最小)的元素“浮”到序列的末尾。在本例中,排序的目标是字符串中的字符,因此是按照ASCII码值从小到大...
首先,我们假设数组的第一个元素已经排序好,然后从第二个元素开始,依次将每个元素插入到已排序部分的正确位置。这个过程会不断重复,直到所有元素都被插入到正确的位置。插入排序的时间复杂度在最好情况(已排序)...
如果存在重复,说明无法排序;若没有重复,则可以进行壕排序。 **排序算法:** 1. **插入排序(Insertion Sort)**: 插入排序的基本思想是,将未排序的元素逐个插入到已排序部分的正确位置。在这个问题中,如果...
在Java编程中,找出两个数组中的重复元素是一个常见的问题,特别是在数据处理和算法设计中...以上就是关于“java求两个数组中重复元素源代码”的详细解析,涵盖了数组操作、重复元素查找、代码实现及优化等方面的知识。
冒泡排序是一种简单的排序算法,通过重复遍历列表,比较相邻元素并交换位置来排序。它会重复地遍历要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来。遍历数列的工作是重复地进行直到没有再需要...
以下是关于Java实现的七种排序算法的详细说明: 1. **冒泡排序(Bubble Sort)**: 冒泡排序是一种简单的排序算法,通过不断交换相邻两个元素的位置来逐步将较大的元素推向数组的后部。它的主要思想是重复遍历数组...
它的工作原理是通过重复地遍历待排序的列表,找到最小(或最大)的元素,然后将其与列表的第一个元素交换。这个过程会持续到整个列表排序完成。选择排序的时间复杂度为O(n^2),其中n是列表的元素数量。尽管效率相对...
冒泡排序是一种简单的排序算法,重复地遍历待排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来。遍历数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。`BubbleSort.cpp`...
031305_【第13章:Java类集】_排序及重复元素说明笔记.pdf 031306_【第13章:Java类集】_SortedSet接口笔记.pdf 031307_【第13章:Java类集】_Iterator接口笔记.pdf 031308_【第13章:Java类集】_ListIterator接口...
3. **遍历并查找重复元素**:遍历排序后的数组,我们只需要检查相邻的元素是否相等即可找到重复的元素。这是因为重复的元素会与其重复的副本相邻。在C++的代码中,使用一个for循环`for(int i=0; i; i++)`来遍历数组...
在处理排序链表时,有时我们需要去除其中的重复元素,以确保每个元素仅出现一次。本篇文章将详细介绍如何使用Java实现删除排序链表中的重复元素。 首先,我们需要定义链表节点类`ListNode`,它包含一个整数值`val`...
冒泡排序是一种简单的排序算法,它的基本思想是通过重复遍历待排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来。遍历数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。这...
冒泡排序是一种简单的排序算法,其基本思想是通过重复地遍历要排序的列表,比较相邻的两个元素,如果它们的顺序错误就把它们交换过来。遍历列表的工作是重复进行的,直到没有再需要交换的元素,也就是说该列表已经...
冒泡排序是一种简单的排序算法,它重复地遍历待排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来。遍历数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。这个算法的名字...