Java 如何删除从hashmap生成的重复结果
我遇到了一个问题-有一个包含标签的盒子,里面有值。例如,标签为“a”的框包含值2,标签为“b”的框包含值7等。我被要求查找相加为10的对。我编写了下面的代码来使用hashmap查找这对。但它包含两次相同的结果,只是字母的位置不同。 例如-(a,e)与(e,a)相同 如何仅保留/打印唯一的一对 下面是我的代码:Java 如何删除从hashmap生成的重复结果,java,hashmap,Java,Hashmap,我遇到了一个问题-有一个包含标签的盒子,里面有值。例如,标签为“a”的框包含值2,标签为“b”的框包含值7等。我被要求查找相加为10的对。我编写了下面的代码来使用hashmap查找这对。但它包含两次相同的结果,只是字母的位置不同。 例如-(a,e)与(e,a)相同 如何仅保留/打印唯一的一对 下面是我的代码: public class BoxValue { public void pair() { int sum = 10; HashMap<Int
public class BoxValue {
public void pair()
{
int sum = 10;
HashMap<Integer, Character> m = new HashMap<Integer, Character>();
m.put(2, 'a');
m.put(7, 'b');
m.put(4, 'c');
m.put(3, 'd');
m.put(8, 'e');
m.put(6, 'f');
Set<Integer> s = m.keySet();
for(Integer in : s)
{
if(m.containsKey(sum-in))
System.out.println(m.get(in)+","+m.get(sum-in));
}
}
public static void main(String[] args) {
BoxValue bv = new BoxValue();
bv.pair();
}
}
公共类BoxValue{
公共无效对()
{
整数和=10;
HashMap m=新的HashMap();
m、 将(2,'a');
m、 put(7,'b');
m、 put(4,'c');
m、 put(3,'d');
m、 put(8,'e');
m、 put(6,'f');
设置s=m.keySet();
for(整数单位:s)
{
如果(m.containsKey(金额单位))
System.out.println(m.get(in)+“,“+m.get(sum-in));
}
}
公共静态void main(字符串[]args){
BoxValue bv=新的BoxValue();
bv.pair();
}
}
您可以将地图用于键
List<Integer> s = new ArrayList<>(m.keySet()); // Create a key list
HashMap<Integer, Boolean> pos = new HashMap<Integer, Boolean>(); // Map for used key
for (int i = 0; i < s.size(); i++) {
if (m.containsKey(sum - s.get(i)) && !pos.containsKey(sum - s.get(i)))
System.out.println(m.get(s.get(i)) + "," + m.get(sum - s.get(i)));
pos.put(s.get(i), true); // Update map
}
List s=newarraylist(m.keySet());//创建密钥列表
HashMap pos=新的HashMap();//使用过的密钥的映射
对于(int i=0;i
我只需要使用集合
来跟踪您已经看到的补充:
Set<Integer> seen = new HashSet<>();
for (Integer in : m.keySet())
{
if(m.containsKey(sum-in) && !seen.contains(in))
{
System.out.println(m.get(in) + "," + m.get(sum-in));
seen.add(sum-in);
}
}
输出:
a,e
d,b
c,f
我想您需要跟踪
sum-in
值。仅供参考:char
类型在Java中已经过时。用数字代替。
a,e
d,b
c,f