请问在jdk1.6中HashSet在add的时候会排序吗?package com.yjb.test;import java.util.HashSet;
import java.util.Set;public class Test7 {
private static Set<Integer> set = new HashSet<Integer>();
    public static void main(String[] args) {
     while(true){
     if(set.size()<7) {
     int rr = (int)(Math.random()*10);
     System.out.println("size: "+set.size() + "rr: " +rr);
     set.add(rr);
     System.out.println(set);
     }else {
     break;
     }
     }
     System.out.println(set);
    }
}

解决方案 »

  1.   

    不会。
    TreeSet 会排序
    LinkedHashSet 会保持插入的顺序
      

  2.   

    呵呵 楼上的各位xdjm可以试试我那段程序?结果如下:
    size: 0rr: 8
    [8]
    size: 1rr: 9
    [8, 9]
    size: 2rr: 0
    [0, 8, 9]
    size: 3rr: 7
    [0, 7, 8, 9]
    size: 4rr: 8
    [0, 7, 8, 9]
    size: 4rr: 9
    [0, 7, 8, 9]
    size: 4rr: 4
    [0, 4, 7, 8, 9]
    size: 5rr: 3
    [0, 3, 4, 7, 8, 9]
    size: 6rr: 2
    [0, 2, 3, 4, 7, 8, 9]
    [0, 2, 3, 4, 7, 8, 9]
      

  3.   

    hash都没有顺序
    tree的都有顺序
      

  4.   

    请各位xdjm运行一下我的程序:jdk版本是:C:\Documents and Settings\wKF34709>java -version
    java version "1.6.0_17"
    Java(TM) SE Runtime Environment (build 1.6.0_17-b04)
    Java HotSpot(TM) Client VM (build 14.3-b01, mixed mode, sharing)
      

  5.   

    HashSet 底层是用map实现的
    会通过自己的算法排序 所以你每次打出set中元素都是一样的
    但是这个顺序是 客户端程序员无法掌握的
    所以可以认为Set是无序的。TreeSet 需要加入可以比较的对象 并且要是相同的对象 
    你添加的对象必须实现Comparable接口 表示加入的对象是可以比较的。
      

  6.   

     HashSet自从1.2之后好像就没改过哦
     你现在的情况是因为数据类型单一且恰巧是integer造成的这种结果
     这里涉及的是HashSet的toString()方法,我记得它的toString()大概就是遍历底层的Entry数组,既然是数组那么一定是有顺序的,这个顺序就是由存储元素的hashCode决定的.在add的时候并不做元素之间的比较排序,而只是根据hashcode得到该元素应该被存储在数组的哪个位置上.
    现在你这种情况恰巧就是Integer的hashcode恰巧就等于它的值,可以说toString()输出的顺序是由hashcode的大小决定的(在没有形成Entry链的情况下),这里碰巧hashcode的大小和Integer本身的大小顺序一致.....说的有点乱 凑合看下..