从树形图中删除元素

时间:2019-04-28 07:05:01

标签: java treemap

我已经编写了一个代码,该代码需要一个整数数组,并且我无法找到一种方法来删除具有(假)值的树形图元素。 任何帮助,将不胜感激。 代码是。

import java.util.*;

public class Solution {
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        Scanner s=new Scanner(System.in);
        int x=s.nextInt();
        String[] str=new String[x];
        for(int i=0;i<x;i++)
        {
            str[i]=s.next();
        }
        TreeMap<Character, Boolean> store=new TreeMap<Character, Boolean>();
        for(int i=0;i<str[0].length();i++)
        {
            store.put(str[0].charAt(i), false);
        }
        for(int i=1;i<str.length;i++)
        {
            for(int j=0;j<str[i].length();j++)
            {
                if(store.containsKey(str[i].charAt(j)))
                {
                    store.put(str[i].charAt(i), true);
                }
            }
                //code for removing elements from treemap with false value.
        }
    }
}

2 个答案:

答案 0 :(得分:1)

没有有效的方法来找到所有具有给定值的Map条目并将其删除。为此,您必须遍历所有条目。

但是,您不必这样做。只需避免首先将它们放在Map中。不要将带有String值的第一个false字符放在Map中,而是将它们放在单独的Set中:

Map<Character, Boolean> store = new TreeMap<>();
Set<Character> set = new TreeSet<>();
for(int i=0;i<str[0].length();i++)
{
    set.add(str[0].charAt(i));
}
for(int i=1;i<str.length;i++)
{
    for(int j=0;j<str[i].length();j++)
    {
        if(set.contains(str[i].charAt(j)))
        {
            store.put(str[i].charAt(i), true);
        }
    }
}

答案 1 :(得分:0)

如果您有一个TreeMap,并且想要删除所有错误值,则可以使用Java 8中的lambda使用oneliner实现。

map.entrySet().removeIf(entry -> !entry.getValue()); // getValue() will return a boolean