[英]Java sorting with collections plus manual sorting
我正在编写一个控制台应用程序,该应用程序使用哈希表计算各种价格。 它使用称为Priceprint的类编写价格。 我在程序的其余部分使用哈希表,因为顺序并不是特别重要,但是它会在创建列表作为输出之前对键进行排序。 它通过将键放入向量中,使用Collections.sort()对向量进行排序,以及将第一个和第二个键手动交换为具有键交换和特殊键的条目来对它们进行排序。 然后,它使用枚举从向量中获取所有内容,并调用另一个函数将每个条目写入屏幕。
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));
}
}
现在的问题是,我因缺乏思考而陷入困境,那就是交换条目并按键的字母顺序对列表进行排序。 因此,当我运行程序时,exchange和special在顶部,但列表的其余部分不再按顺序排列。 我可能要取消必要的设计,在该设计中,列表是通过代码为单个条目输出代码的,其中关键价格和特殊字符排在顶部,但与列表的其他各个方面都有顺序。 真可惜,因为几乎所有这些都需要去做,我真的很喜欢这个设计。
这是完整的代码,请忽略我在类上显然应该使用静态方法的类上使用构造函数的事实,但忽略了这一点: http : //pastebin.com/CdwhcV2L
以下是使用Printprice创建价格列表以测试程序的另一部分以及Printprice列表的代码: http ://pastebin.com/E2Fq13zF
输出:
john@fekete:~/devel/java/pricecalc$ java backend.test.Test
I test CalcPrice, but I also test Printprice(Hashtable, Hashtable, String).
Listing Bitcoin and dollar prices, for unit test, check with calculator.
Exchange rate is $127.23 (USDBTC).
Special is 20.0%.
privacy: $2.0 0.0126BTC, for unit test, check with calculator.
quotaband: $1.5 0.0094BTC, for unit test, check with calculator.
quotahdd: $5.0 0.0314BTC, for unit test, check with calculator.
shells: $5.0 0.0314BTC, for unit test, check with calculator.
hosting: $10.0 0.0629BTC, for unit test, check with calculator.
问题似乎是您将第一个元素和第二个元素放回向量中“交换”和“特殊”来源的位置,而不是从向量中删除“交换”和“特殊”并将其插入到向量中。向量的顶部。
使用LinkedList而不是Vector可以正确执行此操作。 要执行所需的操作,假设v
是一个List
:
v.add(0, v.remove(v.indexOf("special")));
v.add(0, v.remove(v.indexOf("exchange")));
这应该将“交换”放在首位,将“特殊”放在第二位,然后列表的其余部分将保持排序。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.