【问题标题】:How to get unique elements from ArrayList without clone如何在不克隆的情况下从 ArrayList 中获取唯一元素
【发布时间】:2015-10-31 22:41:39
【问题描述】:

我正在尝试从另一个具有重复元素的 ListArrayB 中创建一个唯一的 ListArrayA。 ListArrayA 和 ListArrayB 是分开定义的。列表 B 已经填充了数据,并且其中包含大约 10000 个整数。

我创建了一个名为 unique() 的函数并使用了以下逻辑。在运行此逻辑时,程序永远不会结束。我想知道这是非常简单和小逻辑但仍然无法正常工作。静态声明有问题吗?

基本上我想从 ListB 创建一个新的 Array/ArrayList ,这样我在 List A 中有唯一的元素。我不想松开 List B 。我想保持列表 B 原样。

我该怎么做?我听说克隆另一个列表,然后进行基本搜索以创建一个新列表。我不克隆(复制)以保持效率。

我还听说过 HashSet。但我不想克隆 List B 的副本,也不想丢失 List B 的内容。 [清单 B 应保持原样]。我怎样才能实现它?

static ArrayList<Integer> a = new ArrayList<Integer>();
static ArrayList<Integer> b = new ArrayList<Integer>();
function unique(){
  a.add(b.get(0));
  for(int i=1;i<b.size();i++){
        for(int m=0;m<a.size();m++){
            if(b.get(i)!=a.get(m)){
                a.add(b.get(i));
            }
        }
    }
}

我想到的 HashSet 的代码。但我无法从中访问元素。

static Set<Integer> uniqueElem;

然后在函数调用中我初始化它:

uniqueElem = new HashSet<Integer>(b);

请帮忙!提前致谢!

【问题讨论】:

  • 你反对一套的理由对我来说毫无意义。如果您不知道如何访问元素,请阅读有关集合以及如何迭代它们的基本教程
  • 我弄乱了 HashSet 中元素的顺序!
  • 有更多的Set 实现,而不仅仅是HashSet ...所以环顾四周,您会找到适合您的。

标签: java arrays list hashset


【解决方案1】:

您可以在 O(n) 时间内通过遍历列表并将存在的元素添加到 HashMap 中找到列表中的唯一元素。它可以是HashMap&lt;Integer,Integer&gt;,第二个值是该值出现的次数,如果你关心的话。

构建HashMap 后,您可以通过HashMap.get(Integer value) 进行查找以询问“此元素是否存在”,如果答案为“否”,则返回null

或者,如果您只想查看值是什么,请打印出通过 HashMap.keySet() 返回的键集。

【讨论】:

  • 非常感谢。我正在尝试您建议的方式。谢谢!
  • 技术上,这是 O(nlogn) - 你为每个元素做一个 HashMap 插入。
  • 你是怎么到达nlogn的?
【解决方案2】:

这样可以吗?

ArrayList<Integer> a = new ArrayList<>(new HashSet<>(b));

请记住,您没有很好地解释您的问题或您的限制。

【讨论】:

猜你喜欢
  • 2020-08-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-07-27
  • 1970-01-01
相关资源
最近更新 更多