ArrayList中的重复元素

时间:2013-04-16 07:41:06

标签: java arraylist

我有两个数组列表,一个是保存名称,另一个是保存数量。我想避免在数组列表中重复。名称数组列表包含名称,其对应的数量包含在数量数组列表中。

我的数组列表可以包含重复的名称,我想遍历数组列表以检查名称是否已存在,如果存在,则将数量添加到先前的值并删除重复的条目。

例如

Name     Quantity
ABC      20
xyz      10
ABC      15

需要输出

Name    Quantity
ABC      35
XYZ      10

由于

6 个答案:

答案 0 :(得分:3)

您应该使用Map,而不允许重复输入。你使用它是这样的:

Map<String, Integer> nameToQuantityMap = new HashMap<String, Integer>():

nameToQuantityMap.put("Mr Smith", 100);
nameToQuantityMap.put("Mrs Jones", 500);

编辑:既然您已编辑了问题,答案就不同了。如果要添加重复键的值,则必须执行以下操作:

// For each (name, quantity) pair
if (nameToQuantityMap.containsKey(name) ) {
    Integer sum = nameToQuantityMap.get(name) + quantity;
    nameToQuantityMap.put(name, sum);
}
else {
        nameToQuantityMap.put(name, quantity);
}

答案 1 :(得分:0)

I want to avoid duplicate in the array list. 

在这种情况下,请使用HashSet

否则,如果您有2个并行ArrayList,那么您可以使用 HashMap

答案 2 :(得分:0)

您尝试表示的结构类似于应由Map表示的内容,这是一个键 - &gt;值存储类型的结构。有两个列表并试图保持同步是一个坏主意。

答案 3 :(得分:0)

使用java.util.Map,其中key为map,value为value。

Map<String,Integer> map = new HashMap<>();
if(map.get(name)!=null){
    Integer oValue = map.get(name)+nNalue;
}else
   map.put(name,value);

答案 4 :(得分:0)

如果要在Key已存在的情况下将值添加到上一个值,请尝试此操作。

 public class Example {
    static Map<String, Integer> map = new HashMap<String, Integer>();

    public static void main(String[] args) {

        insertNameAndQuantity("A", 10);
        insertNameAndQuantity("B", 25);
        insertNameAndQuantity("A", 25);
        System.out.println(map);
    }

    public static void insertNameAndQuantity(String key, Integer value) {

        Integer count = map.get(key);
        if (count == null)
            map.put(key, value);
        else
            map.put(key, count + value);

    }
}

输出:

{A=35, B=25}

答案 5 :(得分:0)

这是关于c#代码的示例工具。

public class temp
{
    [Test]
    public void T()
    {
        var list1 = new ArrayList(){"ABC", "xyz", "ABC"};
        var list2 = new ArrayList() {20, 10, 15};

        var nameList = new List<string>();
        var list1result = new ArrayList();
        var list2result = new ArrayList();

        int index = 0;
        foreach (string name in list1)
        {
            if (!nameList.Contains(name))
            {
                list1result.Add(name);
                var quantity = list2[index] ?? 0;
                list2result.Add(quantity);
                nameList.Add(name);
            }
            else
            {
                var index2 = 0;
                foreach (string name2 in list1result)
                {
                    if (name2 == name)
                    {
                        list2result[index2] = (int)list2result[index2] + (int)list2[index];
                    }
                    index2++;
                }
            }
            index++;
        }

        Assert.True(list1result.Count == 2, list1result.Count + " t1");
    }

}

我测试了输出,这是正确的。