• 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]

  • 相关阅读:
    muduo网络库TcpConnection对象生存期管理
    马:ma一个与代码无关的隐形眼镜的度数换算
    分享ORACLE数据库密码口令过期被锁后的解锁方法
    关于SVN状态图标不显示的解决办法(史上最全)
    Windows 新增远程桌面会话连接数(可多人同时远程桌面,互不影响)
    js移除字符串的中文/空格
    ORA-00059: 超出 DB_FILES 的最大值
    ORA-02292违反完整约束和ORA-02297无法禁用约束条件 cascade禁用主键
    SVN—org.apache.subversion.javahl.ClientException: Attempted to lock an already-locked dir
    js金额格式化
  • 原文地址:https://www.cnblogs.com/achengmu/p/7469044.html
Copyright © 2020-2023  润新知