1. Set目录
1.1 特点:无序、对象不能重复
1.2 遍历
1.2.1 foreach
1.2.2 迭代器
Setset =new HashSet<>(); set.add(new Student(1,"zs",100f)); set.add(new Student(2,"ls",20f)); set.add(new Student(3,"ww",30f)); set.add(new Student(4,"zs",100f)); //1)默認 使用equals比較,objcet类型是引用类型,默认比较的是内存地址 //2)重寫hashCode和equals類型是引用類型,先比較hashCode的值是否相同,在比較equels //hascode值相同,则比较equals //hascode值不相同,则不比较equals // Student stu=new Student(); // stu.equals(null); //set.forEach(System.out::println); //遍历方式(2种) //1)foreach for (Student student : set) { System.out.println(student); } System.out.println("----------------"); //2)iterator迭代器 //获取遍历 Iterator it=set.iterator(); //遍历循环 while(it.hasNext()) { System.out.println(it.next()); }
1.3 常用实现类Student实体类
HashSet
TreeSet:根据某种(规则)对里面的元素进行排序
自然比较接口: java.lang.Comparable
比较器: java.util.Comparator
String以AscII码进行比较,返回差值
public class Student implements Serializable, ComparableDemo1{ private int sid; private String sname; private Float score; public Student(int sid, String sname, Float score) { super(); this.sid = sid; this.sname = sname; this.score = score; } public Student() { super(); } public int getSid() { return sid; } public void setSid(int sid) { this.sid = sid; } public String getSname() { return sname; } @Override public int hashCode() { final int prime = 31; int result = 1; result = prime * result + ((score == null) ? 0 : score.hashCode()); result = prime * result + sid; result = prime * result + ((sname == null) ? 0 : sname.hashCode()); return result; } @Override public boolean equals(Object obj) { if (this == obj) return true; // obj是否为空 if (obj == null) return false; // 当前对象类型与obj类型不相同 if (getClass() != obj.getClass()) return false; Student other = (Student) obj; if (this.getSid() == other.getSid()) return false; return true; } public void setSname(String sname) { this.sname = sname; } public Float getScore() { return score; } public void setScore(Float score) { this.score = score; } @Override public String toString() { return "Student [sid=" + sid + ", sname=" + sname + ", score=" + score + "]"; } @Override public int compareTo(Student o) { // 比较者大于被比较者 返回1 // 比较者等于被比较者 返回0 // 比较者小于被比较者 返回-1 //降序) // return -(this.getSid()-o.getSid()); //(升序和 //return this.getSid()-o.getSid(); return this.getSname().hashCode()-o.getSname().hashCode(); }
public static void main(String[] args) {
//TreeSet:以某种特定的的规则对集合中的元素进行排序(升序和降序)
//java.lang.Comparable:自然比较接口必须在类里面实现接口 然后重新方法
java.util.Comparable:比较器(推荐)
//字母进行了排序(升序)
Set set1 =new TreeSet<>();
set1.add("zs");
set1.add("ls");
set1.add("ww");
//类错误
Set set =new TreeSet<>(new NameComparator());
set.add(new Student(1,"zs",100f));
set.add(new Student(2,"ls",20f));
set.add(new Student(3,"ww",30f));
set.forEach(System.out::println);
}
NameComparator类
public class NameComparator implements Comparator{ //比较器: java.util.Comparator //Student o1与 Student o2作比较 public int compare(Student o1, Student o2) { return o1.getSid()-o2.getSid(); } // String以AscII码进行比较,返回差值



