热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

如何通过Hashmap<int<arraylist>>修复循环,分配比预期更多的值

如何解决《如何通过Hashmap<int<arraylist>>修复循环,分配比预期更多的值》经验,为你挑选了1个好方法。

提前谢谢你的时间!我正在研究Fruchterman Reingold Graph的创建者,我陷入了一个似乎非常简单的问题.简而言之,我想初始化一个包含Integer键的Hashmap,即我所处的顶点,以及x位置和y位置的整数List.但是,以下代码放置8而不是2个位置值,而不是每个键2.任何帮助或提示,非常感谢!

package testing.ground;

import java.util.*;


public class TestingGround {


public static void main(String[] args) {


    Random ranx = new Random();
    Random rany = new Random();
    HashMap> positiOns=new HashMap>();
    List temp = new ArrayList();

    int n = 3;
    int area = 1280*720;
    int vposx=0;
    int vposy=0;


    double k = 0.5*(Math.sqrt(area/n));
    for (int i=0; i<=n; i++){
        vposx=ranx.nextInt(1280)+1;
        vposy=rany.nextInt(720)+1;
        temp.add(vposx);
        temp.add(vposy);
        positions.put(i,temp);

    }
        System.out.println(positions);
}
}

结果就是这些

{0 = [1063,102,41,391,614,418,751,599],1 = [1063,102,41,391,614,418,751,599],2 = [1063,102,41, 391,614,418,751,599],3 = [1063,102,41,391,614,418,751,599]}

预期的将是简单的0=[randomx,randomy], 2=[randomx,randomy] and so on.



1> Eran..:

您应该ArrayList为您的每个值创建一个新的Map:

for (int i=0; i<=n; i++){
    List temp = new ArrayList<>();
    vposx=ranx.nextInt(1280)+1;
    vposy=rany.nextInt(720)+1;
    temp.add(vposx);
    temp.add(vposy);
    positions.put(i,temp);
}

否则,您将Map使用相同的值关联您的所有键List.


推荐阅读
author-avatar
小鬼6Pi7
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有