java中的Set接口实现类的遍历

导读:本篇文章讲解 java中的Set接口实现类的遍历,希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com

Set接口实现类主要是:HashSet,LinkedHashSet【二者,可以看看java集合.xmind文件】,TreeSet【没有学到】

  一. HashSet类的遍历:

 1 public class SetBianLiTest {
 2     public static void main(String[] args) {
 3         // HashSet的遍历
 4         // 重点:添加的对象,如果是自定义的对象,需要重写hashCode()和equals()方法。
 5         // 此处,可以将HashSet的源码好好看看。
 6         Set set = new HashSet();
 7         set.add("hello");
 8         set.add("world");
 9         set.add("hello");
10         set.add(new String("hello"));
11         set.add(true);
12         set.add(new Person0("大白",20));
13         set.add(new Person0("大白",20));
14 
15         System.out.println("===迭代器遍历===");
16         // 第一种遍历方式:生成迭代器
17         Iterator iterator = set.iterator();
18         while (iterator.hasNext()) {
19             Object obj =  iterator.next();
20             System.out.println(obj);
21         }
22 
23         System.out.println("===增强for遍历===");
24         // 第二种方式:增强for循环
25         for (Object o : set) {
26             System.out.println(o);
27         }
28         
29     }
30 }
31 
32 class Person0 {
33     private String name;
34     private int age;
35 
36     public Person0(String name, int age) {
37         this.name = name;
38         this.age = age;
39     }
40 
41     @Override
42     public boolean equals(Object o) {
43         if (this == o) return true;
44         if (o == null || getClass() != o.getClass()) return false;
45         Person0 person0 = (Person0) o;
46         return age == person0.age && name.equals(person0.name);
47     }
48 
49     @Override
50     public int hashCode() {
51         return Objects.hash(name, age);
52     }
53 
54     @Override
55     public String toString() {
56         return "Person0{" +
57                 "name='" + name + '\'' +
58                 ", age=" + age +
59                 '}';
60     }
61 }

  二. LinkedHashSet类的遍历

 1 public class SetBianLiTest {
 2     public static void main(String[] args) {
 3         // HashSet的遍历
 4         // 重点:添加的对象,如果是自定义的对象,需要重写hashCode()和equals()方法。
 5         // 此处,可以将HashSet的源码好好看看。
 6         Set set = new LinkedHashSet();
 7         set.add("hello");
 8         set.add("world");
 9         set.add("hello");
10         set.add(new String("hello"));
11         set.add(true);
12         set.add(new Person0("大白",20));
13         set.add(new Person0("大白",20));
14 
15         System.out.println("===迭代器遍历===");
16         // 第一种遍历方式:生成迭代器
17         Iterator iterator = set.iterator();
18         while (iterator.hasNext()) {
19             Object obj =  iterator.next();
20             System.out.println(obj);
21         }
22 
23         System.out.println("===增强for遍历===");
24         // 第二种方式:增强for循环
25         for (Object o : set) {
26             System.out.println(o);
27         }
28 
29     }
30 }
31 
32 class Person0 {
33     private String name;
34     private int age;
35 
36     public Person0(String name, int age) {
37         this.name = name;
38         this.age = age;
39     }
40 
41     @Override
42     public boolean equals(Object o) {
43         if (this == o) return true;
44         if (o == null || getClass() != o.getClass()) return false;
45         Person0 person0 = (Person0) o;
46         return age == person0.age && name.equals(person0.name);
47     }
48 
49     @Override
50     public int hashCode() {
51         return Objects.hash(name, age);
52     }
53 
54     @Override
55     public String toString() {
56         return "Person0{" +
57                 "name='" + name + '\'' +
58                 ", age=" + age +
59                 '}';
60     }
61 }

  注意:二者的区别,HashSet遍历是与添加顺序无关的,而LinkedHashSet遍历取决与添加的顺序。

    添加对象是自定义对象时,一定要在自定义类中重写hashCode()和equals()方法。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/98964.html

(0)
小半的头像小半

相关推荐

极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!