Java 如何删除从hashmap生成的重复结果

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

我遇到了一个问题-有一个包含标签的盒子,里面有值。例如,标签为“a”的框包含值2,标签为“b”的框包含值7等。我被要求查找相加为10的对。我编写了下面的代码来使用hashmap查找这对。但它包含两次相同的结果,只是字母的位置不同。 例如-(a,e)与(e,a)相同 如何仅保留/打印唯一的一对

下面是我的代码:

 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