请问请问,Treeset集合可以使用迭代器遍历吗?

问题遇到的现象和发生背景
set集合不是实现的的Colletion吗,为啥我这里使用Iterator遍历时,遍历的不是全部结果嘞?
Vip{年龄=3, 姓名='zhangsa'}
Vip{年龄=3, 姓名='zhangsan'}
Vip{年龄=24, 姓名='liwu'}
Vip{年龄=33, 姓名='lisi'}


Vip{年龄=3, 姓名='zhangsan'}
Vip{年龄=33, 姓名='lisi'}
问题相关代码,请勿粘贴截图
import java.util.Iterator;
import java.util.TreeSet;

/**

  • 如何实现comparable接口

  • 放在TreeSet中的元素类型需实现comparable接口方法

  • /
    public class TreeSetTest {
    public static void main(String[] args) {

      //创建Vip对象
      Vip v1 = new Vip(3,"zhangsan");
      Vip v2 = new Vip(3,"zhangsa");
      Vip v3 = new Vip (33,"lisi");
      Vip v4 = new Vip(24,"liwu");
      //创建Treeset集合
      TreeSet<Vip> treeset = new TreeSet<Vip>();
      //往treeset集合中添加元素,使用add
      treeset.add(v1);
      treeset.add(v2);
      treeset.add(v3);
      treeset.add(v4);
      //遍历set集合使用foreach
      for(Vip v :treeset){
          System.out.println(v);
      }
      System.out.println("--------------");
      //不使用foreach遍历集合,迭代器
      Iterator<Vip> it = treeset.iterator();
      while (it.hasNext()){
          Vip vip=it.next();
          System.out.println(it.next());
          //System.out.println(vip);
      }
    

    }
    }
    //实现Comparable接口
    class Vip implements Comparable{
    //属性
    int age;
    String name;
    //有参构造方法
    public Vip(int age, String name) {

      this.age = age;
      this.name = name;
    

    }

    @Override
    public String toString() {

      return "Vip{" +
              "年龄=" + age +
              ", 姓名='" + name + '\'' +
              '}';
    

    }

    @Override
    public int compareTo(Vip o) {

      if(this.age == o.age){
          return this.name.compareTo(o.name);
      }
          return this.age - o.age;
    

    }
    }
    }

我给你改了一下,主要问题出在 Vip vip = it.next();System.out.println(it.next());你连续调用两次next,相当于跳过了一个:

import java.util.Iterator;
import java.util.TreeSet;

public class TreeSetTest {
    public static void main(String[] args) {

        // 创建Vip对象
        Vip v1 = new Vip(3, "zhangsan");
        Vip v2 = new Vip(3, "zhangsa");
        Vip v3 = new Vip(33, "lisi");
        Vip v4 = new Vip(24, "liwu");
        // 创建Treeset集合
        TreeSet<Vip> treeset = new TreeSet<Vip>();
        // 往treeset集合中添加元素,使用add
        treeset.add(v1);
        treeset.add(v2);
        treeset.add(v3);
        treeset.add(v4);
        // 遍历set集合使用foreach
        for (Vip v : treeset) {
            System.out.println(v);
        }
        System.out.println("--------------");
        // 不使用foreach遍历集合,迭代器
        Iterator<Vip> it = treeset.iterator();
        while (it.hasNext()) {
            Vip vip = it.next();
            System.out.println(vip);
            // System.out.println(vip);
        }
    }
}

// 实现Comparable接口
class Vip implements Comparable {
    // 属性
    int age;
    String name;

    // 有参构造方法
    public Vip(int age, String name) {

        this.age = age;
        this.name = name;
    }

    @Override
    public String toString() {

        return "Vip{" +
                "年龄=" + age +
                ", 姓名='" + name + '\'' +
                '}';
    }

    

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    @Override
    public int compareTo(Object o) {
        if (this.age == ((Vip) o).getAge()) {
            return this.name.compareTo(((Vip) o).getName());
        }
        return this.age -  ((Vip) o).getAge();
    
    }
}

如有帮助,请采纳!