我有一种排序方法可以对不同类型的集合进行排序。我尝试对一个集合,一个ArrayList
,一个列表和一个HashMap
值的集合进行排序。除了返回UOE的hashMap.values()
集合之外,所有集合都已正确排序。我调试了代码并且问题在线:“numbers.add(a[k]);
”您是否知道如何使我的排序方法成功排序hashMap.values()
集合?
这是代码:
public void sort(Collection<NamedValue> numbers)
{
try
{
NamedValue[] a = numbers.toArray(new NamedValue[numbers.size()]) ;
boolean swapped = true;
int j = 0;
NamedValue temp;
while (swapped) {
swapped = false;
j++;
for (int i = 0; i < a.length - j; i++) {
if (a[i] != null && a[i].compareTo(a[i+1]) == 1)
{
temp = a[i];
a[i] = a[i + 1];
a[i + 1] = temp;
swapped = true;
}
}
}
numbers.clear();
for (int k=0; k<a.length; k++) {
numbers.add(a[k]);
}
}
catch(Exception e)
{
e.printStackTrace();
}
}
主要代码:
List<NamedValue> numbers = Arrays.asList(new NamedValue("One", 1), /**/
new NamedValue("Three", 3), /**/
new NamedValue("Four", 4), /**/
new NamedValue("Two", 2), /**/
new NamedValue("Five", 5));
Map<String, NamedValue> numbersMap = new HashMap<String, NamedValue>();
for (NamedValue value: numbers)
numbersMap.put(value.Name(), value);
System.out.println("numbersMap = " + numbersMap);
Map<String, Collection<NamedValue>> collections = new HashMap<String,
Collection<NamedValue>>();
collections.put("ArrayList", numbersArrayList);
collections.put("List", numbersList);
collections.put("Set", numbersSet);
collections.put("Map values", numbersMap.values());
for (String key: collections.keySet())
{
Collection<NamedValue> coll = collections.get(key);
lab.sort(coll);
System.out.println("Sorted " + key + " = " + coll);
}
所以我有一个HashMap集合,对于这个地图中的每个Collection,我想对元素进行排序。其中一个集合由numbersMap集合的值组成。如何使我的排序方法对所有这些集合(hashMap.values()集合)进行排序?
答案 0 :(得分:1)
您无法将项目添加到地图的值集合
从java.util.HashMap.values()操作的java文档:
Collection java.util.HashMap.values() 返回此映射中包含的值的Collection视图。该集合由地图支持,因此对地图的更改将反映在集合中,反之亦然。如果在对集合进行迭代时修改了映射(除了通过迭代器自己的remove操作),迭代的结果是未定义的。该集合支持元素删除,它通过Iterator.remove,Collection.remove,removeAll,retainAll和clear操作从地图中删除相应的映射。 它不支持add或addAll操作。
答案 1 :(得分:-1)
方案在HashMap方面有所不同,因为在hashmap中我们采用值键对,因此如果需要对哈希映射进行排序,我们可以根据键对其进行排序。 Arraylist或List不在键值表单中,因此您的排序方法可以在那里运行。