迭代器中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; } }
由于没有具体的数据,所以在处理过程中,我就直接使用了固定的赋值格式了。