A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 思·长安 中级黑马   /  2013-10-25 22:36  /  1480 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 思·长安 于 2013-10-26 09:20 编辑

hashtable集合中保存的数据 用foreach 循环输出后

数据是什么样的排序原理 为什么与添加时候的顺序不一样呢 有没有办法按指定方式进行排序啊




评分

参与人数 1技术分 +1 收起 理由
陈行 + 1

查看全部评分

4 个回复

倒序浏览
因为hashtable内部是无序的,所以输出不一定,hashtable取数据的机制没搞明白。按照下面代码可以实现先进先出。

可以通过控制ArrayList里面keys的排序来控制hashtable的输出,当然也可以用SortedDictionary和SortedList实现排序集合。
  1. public class NoSortHashtable : Hashtable
  2.      {
  3.         private ArrayList keys = new ArrayList();

  4.         public NoSortHashtable()
  5.          {
  6.         }
  7.         

  8.         public override void Add(object key, object value)
  9.          {
  10.             base.Add (key, value);
  11.             keys.Add (key);
  12.         }

  13.         public override ICollection Keys
  14.          {
  15.             get
  16.              {
  17.                 return keys;
  18.             }
  19.         }

  20.         public override void Clear()
  21.          {
  22.             base.Clear ();
  23.             keys.Clear ();
  24.         }

  25.         public override void Remove(object key)
  26.          {
  27.             base.Remove (key);
  28.             keys.Remove    (key);
  29.         }
  30.         public override IDictionaryEnumerator GetEnumerator()
  31.          {
  32.             return base.GetEnumerator ();
  33.         }

  34.     }
复制代码

评分

参与人数 1技术分 +2 收起 理由
陈行 + 2

查看全部评分

回复 使用道具 举报
吴彤辉 发表于 2013-10-25 22:43
因为hashtable内部是无序的,所以输出不一定,hashtable取数据的机制没搞明白。按照下面代码可以实现先进先 ...

如果想排序输出的话只能用泛型吗
回复 使用道具 举报
思·长安 发表于 2013-10-25 22:59
如果想排序输出的话只能用泛型吗

用泛型最方便的了

评分

参与人数 1技术分 +1 收起 理由
茹化肖 + 1

查看全部评分

回复 使用道具 举报
吴彤辉 发表于 2013-10-25 23:01
用泛型最方便的了

用Dictionary搞定了 谢谢你
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马