迭代器中set的使用

今天对迭代器中的set方法进行了一下简单的使用,由于之前使用过list方法,所以将他与list进行了一下对比。

list中加入对象时不会进行查重,也就是只要是一个符合的对象就可以加到list中,而对于set来说他是一个不能有重复的集合,会对其进行一个查重。另外两种集合对排序的方法也是不一样的,对于list来说,你可以先将其存在集合中,然后调用方法,对list进行一次排序,而对于set来说,他是在用TreeSet集合在向集合的添加的过程中就做了一个简单的排序,第一次使用这种方法,对其中的具体原理还是不太了解,感觉在使用过程中主要就是这些区别。

以下是两种方法的使用

package iterator;

import java.util.ArrayList;

import java.util.Collections;
import java.util.Comparator;

import java.util.List;
import java.util.Set;
import java.util.TreeSet;

import javax.net.ssl.SNIHostName;
public class Client {

    public static void main(String[] args) {
    
        List<Student> list = listStudent();
        
        System.out.println("使用list进行遍历");
        listASC(list);
        listDESC(list);
        setASC();
        setDESC();
        
        
        
    }
    
    //将数组存储在set中
    public static void setASC()
    {
        System.out.println("使用set进行顺序输出");
        Set<Student> set = new TreeSet<Student>(new setCompare()) ;
        set.add(new Student(3, "李四", 19));
        set.add(new Student(2, "张", 18));
        set.add(new Student(5, "李", 19));
        set.add(new Student(1, "王五", 18));
        set.add(new Student(6, "赵柳", 19));
        
        for(Student stu: set)
        {
            System.out.println("学号:" + stu.getId() + "  姓名:" + stu.getName() + "  年龄:" + stu.getAge());
        }
        
    }
    
    //将数组存储在set中
    public static void setDESC()
    {
        System.out.println("使用set进行逆序输出");
        Set<Student> set = new TreeSet<Student>(new setCompareDESC()) ;
        set.add(new Student(3, "李四", 19));
        set.add(new Student(2, "张", 18));
        set.add(new Student(5, "李", 19));
        set.add(new Student(1, "王五", 18));
        set.add(new Student(6, "赵柳", 19));
        
        for(Student stu: set)
        {
            System.out.println("学号:" + stu.getId() + "  姓名:" + stu.getName() + "  年龄:" + stu.getAge());
        }
        
    }
    
    
    //将数组存储在List容器中
    public static List<Student> listStudent()
    {
        List<Student> list = new ArrayList<Student>();
        list.add(new Student(3, "李四", 19));
        list.add(new Student(2, "张", 18));
        list.add(new Student(5, "李", 19));
        list.add(new Student(1, "王五", 18));
        list.add(new Student(6, "赵柳", 19));
        return list;
    }
    
    public static void listASC(List<Student> list)
    {
        System.out.println("按照学号顺序输出");
        Collections.sort(list,new Comparator<Student>() {

            @Override
            public int compare(Student o1, Student o2) {
                // TODO 自动生成的方法存根
                 if (o1.getId() > o2.getId()) {
            return 1;
        }
        if (o1.getId() == o2.getId()) {
            return 0;
        }
        return -1;
    }
            
            
        });
    
    
        for(Student stu: list)
        {
            System.out.println("学号:" + stu.getId() + "  姓名:" + stu.getName() + "  年龄:" + stu.getAge());
        }
        
    
    }
    
    
    
    public static void listDESC(List<Student> list)
    {
        System.out.println("按照学号逆序输出");
        Collections.sort(list,new Comparator<Student>() {

            @Override
            public int compare(Student o1, Student o2) {
                // TODO 自动生成的方法存根
                 if (o1.getId() < o2.getId()) {
            return 1;
        }
        if (o1.getId() == o2.getId()) {
            return 0;
        }
        return -1;
    }
        });
    
        for(Student stu: list)
        {
            System.out.println("学号:" + stu.getId() + "  姓名:" + stu.getName() + "  年龄:" + stu.getAge());
        }
    }
    
}
class setCompare implements Comparator<Student>{  
      
    @Override  
    public int compare(Student o1, Student o2) {  
          
        return o1.getId() - o2.getId();  
    }  
      
}  

class setCompareDESC implements Comparator<Student>{  
      
    @Override  
    public int compare(Student o1, Student o2) {  
          
        return o2.getId() - o1.getId();  
    }  
      
}  

其中用到的Student类

package iterator;


public class Student {

    int id;
    String name;
    int age;
    
    public Student(int id,String name,int age) {
        // TODO 自动生成的构造函数存根
        this.id = id;
        this.name = name;
        this.age = age;
        
    }
    
    public int getId() {
        return id;
    }
    public void setId(int id) {
        this.id = id;
    }
    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;
    }
    
    
}

由于没有具体的数据,所以在处理过程中,我就直接使用了固定的赋值格式了。

 

posted on 2019-11-21 11:19  一往无前!  阅读(1701)  评论(0编辑  收藏  举报