HashSet知识点

Q:
 怎么理解Set集合中的HashSet中的元素是无序的?
    Set集合中对象是不按特定顺序排序,并且对象没有重复的.而Set的一个实现类:HashSet是按照hash算法来存取集合中的对象的.hash是: 对象值-->哈希码-->元素位置 .所以我有个疑问:"Set集合中对象是不按特定顺序排序" 与 "HashSet的中的对象值和元素位置的对应" 是不是有点矛盾?或者说有点别扭. 这应该是个理解问题,请指正我的叙述并帮忙回答我的疑问?
    感激!
A:
要理解这个问题应该考虑到Set是个接口。接口的契约很单纯,不会做过多的保证。Set的契约重点就是“元素不重复的集合”,而对顺序不做保证(也就是不做限制,有序无序都可以)。实现该接口的类既可以提供有序的实现,也可以提供无序的实现。
HashSet在保存数据的时候显然还是得按一定顺序放入其背后的数组中,但顺序不是用户可控制的,对用户来说就是“无序”。

与之相对,SortedSet接口的契约就包含了“元素不重复,且按照用户指定的方式排序的集合”的意义。SortedSet接口满足Set接口的契约,并额外添加的“有序”的契约。TreeSet就是实现了SortedSet(以及Set)接口的实现,它就是有序的。


HashMap map = new HashMap();

//存放值
            HashSet hs=new HashSet();
            for(int i=0;i<dsjlist.size();i++){
             Dsj dsj=(Dsj) dsjlist.get(i);
             String year=dsj.getShijian().toString().substring(0,4);
             hs.add(year);
            }

//取值
            Iterator it=hs.iterator();
            while(it.hasNext()){
             map = new HashMap();
             nrlist = new ArrayList();
             String year=(String) it.next();
             map.put("year", year);
             nrlist=dsjManager.getDsjList(" where shijian like '"+year+"%'");
             map.put("nrlist", nrlist);
             yearlist.add(map);
            }

备注:
            如果使用Sorted的话,是按照顺序存放进去的!

自然顺序就是事物发展本身自由的顺序,而非人为的顺序


private void doSort(){  
 HashSet<Integer> va = new HashSet<Integer>();  
  
    va.add(2007111315);  

    va.add(2007111314);  

    va.add(2007111318);  

    va.add(2007111313); 
  TreeSet ts = new TreeSet(va);  
  
    ts.comparator();  

    System.out.println(ts);
 }
 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值