Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/spring-boot/5.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
hashmap值通过执行诸如retainal()之类的操作来更改 String[]keys0=a.keySet()。toArray(新字符串[a.size()]); MapSub_hash=newhashmap(); for(ko=0;ko我的要求是,我需要将每个键与连续的键值进行比较,我应该将这些值保留到一个子散列映射中,但随着上面的值更改每次迭代的映射,我最终将其设置为一个空集,,,其中将没有要比较的值…@naveen这是因为复制映射时,它不会生成一个“深度复制”!这意味着映射及其副本都包含对相同集合对象的引用!进行internet搜索以了解java中映射的深度副本与浅层副本之间的区别。另请参见:但我有以下列{列名:e2;列名:sp;列名:m2;列名:m3;列名:cp2;列名:e2lab;列名:splab;列名:cmlab;列名:cp2lab;列名:itws;}-->我的要求是我需要将每个键与连续的键值进行比较,我应该将这些值保留到sub_哈希映射中,但随着上述值更改每次迭代的映射,我最终将其设置为一个空集,,,其中将没有要比较的值..我的解决方案将出错…cp2=[4,8,45,109,110,132,152,207],m2=[4,7,14,16,23,27,32,35,50,55,72,86,94,98,103,104,110,116,121,131,132,135,141,143,148,152,181,183,200,206],这些是我的集合cp2=[4,8,45,109,110,132,152,207],m2=[4、7、14、16、23、27、32、35、50、55、72、86、94、98、103、104、110、116、121、131、132、135、141、143、148、152、181、183、200、206]假设我有这样的hashmap,其中key=cp2值为{},key2=m2,并且设置了值,现在我正在执行retainal();通过迭代循环的操作,我的hashmap值会发生变化……像这样的cp2=[4,110,132,152],m2=[4,110,132,152],cmlab=[4,110,132,152],m3=[4,110,132,152],}最后,集合变为空。@naveen映射没有更改,因为它在Java中没有也不可能有集合,它有一个对集合的引用。因此,当您更改集合的一个且只有一个副本时,它在映射中似乎会更改,但映射不会以任何方式更改。您需要做的是在修改之前获取集合的副本如果复制。这是映射中的副本不会更改。它确实很有帮助,这是一个正确的解决方案,我所做的是创建了它的相同副本,但做了一些修改,我将键转换为字符串[],将值转换为ArrayList[]然后对它进行比较…然后我得到了所需的结果…但是上面的想法有所帮助,因为我还创建了它的副本并执行了操作…但是我需要一个建议,这样做是否会增加空间复杂性…比如拆分和比较。。 Set<Integer> so1 = test.get( keys0[ko1] ); boolean tr=so1.retainAll(so); Set<Integer> so1 = new TreeSet<>(test.get( keys0[ko1] )); boolean tr=so1.retainAll(so);_Java_Hashmap - Fatal编程技术网

hashmap值通过执行诸如retainal()之类的操作来更改 String[]keys0=a.keySet()。toArray(新字符串[a.size()]); MapSub_hash=newhashmap(); for(ko=0;ko我的要求是,我需要将每个键与连续的键值进行比较,我应该将这些值保留到一个子散列映射中,但随着上面的值更改每次迭代的映射,我最终将其设置为一个空集,,,其中将没有要比较的值…@naveen这是因为复制映射时,它不会生成一个“深度复制”!这意味着映射及其副本都包含对相同集合对象的引用!进行internet搜索以了解java中映射的深度副本与浅层副本之间的区别。另请参见:但我有以下列{列名:e2;列名:sp;列名:m2;列名:m3;列名:cp2;列名:e2lab;列名:splab;列名:cmlab;列名:cp2lab;列名:itws;}-->我的要求是我需要将每个键与连续的键值进行比较,我应该将这些值保留到sub_哈希映射中,但随着上述值更改每次迭代的映射,我最终将其设置为一个空集,,,其中将没有要比较的值..我的解决方案将出错…cp2=[4,8,45,109,110,132,152,207],m2=[4,7,14,16,23,27,32,35,50,55,72,86,94,98,103,104,110,116,121,131,132,135,141,143,148,152,181,183,200,206],这些是我的集合cp2=[4,8,45,109,110,132,152,207],m2=[4、7、14、16、23、27、32、35、50、55、72、86、94、98、103、104、110、116、121、131、132、135、141、143、148、152、181、183、200、206]假设我有这样的hashmap,其中key=cp2值为{},key2=m2,并且设置了值,现在我正在执行retainal();通过迭代循环的操作,我的hashmap值会发生变化……像这样的cp2=[4,110,132,152],m2=[4,110,132,152],cmlab=[4,110,132,152],m3=[4,110,132,152],}最后,集合变为空。@naveen映射没有更改,因为它在Java中没有也不可能有集合,它有一个对集合的引用。因此,当您更改集合的一个且只有一个副本时,它在映射中似乎会更改,但映射不会以任何方式更改。您需要做的是在修改之前获取集合的副本如果复制。这是映射中的副本不会更改。它确实很有帮助,这是一个正确的解决方案,我所做的是创建了它的相同副本,但做了一些修改,我将键转换为字符串[],将值转换为ArrayList[]然后对它进行比较…然后我得到了所需的结果…但是上面的想法有所帮助,因为我还创建了它的副本并执行了操作…但是我需要一个建议,这样做是否会增加空间复杂性…比如拆分和比较。。 Set<Integer> so1 = test.get( keys0[ko1] ); boolean tr=so1.retainAll(so); Set<Integer> so1 = new TreeSet<>(test.get( keys0[ko1] )); boolean tr=so1.retainAll(so);

