我正在尝试制作一个独特的<整数> 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);
请帮忙!提前谢谢!
答案 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()
返回的密钥集。