如何在没有克隆

时间:2015-10-31 22:41:40

标签: java arrays list hashset

我正在尝试制作一个独特的<整数> ListArrayA来自另一个<整数> ListArrayB,它具有重复的元素。 ListArrayA和ListArrayB分别定义。列表B已经填充了数据,并且其中包含大约10000个整数。

我创建了一个名为unique()的函数,并使用了以下逻辑。在运行此逻辑时,程序永无止境。我不知道它是非常简单和小逻辑还是不行。静态声明是一个问题吗?

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

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

我也听说过HashSet。但我不想克隆列表B的副本,我不想放弃列表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);

请帮忙!提前谢谢!

2 个答案:

答案 0 :(得分:2)

这会吗?

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

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

答案 1 :(得分:2)

您可以通过单击列表并在HashMap中添加存在的元素,在O(n)时间内找到列表中的唯一元素。它可以是HashMap<Integer,Integer>,第二个值是值发生的次数,如果你愿意的话。

一旦你构建了HashMap,你就可以进行查询以询问问题&#34;这个元素是否存在&#34;通过HashMap.get(Integer value),如果答案是&#34;否则将返回null。&#34;

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