首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何创建一个以不同列表作为值的Map?

如何创建一个以不同列表作为值的Map?
EN

Stack Overflow用户
提问于 2021-05-14 07:04:04
回答 2查看 83关注 0票数 0

我正在尝试创建一个算法来找到GCD。我知道有更好的方法来解决这个问题,但是我陷入了这个问题:我使用了一个带Key = Divisor和Value = ArrayList的映射来进行除法。

我想为每个键创建一个新的ArrayList,但是我将继续填充相同的ArrayList。

代码语言:javascript
运行
复制
Map<Integer,ArrayList<Integer>> map = new HashMap<Integer,ArrayList<Integer>>();
    int[] arr = {9,27,63}; //input
    ArrayList <Integer> v= new ArrayList<Integer>();



    for (int i = 0; i < arr.length; i++) {
 
        for (int div = 1 ; div < arr[i]; div++) {

            map.put(div, v);
            if ((arr[i] % div) == 0) {
                v.add(arr[i]);
            }
        }
    }

    int result;

    //print
    for (Map.Entry<Integer,ArrayList<Integer>> entry:map.entrySet()) {
        System.out.print("Key: "+(int)entry.getKey());
        System.out.print("");
        for(Integer in: entry.getValue()){
            System.out.print("-> "+in + " ");
        }
        System.out.println();
       //if size of ArrayList == arr input -> is a common divisor. The Greatest is the MCD
       if (entry.getValue().size() == arr.length){
            max = (int)entry.getKey();
        }
    }

    System.out.println("Result: "+ result); //ERROR
}

输出示例:

代码语言:javascript
运行
复制
Key: 57-> 9 -> 9 -> 27 -> 27 -> 27 -> 63 -> 63 -> 63 -> 63 -> 63 
Key: 58-> 9 -> 9 -> 27 -> 27 -> 27 -> 63 -> 63 -> 63 -> 63 -> 63 
Key: 59-> 9 -> 9 -> 27 -> 27 -> 27 -> 63 -> 63 -> 63 -> 63 -> 63 

很明显,57不能除以9,所以这个列表应该是清楚的。所以,每次我找到一个除数,我就把它放在同一个列表中。有人能帮我吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-05-14 07:14:01

您应该查看Java对象引用。

我只是浏览了一下你的代码,但是,我想你想要的是

代码语言:javascript
运行
复制
for (int i = 0; i < arr.length; i++) {
        for (int div = 1 ; div < arr[i]; div++) {
            if ((arr[i] % div) == 0) {
                if (!map.containsKey(div)) {
                    map.put(div, new ArrayList<>());
                }
                map.get(div).add(arr[i]);
            }
        }
    }
票数 2
EN

Stack Overflow用户

发布于 2021-05-14 07:53:03

根据你的需要,我认为这是你想要的。在循环中,总是循环到数/2,作为其因子,因为a 数没有大于其一半的任何因子。

代码语言:javascript
运行
复制
    Map<Integer,ArrayList<Integer>> map = new HashMap<Integer,ArrayList<Integer>>();
    int[] arr = {9,27,63}; //input

    for (int i = 0; i < arr.length; i++) {
        int number = arr[i];
        for (int div = 1 ; div <= number/2 ; div++) {
            ArrayList <Integer> v= new ArrayList<>();
            if ((number % div) == 0) {
                if(!map.containsKey(div))
                    map.put(div, v);
                map.get(div).add(number);
            }
        }
    }

输出:

代码语言:javascript
运行
复制
Key: 1-> 9 -> 27 -> 63 
Key: 3-> 9 -> 27 -> 63 
Key: 21-> 63 
Key: 7-> 63 
Key: 9-> 27 -> 63 

根据您的需要,请告诉我是否正确。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67530278

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档