问题遇到的现象和发生背景
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();
}
}
如有帮助,请采纳!