今天對迭代器中的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; } }
由於沒有具體的數據,所以在處理過程中,我就直接使用了固定的賦值格式了。