我需要更改包含哈希映射的数组列表中所选索引的键和值。我知道要更换钥匙,您需要先删除将要更换的钥匙并放一个新钥匙。但这并不能保存已删除键和值的位置。因此,我想到了遍历哈希映射的数组列表,并在新的哈希映射中逐一创建它们,在其中可以为所选索引添加if命令,让它说1,1,它将改变索引位置,想要更改并复制那些不需要编辑的内容。我不知道如何以及正确的复制方式。请注意,我只是Java的初学者,正在尝试学习。正确执行此操作的方法是什么?
我只是尝试手动更新键和值,但是它更改了应该位于的位置/索引。
import java.util.*;
public class sof {
static ArrayList<LinkedHashMap<String, String>> table = new ArrayList<LinkedHashMap<String, String>>(); //2d ArrayList
public static void main(String args[]) {
setMatrix();
print();
System.out.println();
editValue2();
}
static void print(){
for(int x = 0; x < table.size();x++){
System.out.println(table.get(x));
}
}
static String setChar(){
String result = "";
Random random = new Random();
for(int x = 1; x < 4 ; x++){
result += (char)(32 + random.nextInt(95));
}
return result;
}
static void setRow(int x){
LinkedHashMap<String, String> arr = new LinkedHashMap<>();
for(int z=1; z <= x; z++){
String ran = setChar();
String rann = setChar();
arr.put(ran,rann);
}
table.add(arr);
}
static void Setmatrix(){
Scanner row = new Scanner(System.in);
System.out.println("Enter Row: ");
int zz = row.nextInt();
Scanner column = new Scanner(System.in);
System.out.println("Enter Column: ");
int z = column.nextInt();
for(int x = 0; x <= zz-1; x++){
setRow(z);
}
}
static void editValue2(){
Scanner sc = new Scanner(System.in);
String edited = sc.nextLine();
System.out.println("Enter Row: ");
int ind1 = sc.nextInt();
System.out.println("Enter Col: ");
int ind2 = sc.nextInt();
System.out.println("Enter Key: ");
String key = sc.nextLine();
System.out.println("Enter Key: ");
String value = sc.nextLine();
int col=0;
int row=0;
LinkedHashMap<String, String> copy = new LinkedHashMap<String, String>();
for (LinkedHashMap<String, String> map : table){
for(Map.Entry<String,String> set1 : map.entrySet()){
int i = 0;
if(ind1==0 && ind2==0){
copy.put(key,value);
copy.putAll(map);
}else{
if(ind1 == row&& ind2==col){
copy.put(key,value);
}
copy.put(set1.getKey(),set1.getValue());
}
col++;
}
row++;
col=0;
}
map.clear();
map.putAll(copy);
copy.clear();
copy=null;
}
}
我希望我可以编辑任何给定表中任何索引的键和值。键也必须是唯一的。
答案 0 :(得分:0)
您可以获取并设置给定索引的ArrayList值,并替换保留LinkedHashMap中的地图索引的键值,您必须使用新值克隆它。在这种情况下,您将走在正确的轨道上。
editValue2方法的已编辑代码
int col = 0;
LinkedHashMap<String, String> copy = new LinkedHashMap<>();
// you can get the map from arrayList index
LinkedHashMap<String, String> map = table.get( ind1 ); // assuming ind1 is the arrayList index
for ( Map.Entry<String, String> entry : map.entrySet() )
{
// assuming ind2 is the map index
if ( ind2 == col )
{
copy.put( key, value );
}
else
{
copy.put( entry.getKey(), entry.getValue() );
}
col++;
}
table.set( ind1, copy );