hashmap值通过执行诸如retainal()之类的操作来更改 String[]keys0=a.keySet()。toArray(新字符串[a.size()]); MapSub_hash=newhashmap(); for(ko=0;ko我的要求是,我需要将每个键与连续的键值进行比较,我应该将这些值保留到一个子散列映射中,但随着上面的值更改每次迭代的映射,我最终将其设置为一个空集,,,其中将没有要比较的值…@naveen这是因为复制映射时,它不会生成一个“深度复制”!这意味着映射及其副本都包含对相同集合对象的引用!进行internet搜索以了解java中映射的深度副本与浅层副本之间的区别。另请参见:但我有以下列{列名:e2;列名:sp;列名:m2;列名:m3;列名:cp2;列名:e2lab;列名:splab;列名:cmlab;列名:cp2lab;列名:itws;}-->我的要求是我需要将每个键与连续的键值进行比较,我应该将这些值保留到sub_哈希映射中,但随着上述值更改每次迭代的映射,我最终将其设置为一个空集,,,其中将没有要比较的值..我的解决方案将出错…cp2=[4,8,45,109,110,132,152,207],m2=[4,7,14,16,23,27,32,35,50,55,72,86,94,98,103,104,110,116,121,131,132,135,141,143,148,152,181,183,200,206],这些是我的集合cp2=[4,8,45,109,110,132,152,207],m2=[4、7、14、16、23、27、32、35、50、55、72、86、94、98、103、104、110、116、121、131、132、135、141、143、148、152、181、183、200、206]假设我有这样的hashmap,其中key=cp2值为{},key2=m2,并且设置了值,现在我正在执行retainal();通过迭代循环的操作,我的hashmap值会发生变化……像这样的cp2=[4,110,132,152],m2=[4,110,132,152],cmlab=[4,110,132,152],m3=[4,110,132,152],}最后,集合变为空。@naveen映射没有更改,因为它在Java中没有也不可能有集合,它有一个对集合的引用。因此,当您更改集合的一个且只有一个副本时,它在映射中似乎会更改,但映射不会以任何方式更改。您需要做的是在修改之前获取集合的副本如果复制。这是映射中的副本不会更改。它确实很有帮助,这是一个正确的解决方案,我所做的是创建了它的相同副本,但做了一些修改,我将键转换为字符串[],将值转换为ArrayList[]然后对它进行比较…然后我得到了所需的结果…但是上面的想法有所帮助,因为我还创建了它的副本并执行了操作…但是我需要一个建议,这样做是否会增加空间复杂性…比如拆分和比较。。 Set<Integer> so1 = test.get( keys0[ko1] ); boolean tr=so1.retainAll(so); Set<Integer> so1 = new TreeSet<>(test.get( keys0[ko1] )); boolean tr=so1.retainAll(so);,java,hashmap,Java,Hashmap,这是我的第二篇文章,我不知道如何整洁地发布要求是我有一个包含键和值的哈希映射,我需要将映射中的一个键与映射中的另一个键进行比较,保留值并将结果放入sub_哈希映射,但问题是映射的原始值随着映射值的变化而变化通过retainal()方法更新; 但是当迭代到第二个关键点时,值会完全改变,但是比较是这样的2-3,2-4,2-5,2-6,2-7…等等,但是 随着值的更改,结果是完全错误的,因此是否有可能将其设置为常量,就像hashmap的某个最终变量一样。这是您的问题: String [] keys0

这是我的第二篇文章,我不知道如何整洁地发布要求是我有一个包含键和值的哈希映射,我需要将映射中的一个键与映射中的另一个键进行比较,保留值并将结果放入sub_哈希映射,但问题是映射的原始值随着映射值的变化而变化通过retainal()方法更新; 但是当迭代到第二个关键点时,值会完全改变,但是比较是这样的2-3,2-4,2-5,2-6,2-7…等等,但是 随着值的更改,结果是完全错误的,因此是否有可能将其设置为常量,就像hashmap的某个最终变量一样。

