java: Set类及子类:TreeSet有序子类,HashSet无序子类:重复元素
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无序子类:重复元素的更多相关文章
- java:Set对象TreeSet有序子类,HashSet无序子类,重复对象二
		TreeSet有序子类; HashSet无序子类 重复重复元素,Object对象是通过equals和hashCode来进行过滤的. 如果将上一篇提到中的例子中的TreeSet,换成HashSet,那么 ... 
- Java 集合系列17之 TreeSet详细介绍(源码解析)和使用示例
		概要 这一章,我们对TreeSet进行学习.我们先对TreeSet有个整体认识,然后再学习它的源码,最后再通过实例来学会使用TreeSet.内容包括:第1部分 TreeSet介绍第2部分 TreeSe ... 
- Java的类的实例化顺序
		Java的类的实例化顺序 父类的静态数据 子类的静态数据 父类的成员变量 父类的构造方法 子类的成员变量 子类的构造方法 
- java代码实现将集合中的重复元素去掉
		package com.loaderman.test; import java.util.ArrayList; import java.util.LinkedHashSet; import java. ... 
- Java思考——HashSet集合如何保证元素的唯一性也就是不包含重复元素?
		首先将源码逐级找出来1.HashSet<String> hs=new HashSet<String>(); hs.add("hello"); ... 
- java 查找类的所有子类
		package _02; import java.io.File; import java.net.URL; public class MainTest_FindAllSubClass { publi ... 
- 编写Java程序,创建一个父类交通工具类(Vehicles),以及两个子类,分别是轿车类(Car)和卡车类(Truck)。
		返回本章节 返回作业目录 需求说明: 创建一个父类交通工具类(Vehicles),以及两个子类,分别是轿车类(Car)和卡车类(Truck). 父类有属性品牌(brand)和颜色(color). 在父 ... 
- java高并发系列 - 第23天:JUC中原子类,一篇就够了
		这是java高并发系列第23篇文章,环境:jdk1.8. 本文主要内容 JUC中的原子类介绍 介绍基本类型原子类 介绍数组类型原子类 介绍引用类型原子类 介绍对象属性修改相关原子类 预备知识 JUC中 ... 
- c++模板类被继承时他的成员不能被子类看到
		c++模板类被继承时他的成员不能被子类看到,必须用限定的符号 this->foo 或者 baseclass::foo,或者using bassclass::foo. msvc不提示错误,gcc ... 
随机推荐
- 初识Nginx及其LNMP搭建
			Nginx介绍 nginx www服务软件 俄罗斯人开发 开源 性能很高 web产品 大小780k c语言开发 本身是一款静态www软件,不能解析php jsp .do 最大特点 静态小文件(1m), ... 
- EncodeError: 'latin-1' codec can't encode characters in position 69-70: ordinal not in range(256)
			UnicodeEncodeError: 'latin-1' codec can't encode characters in position 69-70: ordinal not in range( ... 
- 【Spring】---属性注入
			一.Spring注入属性(有参构造和[set方法]) 注意:在Spring框架中只支持set方法.有参构造方法这两种方法. 使用有参数构造方法注入属性(用的不多,但需要知道): 实体类 package ... 
- Spring的应用上下文ApplicationContext
			HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes() ... 
- 如何用katalon录制回放一个web UI测试—— katalon学习笔记(四)
			,首先打开katanlon,进入到katalon主界面,选择点击file->new->project ,在创建新项目弹出框中Name输入项输入项目的名称:Type选择web,也就是你要测试 ... 
- Git push “fatal: Authentication failed ”
			Git push "fatal: Authentication failed " 问题原因 之前设置了两步验证 If you enabled two-factor authenti ... 
- Python中文件读写之 w+  与 r+ 到底有啥区别?
			其实r 是只读,只能读不能写,这是很明确的,但是r+是可读写,变成r+后还没太明白到底加了什么,还是照样写不了,有没有这样的体验呢,如下代码,只读时 f = open("test.txt&q ... 
- editText内容从hint右输入
			如何让editText内容从hint右输入呢: <EditText android:id="@+id/et_password" android:textColor=" ... 
- js swich
			<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8" ... 
- 第二次课程总结&学习总结
			Java实验报告 班级 计算机科学与技术一班 学号 20188390 姓名 宋志豪 实验 写一个名为Rectangle的类表示矩形.其属性包括宽width.高height和颜色color,width和 ... 
