m0_63861075 2022-04-15 21:47 采纳率: 66.7%
浏览 44
已结题

请问请问,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;
    

    }
    }
    }

  • 写回答

1条回答 默认 最新

  • 溪风沐雪 2022-04-15 22:49
    关注

    我给你改了一下,主要问题出在 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();
        
        }
    }
    
    

    如有帮助,请采纳!

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 请回答用户的提问 6月8日
  • 系统已结题 4月23日
  • 已采纳回答 4月15日
  • 创建了问题 4月15日

悬赏问题

  • ¥15 对于知识的学以致用的解释
  • ¥50 三种调度算法报错 有实例
  • ¥15 关于#python#的问题,请各位专家解答!
  • ¥200 询问:python实现大地主题正反算的程序设计,有偿
  • ¥15 smptlib使用465端口发送邮件失败
  • ¥200 总是报错,能帮助用python实现程序实现高斯正反算吗?有偿
  • ¥15 对于squad数据集的基于bert模型的微调
  • ¥15 为什么我运行这个网络会出现以下报错?CRNN神经网络
  • ¥20 steam下载游戏占用内存
  • ¥15 CST保存项目时失败