Set是没有顺序的,意思是说和我加入Set时的顺序无关吗?

zhaodaola 2003-10-03 09:24:56
比如向一个HashSet里加入"3"、"2"、"1",然后再用iterator()方法遍历这些元素,得到的不一定是321这个顺序?如果我希望顺序是和加入时一样的,应该怎么做?
...全文
264 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
happyegg 2003-10-03
  • 打赏
  • 举报
回复
如果你只是想实现顺序读取的话,用ArrayList就行啦
kangta 2003-10-03
  • 打赏
  • 举报
回复
MyDate dd1 = new MyDate(2001, 3, 1);
MyDate dd2 = new MyDate(2001, 2, 4);
MyDate dd3 = new MyDate(2001, 1, 2);
MyDate dd4 = new MyDate(2001, 4, 5);
MyDate dd5 = new MyDate(2001, 2, 1);
MyDate dd6 = new MyDate(2001, 1, 1);

List l = new ArrayList();
l.add(dd1);
l.add(dd2);
l.add(dd3);
l.add(dd4);
l.add(dd5);
l.add(dd6);
Collections.sort(l, new Comp2()); //Collections.sort(I);
System.out.println(l);


import java.util.*;
public class Comp2 implements Comparator {
public int compare(Object o1, Object o2) {
if (!(o1 instanceof MyDate)) return -1;
if (!(o2 instanceof MyDate)) return -1;
if (o1 == o2) return 0;
final MyDate myDate1 = (MyDate) o1;
final MyDate myDate2 = (MyDate) o2;
if (myDate1.getMonth() > myDate2.getMonth()) return 1;
if (myDate1.getMonth() < myDate2.getMonth()) return -1;
if (myDate1.getYear() > myDate2.getYear()) return 1;
if (myDate1.getYear() < myDate2.getYear()) return -1;
if (myDate1.getDay() > myDate2.getDay()) return 1;
if (myDate1.getDay() < myDate2.getDay()) return -1;
return 0;
}
}
helpall 2003-10-03
  • 打赏
  • 举报
回复
用TreeSet,但是并不是与加入的次序一样,而是用Comparator()来做比较.

如果要是与加入的次序一样,用Vector,但你须比较是否该元素已经被加入了.
kangta 2003-10-03
  • 打赏
  • 举报
回复
自己写个排序方法啊
import java.util.*;
public class MyDate implements Comparable {
private int year;
private int month;
private int day;
public MyDate(int year, int month, int day) {
this.year = year;
this.month = month;
this.day = day;
}
public int getDay() {
return day;
}
public int getMonth() {
return month;
}
public int getYear() {
return year;
}
public String toString() {
return year + "-" + month + "-" + day;
}
public int hashCode() {
int result;
result = year;
result = 29 * result + month;
result = 29 * result + day;
return result;
}
/*public boolean equals(Object o) {
if (this == o) return true;
if (!(o instanceof MyDate)) return false;
final MyDate myDate = (MyDate) o;
if (day != myDate.day) return false;
if (month != myDate.month) return false;
if (year != myDate.year) return false;
return true;
} */
public int compareTo(Object o) {
if (this == o) return 0;
if (!(o instanceof MyDate)) return 0;
final MyDate myDate = (MyDate) o;
if (year > myDate.year) return 1;
if (year < myDate.year) return -1;
if (month > myDate.month) return 1;
if (month < myDate.month) return -1;
if (day > myDate.day) return 1;
if (day < myDate.day) return -1;
return 0;
}
public static void main(String[] args) {
MyDate d1 = new MyDate(2003, 9, 1);
MyDate d2 = new MyDate(2003, 9, 2);
MyDate d3 = new MyDate(2003, 9, 3);
MyDate d4 = new MyDate(2003, 9, 4);
MyDate d5 = new MyDate(2003, 9, 5);
MyDate d6 = new MyDate(2003, 9, 5);
Set s = new TreeSet();
s.add(d1);
s.add(d2);
s.add(d3);
s.add(d4);
s.add(d5);
s.add(d6);
MyDate[] t = new MyDate[0];
MyDate[] ms = (MyDate[])s.toArray(t);
for(int i = 0; i < ms.length; i++){
System.out.println(ms[i]);
}

希望对楼主有帮助
tomcatjava 2003-10-03
  • 打赏
  • 举报
回复
具体问题具体对待,如果你只是想实现顺序读取的话,用数组不就行了??
caoxmby 2003-10-03
  • 打赏
  • 举报
回复
对啊,为什么一定要用set呢?

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