Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/blackberry/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何在添加键值后对树映射进行排序_Java_Sorting_Treemap - Fatal编程技术网

Java 如何在添加键值后对树映射进行排序

Java 如何在添加键值后对树映射进行排序,java,sorting,treemap,Java,Sorting,Treemap,我有一个树状图,它在科目类中按比较器排序到 当我初始化树状图时,它会被排序,但当我尝试使用此函数(向特定帐户添加资金)时,它仅在我更改的值不是树状图中的第一个或最后一个值时才起作用 这是代码。我做错了什么 public static void deposit(TreeMap<Account,MyLinkedList<Customer>> map){ boolean flag = false; int num ;

我有一个树状图,它在
科目
类中按
比较器排序到

当我初始化树状图时,它会被排序,但当我尝试使用此函数(向特定帐户添加资金)时,它仅在我更改的值不是树状图中的第一个或最后一个值时才起作用

这是代码。我做错了什么

 public static void deposit(TreeMap<Account,MyLinkedList<Customer>> map){
            boolean flag = false;
            int num ;
            int amount;
            System.out.println("please enter account number");
            num = s.nextInt();
            //for(Iterator<Account> i = map.;i.hasNext())
            for(Map.Entry<Account, MyLinkedList <Customer>> entry : map.entrySet()){
                if(entry.getKey().getAccNumber() == num){
                    flag = true;
                    System.out.println("Please enter amount");
                    amount = s.nextInt();
                    entry.getKey().setAccBalance(entry.getKey().getAccBalance()+amount);

                    Account temp = entry.getKey();
                    MyLinkedList<Customer> tempList = entry.getValue();
                    map.remove(entry.getKey());
                    map.put(temp, tempList);

                    break;
                }
            }
            if(flag == false) {
                System.out.println("Account doesn't exist");
                return;
            }
        }
    }
公共静态无效存款(树状地图){
布尔标志=假;
int-num;
整数金额;
System.out.println(“请输入账号”);
num=s.nextInt();
//for(迭代器i=map.;i.hasNext())
对于(Map.Entry:Map.entrySet()){
if(entry.getKey().getAccNumber()==num){
flag=true;
System.out.println(“请输入金额”);
金额=s.nextInt();
entry.getKey().setAccBalance(entry.getKey().getAccBalance()+金额);
帐户温度=entry.getKey();
MyLinkedList tempList=entry.getValue();
map.remove(entry.getKey());
地图放置(临时,圣堂武士);
打破
}
}
如果(标志==false){
System.out.println(“帐户不存在”);
返回;
}
}
}

如果您必须遍历整个地图才能找到具有特定编号的帐户,则无法使用地图

也许你应该有两张地图。附加映射将是一个
HashMap
,并允许您在固定时间内按帐号定位一个
帐户

这将允许您摆脱循环(因为一旦您拥有给定帐号的
帐户
,一个
映射。get(Account)
将为您获得相应的值。这将允许您从现有
树映射
中删除和添加条目,这是迭代条目集时无法执行的(好的,您可以在条目集上使用显式迭代器进行删除,但不能插入)


顺便说一句,除非您的
TreeMap
compareTo
使用帐户余额来确定订单,否则您不必从TreeMap中删除条目并使用更新的余额重新添加它。

首先,感谢您的回复。我使用帐户余额来确定订单,因此我认为我必须删除并再次添加。a我应该如何实现这个新的地图?在函数里面?@ ReavyVy是的,你必须删除和添加。对于新的地图,如果每次调用该方法,它就不那么有效。你应该考虑把它作为第二个参数传递给你的方法。但是我如何使用新的哈希表来添加这些值?我明白我的意思。使用get account可以通过o(1)得到它,但是我如何从hashmap中添加值(因为它们的键是整数)对不起,我是一个学生,也许我会问一些愚蠢的问题:)@RoyLevy假设你将你的方法传递到
TreeMap map
hashmap acctMap
account acct=acctMap.get(num)
将为您提供与账号
num
匹配的
帐户,假设该帐户存在。然后
map.get(acct)
将为您提供该帐户的
MyLinkedList
值。现在您可以删除旧条目,修改密钥并重新添加修改的条目。