我在将映射中的值和键从最小到最大(整数和字符串)排序时遇到问题。这是两种方法,首先是值的方法:
public Collection<V> values(){
Collection<V> coll = new LinkedList<V>();
for(int i = 0; i < table.length; i++){
if(table[i] != null){
for(Entry<K, V> nextItem : table[i]){
if(nextItem.value != null){
if(!coll.contains(nextItem.value)){
coll.add(nextItem.value);
}
}
}
}
}
return coll;
}
预期输出:
120 123 404 911 999
我的输出(基本上保持地图中任何位置的顺序):
911 999 123 120 404
上述方法与 hashTableChain 的点表示法一起使用(一个数组,其键按其 hashCode 排序,其中数组的索引是linkedLists),它返回给定映射的值。我尝试使用 Collections.sort(coll) 对其进行排序,但是据我所知,这需要一个与 Collection 不兼容的 List。是否有与 Collection 兼容的东西已经排序或可以以简单的方式排序?密钥的方法:
public Set<K> keySet(){
Set<K> coll = new HashSet<K>();
for(int i = 0; i < table.length; i++){
if(table[i] != null){
for(Entry<K, V> nextItem : table[i]){
coll.add(nextItem.key);
}
}
}
return coll;
}
预期输出:
ABC ACTG HTML LOL OMG XYZ
我的输出(基本上保持地图中任何位置的顺序):
XYZ ABC ACTG HTML LOL OMG
我再次尝试 Collections.sort(coll) 无济于事,并且找不到任何对其进行排序的方法。
我对java很陌生,我确定我忽略了一些东西,在网上搜索了一段时间后,我想我只是问一下。
在此先感谢,我非常感谢您的帮助。
应要求添加:
private static class Entry<K, V> implements Map.Entry<K, V> {
/** The key */
private K key;
/** The value */
private V value;
/**
* Creates a new key-value pair.
* @param key The key
* @param value The value
*/
public Entry(K key, V value) {
this.key = key;
this.value = value;
}