【发布时间】: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...所以环顾四周,您会找到适合您的。