利用ArrayList对Hashtable其进行排序

原创 2013年12月04日 21:14:39

前言:    

   最近在使用Hashtable的时候发现一个问题:就是当你对Hashtable进行遍历的时候整个输出结果是毫无顺序的,

上网查了一下说是Hashtable有自己内部的排序机制,如果要自定义排序的话就要写算法,反正是很麻烦,而我现在

需要实现的仅仅是输入顺序和输入顺序对应即可,没必要这么麻烦的去写算法。

   这里我们就需要使用到ArrayList,大家都知道ArrayList默认是不排序的(添加的顺序就是输出的顺序)。让它

和hashtable结合不就实现这种功能的吗?这样继承了Hashtable具有Hashtable的丰富功能,又满足ArrayList不排序

的功能。上网查了一些资料,顺便也介绍一些其他的排序方法,大家一起学习。

没有排序之前:

using System.Collections;
namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            Hashtable map = new Hashtable();
            map.Add("TableName", "T_English_Close");
            map.Add("QuestionID", "10");
            map.Add("Scope", "课内");
            map.Add("BookName", "第一册");
            map.Add("Chapter", "第一章");
            map.Add("QuestionType", "完型填空");
            map.Add("Degree", "2");
            map.Add("Fraction", "10");
            foreach (string str in map.Keys)
            {
                Console.WriteLine(str + " : " +map[str]); 
            }
            Console.Read();
        }
    }
}

输出结果:


一:输入什么顺序,输出就是什么顺序。

    首先我们需要声明一个类来继承Hashtable,并重新它的一些方法,使ArrayListHashtable结合在一起:

public class AltHashTable : Hashtable
{
    private ArrayList list = new ArrayList();
    public override void Add(object key, object value)
    {
        base.Add(key, value);
        list.Add(key);
    }
    public override void Clear()
    {
        base.Clear();
        list.Clear();
    }
    public override void Remove(object key)
    {
        base.Remove(key);
        list.Remove(key);
    }
    public override ICollection Keys
    {
        get
        {
            return list;
        }
    }
}

然后我们重新测试一下:

using System.Collections;
namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            
             AltHashTable map= newAltHashTable(); 

            map.Add("TableName", "T_English_Close");
            map.Add("QuestionID", "10");
            map.Add("Scope", "课内");
            map.Add("BookName", "第一册");
            map.Add("Chapter", "第一章");
            map.Add("QuestionType", "完型填空");
            map.Add("Degree", "2");
            map.Add("Fraction", "10");
            foreach (string str in map.Keys)
            {
                Console.WriteLine(str + " : " +map[str]); 
            }
            Console.Read();
        }
    }
}

输出结果正是我们想要的:


二:下面我们在分别介绍一下按Key值和Value值排序的方法。

  首先要知道如何将Hashtable转换为ArrayList:

ArrayList list = new ArrayList(ht.Values);
ArrayList list=  new ArrayList(ht.Keys);


  按Key值排序:

using System.Collections;
namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            Hashtable   map = new Hashtable  ();
            map.Add("TableName", "T_English_Close");
            map.Add("QuestionID", "10");
            map.Add("Scope", "课内");
            map.Add("BookName", "第一册");
            map.Add("Chapter", "第一章");
            map.Add("QuestionType", "完型填空");
            map.Add("Degree", "2");
            map.Add("Fraction", "10");
            ArrayList list = new ArrayList(map.Keys);
            list.Sort();
            foreach (string str in list)
            {
                Console.WriteLine(str + ":" + map[str]);
            }
            Console.Read();
 }
    }
}
输出结果:



按Value值排序跟按Key值排序一样,在这里就不在写代码了。大家可以自己动手实践一下!

原理:

   实际上是按照每一个字符的ASCII的值就行排序的。从左到右比较每个字符的Ascii的值,直到满足两个字符的ASCII

的值不同即停止比较 


总结:

   针对Hashtable排序的特殊要求,可以先把它的键或值转化成ArrayList,针对ArrayList进行排序,进而也就实现了

Hashtable的排序.毕竟ArrayList已经支持一些排序。而且ArrayList的排序种类非常多,我们在下面文章中在重点说一

ArrayList的使用。



版权声明:本文为博主原创文章,未经博主允许不得转载。

项目总结——hashtable排序问题

前言:         对于Hashtable在我的上篇博客中有提到,是用在了事务处理中,向sqlhelper传递参数,这个用的很巧妙不知道大家有没有进一步的研究,但是为什么现在需要用到Hashtab...
  • hy6688_
  • hy6688_
  • 2013年09月24日 00:15
  • 4692

如何实现对ArrayList排序 sort()

总结: 使用Collections.sort()传入ArrayList,会采用默认的方式进行排序(字典序)使用Collections.sort()传入ArrayList和自己实现Commparat...
  • u011299745
  • u011299745
  • 2016年09月24日 22:18
  • 16960

对ArrayList中的元素按照某一列进行排序

对ArrayList中的元素按照某一列进行排序 博客分类:  java   对ArrayList中的元素进行排序,主要考查的是对util包中的Comparator接口和Co...
  • liweiahut
  • liweiahut
  • 2016年09月25日 13:34
  • 247

ArrayList对动态数组进行排序数组由Scanner后台动态接收数组元素

import java.io.*; import java.util.*; public class qiPa { public static void main(String args[]) t...
  • u010011052
  • u010011052
  • 2013年06月01日 01:39
  • 1350

c#数据结构之array,arraylist,hashtable,dictionary

  • 2010年10月28日 17:35
  • 43KB
  • 下载

Java中对ArrayList进行排序

今天遇到需要对List进行排序的需求,虽然自己可以写算法实现排序,但是追求效率hai...
  • u011262156
  • u011262156
  • 2014年11月05日 15:25
  • 464

对ArrayList中的元素按照某一列进行排序

对ArrayList中的元素进行排序,主要考查的是对util包中的Comparator接口和Collections类的使用。 实现Comparator接口必须实现compare方...
  • javaFay
  • javaFay
  • 2012年10月09日 17:43
  • 388

Java中List、ArrayList、Vector及map、HashTable、HashMap分别的区别.

  • 2013年04月23日 10:50
  • 28KB
  • 下载

arraylist Hashtable

  • 2008年10月27日 12:32
  • 2KB
  • 下载

比较分析Vector、ArrayList和hashtable hashmap数据结构

  • 2008年09月01日 22:56
  • 235KB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:利用ArrayList对Hashtable其进行排序
举报原因:
原因补充:

(最多只允许输入30个字)