【问题标题】:How to find total number of different items within an arraylist.如何在数组列表中查找不同项目的总数。
【发布时间】:2012-08-23 05:08:58
【问题描述】:

我进行了一些搜索,但找不到有效的解决方案。我有一个存储字符串的数组列表,例如口香糖、袜子、OJ、狗粮……

我无法迭代列表以确定不同类型项目的总数。

即。

ArrayList<String> Store = new ArrayList<String>();
    this.Store.add("Gum");
    this.Store.add("Gum");
    this.Store.add("Socks");
    this.Store.add("Candy");

该列表共有 4 个项目,但只有三种不同的项目(口香糖、吸吮、糖果)。

我将如何设计一种计算 3 的方法?

【问题讨论】:

  • 使用值作为键将它们放入映射中。拿到最后的钥匙,数一数。

标签: java arraylist duplicates loops


【解决方案1】:

什么Bhesh Gurung said,但在代码中:

int numUnique = new HashSet<String>(Store).size();

如果你实际拥有的是StoreItems 并且需要通过getName() 那么我会这样做

Set<String> itemNames = new HashSet<String>();
for (StoreItem item : Store)
    itemNames.add(item.getName());
int numUnique = itemNames.size();

【讨论】:

  • 这将包含整个方法还是将其放入循环列表中?
  • @RyanPeters:不需要迭代,就是这样。
  • @Ryan Peters:您不需要任何显式迭代,它由上面的代码在幕后完成。 numUnique 将是唯一字符串的数量,在您的情况下为 3。
  • 好的,我明白了。假设我的列表实际上包含一个具有特定名称的 StoreItem 对象。我可以这样设置吗... int numUnique = new HashSet(Store).size(); ?
  • 啊!完美的。这说得通。谢谢。
【解决方案2】:

使用Set (HashSet),其大小可以满足您的需求。

【讨论】:

    【解决方案3】:

    这看起来像一个家庭作业......所以,如果你不理解上面提出的 HashSet 解决方案(或者对 HashMap 做同样的事情),考虑做这样的事情:

    创建一个新的数组列表

    取一个元素并检查它是否存在于新的ArrayList中

    如果它存在于新的 ArrayList 中,则什么也不做。否则添加它。

    执行此操作,直到您检查了 ArrayList 的最后一个元素。

    那么,新数组列表的大小应该就是你要找的数字了。

    【讨论】:

    • 整个程序将通过一个 TUI 运行,用户可以在其中添加新项目,并且总数应相应更新。这个解决方案还能用吗?
    【解决方案4】:

    你可以使用lastIndexOf方法循环遍历arraylist。

    char count=0;
    
        for(char i=0; i<araylist.size(); i++){
            if(i == araylist.lastIndexOf(araylist.get(i))){
                count++;
            }
        }
    

    经过测试。

    【讨论】:

      猜你喜欢
      • 2019-07-19
      • 1970-01-01
      • 1970-01-01
      • 2021-08-30
      • 2021-12-19
      • 2023-03-11
      • 2015-11-16
      • 2011-07-19
      • 2020-09-03
      相关资源
      最近更新 更多