Hashtable排序的几种方法

àì夳堔傛蜴生んèń 2022-04-08 12:17 417阅读 0赞

Hashtable排序的几种方法

Hashtable 利于用键值快速查找,却没有提供排序的方法,所以它的排序需要借住数组或其它集合来实现。

  • 排序方法一:
    将hash表中的值放入entrySet,利用Comparator中的compare方法实现排序

    1. import java.util.Arrays;
    2. import java.util.Comparator;
    3. import java.util.Hashtable;
    4. import java.util.Map;
    5. import java.util.Set;
    6. public class demo5 {
    7. public static void main(String[] args) {
    8. Hashtable ht = new Hashtable();
    9. ht.put(1, 5);
    10. ht.put(2, 7);
    11. ht.put(3, 3);
    12. //将哈希表ht的键值对放入entrySet进行遍历
    13. Map.Entry[] set = SortByKey(ht);
    14. //Map.Entry[] set = SortByValue(ht);
    15. for (int i = 0; i < set.length; i++) {
    16. System.out.println(set[i].getKey().toString()+":"+set[i].getValue().toString());
    17. }
    18. }
    19. //hashtable按键排序
    20. public static Map.Entry[] SortByKey(Hashtable ht) {
    21. long start = System. currentTimeMillis();
    22. Set set = ht.entrySet();
    23. Map.Entry[] entries = (Map.Entry[]) set.toArray(new Map.Entry[set.size()]);
    24. Arrays.sort(entries, new Comparator() {
    25. public int compare(Object arg0, Object arg1) {
    26. Object key1 = ((Map.Entry) arg0).getKey();
    27. Object key2 = ((Map.Entry) arg1).getKey();
    28. return ((Comparable) key1).compareTo(key2);
    29. }
    30. });
    31. Long end = System. currentTimeMillis();
    32. System. out.println( "耗时:" + (end - start) + " ms" );
    33. return entries;
    34. }
    35. //hashtable按值排序
    36. public static Map.Entry[] SortByValue(Hashtable ht) {
    37. long start = System. currentTimeMillis();
    38. Set set = ht.entrySet();
    39. Map.Entry[] entries = (Map.Entry[]) set.toArray(new Map.Entry[set
    40. .size()]);
    41. Arrays.sort(entries, new Comparator() {
    42. public int compare(Object arg0, Object arg1) {
    43. int key1 = Integer.parseInt(((Map.Entry) arg0).getValue()
    44. .toString());
    45. int key2 = Integer.parseInt(((Map.Entry) arg1).getValue()
    46. .toString());
    47. return ((Comparable) key1).compareTo(key2);
    48. }
    49. });
    50. Long end = System. currentTimeMillis();
    51. System. out.println( "耗时:" + (end - start) + " ms" );
    52. return entries;
    53. }
    54. }
    • 排序方法二:
      利用两个数组,一个装键,一个装值,然后重写快速排序的方法

      1. import java.util.Hashtable;
      2. public class demo4 {
      3. public static void main(String[] args) {
      4. Hashtable ht = new Hashtable();
      5. ht.put(1, 5);
      6. ht.put(2, 7);
      7. ht.put(3, 3);
      8. int[] arrKey = new int[ht.size()];//暂存 Hashtable 的值
      9. int[] arrValue = new int[ht.size()];//暂存 Hashtable 的值
      10. for (int i = 0; i < arrValue.length; i++) {
      11. arrKey[i]=i+1;
      12. arrValue[i]=(int) ht.get(i+1);
      13. }
      14. QuickSort(arrValue,arrKey,0,arrValue.length-1);
      15. for (int i = 0; i < arrValue.length; i++) {
      16. System.out.println(arrKey[i]+":"+arrValue[i]);
      17. }
      18. `在这里插入代码片`}
      19. //重写快速排序:同时将键值进行排序
      20. public static void QuickSort(int arr[],int arr1[],int _left,int _right){
      21. long start = System. currentTimeMillis();
      22. int right=_right;
      23. int left=_left;
      24. int temp=0,temp1=0;
      25. if(left<=right){
      26. temp1=arr1[left];
      27. temp=arr[left];
      28. while(left!=right){
      29. while(right>left&&arr[right]>temp)
      30. right--;
      31. arr1[left]=arr1[right];
      32. arr[left]=arr[right];
      33. while(left<right&&temp>arr[left])
      34. left++;
      35. arr1[right]=arr1[left];
      36. arr[right]=arr[left];
      37. }
      38. arr1[right]=temp1;
      39. arr[right]=temp;
      40. QuickSort(arr,arr1,_left,left-1);
      41. QuickSort(arr,arr1,right+1,_right);
      42. }
      43. Long end = System. currentTimeMillis();
      44. System. out.println( "耗时:" + (end - start) + " ms" );
      45. }
      46. }

发表评论

表情:
评论列表 (有 0 条评论,417人围观)

还没有评论,来说两句吧...

相关阅读

    相关 js数组排序方法

    1、冒泡排序 以从小到大排序为例,冒泡排序的原理就是通过两层循环把数组中两两相邻的元素进行比较,是的大的元素放到后边,元素交换位置,从而一步步的交换元素的位置,使得最大的元素

    相关 Java实现常见排序方法

    日常操作中常见的排序方法有:冒泡排序、快速排序、选择排序、插入排序、希尔排序,甚至还有基数排序、鸡尾酒排序、桶排序、鸽巢排序、归并排序等。 冒泡排序是一种简单的排序算法。它重

    相关 排序方法

    1、冒泡排序(BubbleSort)的基本概念是:依次比较相邻的两个数,将小数放在前面,大数放在后面。即在第一趟:首先比较第1个和第2个数,将小数放前,大数放后。然后比较第2个

    相关 实现数组排序方法

    冒泡排序 这里先介绍一下冒泡排序。 1. 其原理就是相邻的两个元素进行比较,如果第一个元素大于第二个元素,则交换这两个元素的位置。如此两两比较然后交换,一轮下来,最大的元

    相关 排序都有哪方法

          排序都有哪几种方法? 排序的方法有:     插入排序(直接插入排序、希尔排序),     交换排序(冒泡排序、快速排序),     选择排序(直接选择排序