Java 向上或向下移动地图的选定元素
我试图通过向上或向下移动所选项目来修改Java 向上或向下移动地图的选定元素,java,collections,arraylist,linkedhashmap,generic-collections,Java,Collections,Arraylist,Linkedhashmap,Generic Collections,我试图通过向上或向下移动所选项目来修改映射中的元素列表。我的想法是记住选定项目旁边的元素。因为元素在一个映射中,所以尽管我使用了LinkedHashMap 如果有人能告诉我怎么做,我将不胜感激 注意:我已经概括了这个问题,下面的代码只是一个参考 public void moveUp(ActionEvent evt) { List<String> selectedItems = myBean().getSelectedItems(); if(selectedItems.
映射中的元素列表。我的想法是记住选定项目旁边的元素。因为元素在一个映射中,所以尽管我使用了LinkedHashMap
如果有人能告诉我怎么做,我将不胜感激
注意:我已经概括了这个问题,下面的代码只是一个参考
public void moveUp(ActionEvent evt) {
List<String> selectedItems = myBean().getSelectedItems();
if(selectedItems.isEmpty()) return;
Map<String, String> avlbleItems = new LinkedHashMap<String, String>(myBean().getListBoxItems());
List<String> avlbleItemsList = new ArrayList<String>(myBean().getListBoxItems().values());
int size = avlbleItems.size();
List<String> tail = new ArrayList();
List<String> head = new ArrayList();
int buf = 0,k = 0,j = 0,m = 0,n = 0;
try {
label:
for (Iterator it = selectedItems.iterator(); it.hasNext();buf++) {
String st = (String) it.next();
if(buf==0) {
for (int i = 0; i < size; i++) {
if(avlbleItemsList.get(i).equals(st)) {
k = i-1;
m = k+2;
n = m;
}
}
if(k < 0) return;
if(k == 0) continue label;
}
if(n < size && selectedItems.contains(avlbleItemsList.get(n))) {
n++;
}
if(k+2 < size && !selectedItems.contains(avlbleItemsList.get(k+2))) {
m++;
}
if(!it.hasNext()) {
for (int i = 0; i < size; i++) {
if(avlbleItemsList.get(i).equals(st)) {
j = i+1;
if(j == size) break label;
if(j < size) {
tail = avlbleItemsList.subList(j, size);
}
}
}
}
}
avlbleItems.clear();
for (Iterator ite = head.iterator(); ite.hasNext();) {
String st = (String) ite.next();
avlbleItems.put(st, st);
}
for (Iterator it = selectedItems.iterator(); it.hasNext();) {
String st = (String) it.next();
avlbleItems.put(st, st);
}
avlbleItems.put(avlbleItemsList.get(k), avlbleItemsList.get(k));
for (int i = n; i < j-1; i++) {
avlbleItems.put(avlbleItemsList.get(i), avlbleItemsList.get(i));
}
for (Iterator it = tail.iterator(); it.hasNext();) {
String st = (String) it.next();
avlbleItems.put(st, st);
}
} catch (IndexOutOfBoundsException e) {
handleException();
return;
} catch (NoSuchElementException e) {
handleException();
return;
} catch (IllegalArgumentException e) {
handleException();
return;
}
}
公共无效移动(ActionEvent evt){
列出selectedItems=myBean().getSelectedItems();
if(selectedItems.isEmpty())返回;
Map avlbleItems=newlinkedhashmap(myBean().getListBoxItems());
List avlbleItemsList=newArrayList(myBean().getListBoxItems().values());
int size=avlbleItems.size();
List tail=new ArrayList();
列表头=新的ArrayList();
int buf=0,k=0,j=0,m=0,n=0;
试一试{
标签:
for(Iterator it=selectedItems.Iterator();it.hasNext();buf++){
String st=(String)it.next();
如果(buf==0){
对于(int i=0;i
好吧,您尝试使用映射时最好使用链表(在链表中,您可以简单地向上或向下移动元素)。我建议您创建一个简单的类,扩展一个链表,并拥有一个HashMap作为成员,而不是所有这些复杂的机制。然后,您可以覆盖add、delete和clear方法,以便它们同时添加/删除/清除超级链表和HashMap
这将为您带来HashMap和链表的好处,并且在概念上更容易处理。aMap
没有顺序的概念。地图中没有“next to”、“up”或“down”
如果您想要保留顺序的Map
,您可以使用基于插入顺序的LinkedHashMap
,或者定义自己的实现,该实现强制执行您想要的任何顺序。如果您希望通过键定义订单,则可以使用TreeMap
,但如果更改项目的键,则必须将其删除并重新插入