使用集合和手动排序的Java排序

使用集合和手动排序的Java排序,java,vector,hashtable,enumeration,Java,Vector,Hashtable,Enumeration,我正在编写一个控制台应用程序,它使用哈希表计算各种价格。它使用一个名为Priceprint的类来编写价格。我在程序的其余部分使用哈希表,因为顺序并不特别重要,但它会在创建列表作为输出之前对键进行排序。它通过将键放在向量中,使用Collections.sort()对向量进行排序,并手动将第一个键和第二个键与带有keys exchange和special的条目交换,从而对它们进行排序。然后,它使用枚举从向量中获取所有内容,并调用另一个函数将每个条目写入屏幕 public void out(Hasht

我正在编写一个控制台应用程序,它使用哈希表计算各种价格。它使用一个名为Priceprint的类来编写价格。我在程序的其余部分使用哈希表,因为顺序并不特别重要,但它会在创建列表作为输出之前对键进行排序。它通过将键放在向量中,使用Collections.sort()对向量进行排序,并手动将第一个键和第二个键与带有keys exchange和special的条目交换,从而对它们进行排序。然后,它使用枚举从向量中获取所有内容,并调用另一个函数将每个条目写入屏幕

public void out(Hashtable<String, Double> b, Hashtable<String, Double> d) {
            Vector<String> v;
            Enumeration<String> k;
            String te1, te2, e;
            int ex, sp;

            v = new Vector<String>(d.keySet());
            Collections.sort(v);

            te1 = new String(v.get(0));
            ex = v.indexOf("exchange");
            v.set(ex, te1); v.set(0, "exchange");

            te2 = new String(v.get(1));
            ex = v.indexOf("special");
            v.set(ex, te2); v.set(1, "special");

            if (msgflag == true)
                    System.out.println("Listing Bitcoin and dollar prices.");
            else {
                    System.out.println("Listing Bitcoin and dollar prices, "
                                       + message + ".");
                    msgflag = true;
            }

            k = v.elements();
            while (k.hasMoreElements()) {
                    e = new String(k.nextElement());
                    out(e, d.get(e), b.get(e));
            }
    }

问题似乎在于,您正在将第一个和第二个元素放回向量中“交换”和“特殊”来自的位置,而不是从向量中删除“交换”和“特殊”并将它们插入向量顶部

如果使用LinkedList而不是Vector,正确地执行此操作将更有效。要执行所需的操作,假设
v
列表

v.add(0, v.remove(v.indexOf("special")));  
v.add(0, v.remove(v.indexOf("exchange")));

这应该将“交换”放在第一位,“特殊”放在第二位,之后列表的其余部分将保持排序顺序。

谢谢!这使它变得很好和简单。
v.add(0, v.remove(v.indexOf("special")));  
v.add(0, v.remove(v.indexOf("exchange")));