zoukankan      html  css  js  c++  java
  • 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]

  • 相关阅读:
    IIS的FTP出错: 451 No mapping for the unicode character exists in the target multibyte code page
    silverlight中AES加密RijndaelManaged的使用
    ManualResetEvent详解
    Silverlight如何与JS相互调用
    SQL Server 2008备份策略设计
    mysql 服务无法启动
    Silverlight Resource
    TCP 烟囱卸载
    .net程序 混淆、强签名、加密
    开源客户关系管理系统SplendidCRM下的二次开发
  • 原文地址:https://www.cnblogs.com/achengmu/p/7469044.html
Copyright © 2011-2022 走看看