防止arraylist中的重复条目

tyh:

说我像这样创建一些对象类

public class thing {
        private String name; 
        private Integer num;

        public oDetails (String a, Integer b) {
            name = a;
            num = b;
        }
...gets/ sets/ etc

现在,我想创建一个arraylist来容纳许多这样的对象类。

ArrayList<thing> myList = new ArrayList<thing>;
thing first = new thing("Star Wars", 3);
thing second = new thing("Star Wars", 1);
myList.add(first);
myList.add(second);

我想包含某种逻辑,以便在这种情况下...当我们尝试添加对象“ second”而不是向arrayList添加新对象时,我们将second.getNum()添加到first.getNum()。因此,如果要遍历ArrayList,它将是

"Star Wars", 4

我在想出一种优雅的方式来解决这个问题时遇到了麻烦。随着arraylist的增长,搜索它以确定是否存在重复的名称项变得很麻烦。有人可以为此提供一些指导吗?

猎人麦克米伦:

您将必须创建自己的方法来检查nameThing类字段是否设置为“ Star Wars”,然后将其添加到numClass Thing 的相应字段中,这是一种可能的解决方案。

另一种解决方案是使用Map以name字段作为键,以num字段作为值的a。

例如:

public class Thing
{
   private String name;
   private int    num;

   public Thing(String name, int num)
   {
       this.name = name;
       this.num  = num;
   } 
}

public class ThingMap
{
    Map<String, Integer> thingMap; 

    public ThingMap()
    {
       this.thingMap = new HashMap<>();
    }

    public void put(Thing t)
    {
       String  k = t.getName();
       Integer v = t.getNum();

       if(thingMap.get(k) == null) //no entry exists
       {
          thingMap.put(k, v);
       }
       else //entry exists
       {
          //add to the current value
          thingMap.put(k, thingMap.get(k) + v);
       }
    }

    public Integer get(String k)
    {
       return this.thingMap.get(k);
    }
}

public class TestThing
{
   public static void main(String[] args)
   {
      ThingMap tMap = new ThingMap();
      Thing a = new Thing("Star Wars", 3);
      Thing b = new Thing("Star Wars", 1);

      tMap.put(a);
      tMap.put(b);

      System.out.println("Current value: " + tMap.get(a.getName());
   }

}

希望这可以帮助。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章