Set集合
Hashset
set集合值特点,它是不可重复的且无序的。但是这个排序是相对而言,它也有个自然排序,按照字母A-Z排序
1 Set<String> s=new HashSet<>(); 2 // s.add("a"); 3 // s.add("b"); 4 // s.add("c"); 5 // s.add("d"); 6 // s.add("a"); 7 // System.out.println(s.size()); 8 // 9 // Iterator<String> it=s.iterator(); 10 // while(it.hasNext()) { 11 // System.out.println(it.next()); 12 // } 13 // System.out.println("---------------------"); 14 // for(String so:s) { 15 // System.out.println(so);
Set集合的值(对象)
如果set集合放入的是对象,那么它是相对可以出现重复值的。当然只是我们看到的那样,其实这些值都有地址上的本质区别;
但是我们可以重写equals的方法来实现比较的是我们想比较的东西,而不是地址
1 @Override 2 public boolean equals(Object obj) { 3 boolean flag=false; 4 //判断当前对象的类型(所属自定义类的名称) 5 if(obj instanceof Person) { 6 Person p=(Person)obj; 7 if(this.sid==p.sid) { 8 if(this.sage==p.sage) { 9 if(this.sname.equals(p.sname)) { 10 flag=true; 11 } 12 } 13 } 14 }
接下来进行比较:
1 Set<Person> s=new HashSet<>(); 2 System.out.println(new Person(1, "Is", 18).equals(new Person(1, "zs", 18)));
这就会进行值的比较,返回的值是false;
当我们用foreach进行循环遍历输出的时候,输出这个对象的话(在没有重写同String的情况下)它输出的是一窜字符,当我们重写toString后它默认的值就是对象的值