首页 > 其他分享 >Set接口实现类的遍历

Set接口实现类的遍历

时间:2023-01-01 21:33:07浏览次数:32  
标签:遍历 set name age Person0 接口 add Set

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()方法。

标签:遍历,set,name,age,Person0,接口,add,Set
From: https://www.cnblogs.com/zwgitOne123/p/17018634.html

相关文章

  • 二叉树的先中后序遍历
    二叉树:每个节点最多只有两个字节点JS中通常用Object来模拟二叉树(val:1,left:0,right:0)constbt={val:1,left:{......
  • List接口实现类的遍历方式
    List接口实现类主要有:ArrayList,LinkedList,Vector【三者区别,可以看看java集合.xmind文件】一.ArrayList类的遍历:1publicclassListBianLiTest{2publics......
  • Redis set数据类型命令使用及应用场景使用总结
    转载请注明出处:目录1.sadd集合添加元素2.srem移除元素3.smembers获取key的所有元素4.scard获取key的个数5.sismember判断member元素是否存......
  • 接口
    接口普通类:只有具体的实现抽象类:具体实现和规范(抽象方法)都有接口:只有规范,没有方法---约束与实现分离---面向接口编程接口的本质是最高规范、最大公约数接口作......
  • 接口测试
    1:接口测试的定义?目前,软件接口中基HTTP(RESTfull架构)的接口 是软件测试领域最常见的接口。基于我们主要针对的接口类型,定义为:根据前后两端通信的协议规则,组装一个请求数......
  • P3916 图的遍历
    题目描述给出 NN 个点,MM 条边的有向图,对于每个点 vv,求 A(v)A(v) 表示从点 vv 出发,能到达的编号最大的点。输入格式第 11 行 22 个整数 N,MN,M,表示点数......
  • Django——全局配置settings详解
    Django设置文件包含你所有的Django安装配置。这个文件一般在你的项目文件夹里。比如我们创建了一个名为mysite的项目,那么这个配置文件setting.py就在项目里的mysite文件夹......
  • 接口2.0
    jdk8以后,允许在接口中定义默认的方法,但是必须用关键字default修饰,作用是解决接口升级的问题,防止出现接口改变,实现类必须重写方法的现象接口中默认方法的定义格式:publicd......
  • leetcode-590. N 叉树的后序遍历
    590.N叉树的后序遍历-力扣(Leetcode)可以参考[[leetcode-589.N叉树的前序遍历]],代码差不多/***DefinitionforaNode.*typeNodestruct{*Valint......
  • leetcode-589. N 叉树的前序遍历
    589.N叉树的前序遍历-力扣(Leetcode)Go语言的切片操作方便性还不错/***DefinitionforaNode.*typeNodestruct{*Valint*Children[]*Node*......