tyh*_*tyh 7 java arraylist no-duplicates
假设我像这样创建一些对象类
public class thing {
private String name;
private Integer num;
public oDetails (String a, Integer b) {
name = a;
num = b;
}
...gets/ sets/ etc
Run Code Online (Sandbox Code Playgroud)
现在我想创建一个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);
Run Code Online (Sandbox Code Playgroud)
我想包含某种逻辑,以便在这种情况下......当我们尝试添加对象"second"而不是向arrayList添加新对象时,我们将second.getNum()添加到first.getNum().因此,如果您要遍历ArrayList,那么它就是
"Star Wars", 4
Run Code Online (Sandbox Code Playgroud)
我无法想出一个处理这个问题的优雅方法.随着arraylist的增长,搜索它以确定是否存在重复的名称项变得麻烦.任何人都可以提供一些指导吗?
您必须创建自己的方法来检查name
类 Thing 的字段是否设置为“星球大战”,然后添加到num
类 Thing 的相应字段,这是一种可能的解决方案。
另一种解决方案是使用Map
name 字段作为键,num 字段作为值。
前任:
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());
}
}
Run Code Online (Sandbox Code Playgroud)
希望这可以帮助。