将LinkedHashSet转换为ArrayList或仅使用ArrayList

时间:2018-12-30 17:21:32

标签: java arraylist linkedhashset

考虑以下代码:

final Set<String> allPaths = new HashSet<String>();
for (final String path: paths) {
        allPaths.add(path);
}
final MyData d = new MyData(new ArrayList<String>(allPaths));

MyData是我不应该接触的课程。它应该以{{1​​}}作为参数。在这一天之前,我们之所以使用这种方式,是因为我们不在乎顺序,这就是为什么我们使用ArrayList(因此不会重复)的原因。但是现在,我想保留元素的顺序,因此在进行了一些研究之后,我发现可以使用数据结构Set来做到这一点。所以我做到了:

LinkedHashSet

问题是,我不确定如何将final LinkedHashSet<String> allPaths = new LinkedHashSet<String>(); for (final String path: paths) { allPaths .add(path); } final MyData d = new MyData(new ArrayList<String>(allPaths)); 转换为LinkedHashSet。另外,我想到了使用ArrayList而不是ArrayList,所以我不必转换它,但是我必须遍历数组(LinkedHashSet)。

我应该使用哪种良好,清洁和有效的方式?

4 个答案:

答案 0 :(得分:3)

只需在arrayList上使用public boolean addAll(Collection<? extends E> c)方法,它就可以接受任何Collection

您有LinkedHashSet

final LinkedHashSet<String> allPaths = new LinkedHashSet<String>();
for (final String path: paths) {
        allPaths .add(path);
}

然后执行(即使mylist不为空也可以使用):

List<String> myList = new ArrayList<>();
mylist.addAll(allPaths);

或更简单的方法:

List<String> myList = new ArrayList<>(allPaths);

答案 1 :(得分:2)

为什么不像这样将midnight = (int(time.time() // 86400)) * 86400 - 86400 转换为paths(假设LinkedHashSet是一个集合?

paths

如果final MyData d = new MyData(new ArrayList<>(new LinkedHashSet<>(paths))); 是一个数组,则可以在上面的转换中使用paths

答案 2 :(得分:0)

@TTaJTa4 you can use the code below as an example. Both ways are fine.



import java.util.ArrayList;
import java.util.LinkedHashSet;
import java.util.Set;

public class ConvertLinkedHashSetToArrayList
{

  public static void main(String[] args)
  {
    Set<String> testStrings = new LinkedHashSet<>();
    testStrings.add("String 1");
    testStrings.add("String 2");
    testStrings.add("String 3");
    testStrings.add("String 4");
    testStrings.add("String 5");

    System.out.println("** Printing LinkedHashSet: " + testStrings);
    ArrayList<String> linkedHashSetToArrayList1 = new ArrayList<>(testStrings);
    System.out.println("** Printing linkedHashSetToArrayList1:" + 
    linkedHashSetToArrayList1);

    ArrayList<String> linkedHashSetToArrayList2 = new ArrayList<>();
    linkedHashSetToArrayList2.addAll(testStrings);
    System.out.println("** Printing linkedHashSetToArrayList2:" + 
    linkedHashSetToArrayList2);
  }
}

结果如下:

** Printing LinkedHashSet: [String 1, String 2, String 3, String 4, String 5]
** Printing linkedHashSetToArrayList1:[String 1, String 2, String 3, String 4, String 5]
** Printing linkedHashSetToArrayList2:[String 1, String 2, String 3, String 4, String 5]

按照GitHub链接获取完整的Java项目: GitHub example

答案 3 :(得分:0)

如果paths是一个集合,则可以获取没有重复的数组列表:

ArrayList<String> p = paths.stream().distinct().collect(Collectors.toCollection(ArrayList::new));

如果paths是一个数组:

ArrayList<String> p = Stream.of(paths).distinct().collect(Collectors.toCollection(ArrayList::new));