Set类及子类:

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无序子类:重复元素的更多相关文章

  1. java:Set对象TreeSet有序子类,HashSet无序子类,重复对象二

    TreeSet有序子类; HashSet无序子类 重复重复元素,Object对象是通过equals和hashCode来进行过滤的. 如果将上一篇提到中的例子中的TreeSet,换成HashSet,那么 ...

  2. Java 集合系列17之 TreeSet详细介绍(源码解析)和使用示例

    概要 这一章,我们对TreeSet进行学习.我们先对TreeSet有个整体认识,然后再学习它的源码,最后再通过实例来学会使用TreeSet.内容包括:第1部分 TreeSet介绍第2部分 TreeSe ...

  3. Java的类的实例化顺序

    Java的类的实例化顺序 父类的静态数据 子类的静态数据 父类的成员变量 父类的构造方法 子类的成员变量 子类的构造方法

  4. java代码实现将集合中的重复元素去掉

    package com.loaderman.test; import java.util.ArrayList; import java.util.LinkedHashSet; import java. ...

  5. Java思考——HashSet集合如何保证元素的唯一性也就是不包含重复元素?

    首先将源码逐级找出来1.HashSet<String> hs=new HashSet<String>();         hs.add("hello"); ...

  6. java 查找类的所有子类

    package _02; import java.io.File; import java.net.URL; public class MainTest_FindAllSubClass { publi ...

  7. 编写Java程序,创建一个父类交通工具类(Vehicles),以及两个子类,分别是轿车类(Car)和卡车类(Truck)。

    返回本章节 返回作业目录 需求说明: 创建一个父类交通工具类(Vehicles),以及两个子类,分别是轿车类(Car)和卡车类(Truck). 父类有属性品牌(brand)和颜色(color). 在父 ...

  8. java高并发系列 - 第23天:JUC中原子类,一篇就够了

    这是java高并发系列第23篇文章,环境:jdk1.8. 本文主要内容 JUC中的原子类介绍 介绍基本类型原子类 介绍数组类型原子类 介绍引用类型原子类 介绍对象属性修改相关原子类 预备知识 JUC中 ...

  9. c++模板类被继承时他的成员不能被子类看到

    c++模板类被继承时他的成员不能被子类看到,必须用限定的符号 this->foo  或者 baseclass::foo,或者using bassclass::foo. msvc不提示错误,gcc ...

随机推荐

  1. Jmeter之线程组(默认)

    Jmeter中的采样器必须要基于线程组. 一.添加线程组 在测试计划上右键,然后选择,如下图: 二.线程组界面 三.线程组界面配置说明 1.名称:线程组自定义名称: 2.注释:添加的一些备注说明信息, ...

  2. 6.k8s.存储Volume.PV.PVC

    #Volume Volume 解决数据持久化和容器间共享数据 Kubernetes支持几十种类型的后端存储卷 #hostPath挂载实例,挂载Node节点/tmp/test-volume目录到容器/t ...

  3. Debian或者Ubuntu中安装secureCRT/secureFX

    1.官网下载 ubuntu 下的 xx.deb安装包.此处使用的安装包是scrt-sfx-8.5.4-1942.ubuntu16-64.x86_64.deb,点击下载,提取码:5em3. 2.安装 d ...

  4. 数组Array用法

    一 创建数组 // 指定长度(稀疏数组) const arr1 = Array(2); console.log(arr1); const arr2 = new Array(4); console.lo ...

  5. MySQL8 clone plugin

    安装MySQl8.0.17 下载 MySQL8.0.17 二进制版本 https://dev.mysql.com/downloads/mysql/ 解压,修改权限 -linux-glibc2.-x86 ...

  6. hive数据去重

    Hive是基于Hadoop的一个数据仓库工具,可以将结构化的数据文件映射为一张数据库表,并提供类SQL查询功能 hive的元数据存储:通常是存储在关系数据库如 mysql(推荐) , derby(内嵌 ...

  7. Codeforces 1255E Send Boxes to Alice(前缀和+枚举+数论)

    我们考虑前缀和sum[i],如果将a[i+1]中的一个塞入a[i]中,则不影响sum[i+1],但是sum[i]++,如果将a[i]中的一个塞入a[i+1],则不影响sum[i+1],但是sum[i] ...

  8. [LeetCode] 95. 不同的二叉搜索树 II

    题目链接 : https://leetcode-cn.com/problems/unique-binary-search-trees-ii/ 题目描述: 给定一个整数 n,生成所有由 1 ... n ...

  9. linux:服务器代理squid安装配置

    国内上往外的网站太慢,配了个香港代理服务器.如下:当前环境: centos系统.香港服务器IP(假设:59.188.71.11)检查squid是否安装:[root@localhost ~]# rpm ...

  10. mongodb连接警告修复

    问题 Node.js中mongoose模块连接MongoDB数据库时提示(node:12580) DeprecationWarning: current URL string parser is de ...