创建一个独特值的Arraylist

ale*_*rob 33 java arraylist

在Java中,我有一个带有这些值的arraylist(很多行,这只是一个提取)

20/03/2013 23:31:46 6870 6810 6800 6720 6860 6670 6700 6650 6750 6830 34864 34272 20/03/2013 23:31:46 6910 6780 6800 6720 6860 6680 6620 6690 6760 6790 35072 34496

前两个值是包含数据并存储在单个元素中的字符串.

我想要做的是比较字符串数据元素和删除例如第二个和引用该行的所有元素.

现在,我使用了一个for循环,每13个元素比较字符串(为了只比较数据字符串)

我的问题:我能实施其他更好的解决方案吗?

这是我的代码:

20/03/2013 23:31:46 6870    6810    6800    6720    6860    6670    6700    6650    6750    6830    34864   34272
20/03/2013 23:31:46 6910    6780    6800    6720    6860    6680    6620    6690    6760    6790    35072   34496
Run Code Online (Sandbox Code Playgroud)

Anu*_*lla 59

.contains()在添加新元素之前,尝试使用ArrayList上的方法检查重复项.

它看起来像这样

   if(!list.contains(data))
       list.add(data);
Run Code Online (Sandbox Code Playgroud)

这应该可以防止列表中的重复,以及不像人们似乎寻找的那样搞乱元素的顺序.

  • 这将有效,但不要忘记使其同步,否则你要求麻烦 (6认同)
  • 正如@ Amt87提到的性能会受到影响的大型数据.常规ArrayList中的成员资格测试是O(n),而不是O(log n).因此,当您填充列表时,您正在查看O(n ^ 2). (3认同)
  • 如果数据量大,这会影响性能吗?我认为会的。 (2认同)

Dmi*_*kin 39

创建一个独特值的Arraylist

你可以使用Set.toArray()方法.

不包含重复元素的集合.更正式地说,集合不包含元素对e1和e2,使得e1.equals(e2)和至多一个null元素.正如其名称所暗示的,该界面模拟数学集抽象.

http://docs.oracle.com/javase/6/docs/api/java/util/Set.html

  • `Set.toArray()`不保持元素顺序.有没有办法保持秩序? (7认同)
  • @italo你可以使用LinkedHashSet:http://docs.oracle.com/javase/8/docs/api/java/util/LinkedHashSet.html它将保留插入顺序.取决于您希望为重复项维护的顺序. (5认同)
  • ArrayList保持元素顺序,Set不保持.唯一值的ArrayList与将Set转换为ArrayList的方法不同.我来到这个问题寻找一个唯一值的ArrayList,我还没有找到它. (3认同)

Amo*_*shi 15

HashSet hs = new HashSet();
                hs.addAll(arrayList);
                arrayList.clear();
                arrayList.addAll(hs);
Run Code Online (Sandbox Code Playgroud)


MC *_*ror 13

聚会很晚了,但这是我的两分钱:

用一个 LinkedHashSet

我假设您需要的是一个集合:

  • 不允许您插入重复项;
  • 保留插入顺序。

LinkedHashSet做这个。过度使用的优点ArrayList是,LinkedHashSet具有的复杂性O(1)contains操作,而不是ArrayList,其具有O(N)


当然,您需要正确实现您的对象equalshashCode方法。

  • 非常被低估的答案! (2认同)

小智 8

如果您想创建一个包含现有列表中唯一值的列表,您可以使用

List myUniqueList = myList.stream().distinct().collect(Collectors.toList());
Run Code Online (Sandbox Code Playgroud)


Sad*_*man 6

 //Saving each element of the input file in an arraylist 
    ArrayList<String> list = new ArrayList<String>();
    while (s.hasNext()){
        list.add(s.next());
    }

//That's all you need
list = (ArrayList) list.stream().distinct().collect(Collectors.toList());
Run Code Online (Sandbox Code Playgroud)


归档时间:

查看次数:

153370 次

最近记录:

6 年 前