这是您的问题:

String [] keys0 =a.keySet(). toArray (new String[a.size()]);

Map< String , TreeSet <Integer>> Sub_hash=new HashMap< String, TreeSet <Integer>>();


for(ko  = 0 ; ko < keys0 . length ; ko ++) {

    Set<Integer> so = test.get( keys0[ko] );    

  System.out.println(""+so);

for(ko1 = ko+1 ; ko1 < keys0.length; ko1++) {

    Set<Integer> so1 = test.get( keys0[ko1] );

    boolean tr=so1.retainAll(so);

            if(tr && so1.size()>=2) {
                Sub_hash. put(keys0[ko]+keys0[ko1], (TreeSet<Integer>) so1);    

                System.out.println(""+Sub_hash.size()+""+Sub_hash);

            }
            }}
地图(或任何集合)只能包含对对象的引用,而不能包含对象本身的引用。当您将引用的副本放入集合或从集合中获取引用时,您复制的只是引用,而不是底层对象

从地图中获取集并修改该集时,该集只有一个副本

注意:更改地图中的集合时,地图不会更改


如果你想要一个集合的副本,你必须明确地这样做。

我实际上已经创建了一个该对象的副本,我使用了test.putAll(object)并将数据复制到test中,并尝试执行交叉操作,但出乎意料地,我的map.的值被还原到我引用它的原始对象中。。。我的要求是,即使在交集之后,映射也应该保持原样,并且值存储在sub_散列函数中。{cp2splab=[8,45,110,132,207],cp2e2lab=[4,8,45,110,132,152,207],cp2itws=[4,8,109,110,207],cp2cp2lab=[4,8,45,110,132,152,207],cp2m2=[4,110,132,152],cp2m3=[4,8,110,132,152,207]}我有类似{列名:e2;列名:sp;列名:m2;列名:m3;列名:cp2;列名:e2lab;列名:splab;列名:cmlab;列名:cp2lab;列名:itws;}-->我的要求是,我需要将每个键与连续的键值进行比较,我应该将这些值保留到一个子散列映射中,但随着上面的值更改每次迭代的映射,我最终将其设置为一个空集,,,其中将没有要比较的值…@naveen这是因为复制映射时,它不会生成一个“深度复制”!这意味着映射及其副本都包含对相同集合对象的引用!进行internet搜索以了解java中映射的深度副本与浅层副本之间的区别。另请参见:但我有以下列{列名:e2;列名:sp;列名:m2;列名:m3;列名:cp2;列名:e2lab;列名:splab;列名:cmlab;列名:cp2lab;列名:itws;}-->我的要求是我需要将每个键与连续的键值进行比较,我应该将这些值保留到sub_哈希映射中,但随着上述值更改每次迭代的映射,我最终将其设置为一个空集,,,其中将没有要比较的值..我的解决方案将出错…cp2=[4,8,45,109,110,132,152,207],m2=[4,7,14,16,23,27,32,35,50,55,72,86,94,98,103,104,110,116,121,131,132,135,141,143,148,152,181,183,200,206],这些是我的集合cp2=[4,8,45,109,110,132,152,207],m2=[4、7、14、16、23、27、32、35、50、55、72、86、94、98、103、104、110、116、121、131、132、135、141、143、148、152、181、183、200、206]假设我有这样的hashmap,其中key=cp2值为{},key2=m2,并且设置了值,现在我正在执行retainal();通过迭代循环的操作,我的hashmap值会发生变化……像这样的cp2=[4,110,132,152],m2=[4,110,132,152],cmlab=[4,110,132,152],m3=[4,110,132,152],}最后,集合变为空。@naveen映射没有更改,因为它在Java中没有也不可能有集合,它有一个对集合的引用。因此,当您更改集合的一个且只有一个副本时,它在映射中似乎会更改,但映射不会以任何方式更改。您需要做的是在修改之前获取集合的副本如果复制。这是映射中的副本不会更改。它确实很有帮助,这是一个正确的解决方案,我所做的是创建了它的相同副本,但做了一些修改,我将键转换为字符串[],将值转换为ArrayList[]然后对它进行比较…然后我得到了所需的结果…但是上面的想法有所帮助,因为我还创建了它的副本并执行了操作…但是我需要一个建议,这样做是否会增加空间复杂性…比如拆分和比较。。
Set<Integer> so1 = test.get( keys0[ko1] );
boolean tr=so1.retainAll(so);
Set<Integer> so1 = new TreeSet<>(test.get( keys0[ko1] ));
boolean tr=so1.retainAll(so);