ArrayList 是一种数据结构,它克服了 Java 中常见数组的大小必须事先明确指定的缺点。数组数据结构的长度不能修改,这是由 ArrayList 数据结构处理的。这种数据结构也称为动态数组,可以根据需要增长或修改。它是Collections框架下的一个类,可以通过导入java.util包来包含在java程序中。
LinkedHashSet 是 Java 中传统 HashSet 类的增强版本,它提供了 HashSet 中缺少的附加排序函数。它维护元素插入其中的顺序,这与 HashSet 的顺序是不可预测的不同。它是使用 doubly-linked 列表实现的,并且可以使用迭代器进行迭代。
本文使用 4 种不同的方法处理将 ArrayList 转换为 LinkedHashSet,如下所示:
- 在 LinkedHashSet 构造函数初始化期间将 ArrayList 作为参数传递。
- 使用 LinkedHashSet 类的 addAll() 方法。
- 在遍历 ArrayList 的所有元素时使用 LinkedHashSet 类的 add() 方法。
- 使用流首先将 ArrayList 转换为 Set,然后再转换为 LinkedHashSet。
方法一
使用这种方法,我们只需在初始化 LinkedHashSet 类时将 ArrayList 作为参数传递
用法
LinkedHashSet(Collection C):用于用集合 C 的元素初始化 HashSet。
LinkedHashSet<E> hs = new LinkedHashSet<E>(Collection c);
示例
Java
// java program to convert ArrayList
// to LinkedHashSet
// importing the utils package
import java.util.*;
class GFG {
// defining the method
void arrayListToLinkedHashSet()
{
// initializing the ArrayList
ArrayList<String> arrayList = new ArrayList<>();
// adding values in the ArrayList
arrayList.add("Geeks");
arrayList.add("For");
arrayList.add("Geeks");
// printing the list
System.out.println("The array list:" + arrayList);
// initializing the LinkedHashSet class
// passing the ArrayList as parameter
LinkedHashSet<String> linkedHashSet
= new LinkedHashSet<String>(arrayList);
// printing the LinkedHashSet
System.out.println("The converted "
+ "Linked Hash Set:"
+ linkedHashSet);
}
// Driver Code
public static void main(String[] args)
{
// instantiating the class
GFG ob = new GFG();
// calling the method
ob.arrayListToLinkedHashSet();
}
}
The array list:[Geeks, For, Geeks] The converted Linked Hash Set:[Geeks, For]
说明:
ArrayList 包含三个条目,它们是 [Geeks, For, Geeks]。这被转换为一个有序集,并且只包含两个值:Geeks 和 For。由于 Set 不允许多个相似的值。
方法二
使用这种方法,我们在初始化之后使用 LinkedHashSet 类的预定义方法 addAll() 来填充 LinkedHashSet。
用法:
LinkedHashSet.addAll(Collection C)
参数:参数 C 是要添加到集合中的任何类型的集合。
返回值:如果成功地将集合 C 的元素附加到此 Set,则该方法返回 true,否则返回 False。
示例
Java
// java program to convert ArrayList
// to LinkedHashSet
// importing the java.utils package
import java.util.*;
class GFG {
// defining the method
void arrayListToLinkedHashSet()
{
// initializing the ArrayList
ArrayList<String> arrayList = new ArrayList<>();
// filling the ArrayList with values
arrayList.add("Geeks");
arrayList.add("For");
arrayList.add("Geeks");
// printing the list
System.out.println("The Array List:" + arrayList);
// initializing the LinkedHashSet
LinkedHashSet<String> linkedHashSet
= new LinkedHashSet<>();
// using the addAll() to
// fill the HashSet
linkedHashSet.addAll(arrayList);
// printing the LinkedHashSet
System.out.println("The Linked "
+ "Hash Set:" + linkedHashSet);
}
// Driver Code
public static void main(String[] args)
{
// instantiating the class
GFG ob = new GFG();
// calling the method
ob.arrayListToLinkedHashSet();
}
}
The Array List:[Geeks, For, Geeks] The Linked Hash Set:[Geeks, For]
方法 3
使用这种方法,我们迭代 ArrayList 并在每次迭代中使用 LinkedHashSet 类的预定义 add() 方法用值填充 LinkedHashSet。
用法:
Hash_Set.add(Object element)
参数:参数element 是 LinkedHashSet 类型,指的是要添加到 Set 中的元素。
返回值:如果元素不存在于 LinkedHashSet 中,则该函数返回 True,否则如果元素已存在于 LinkedHashSet 中,则返回 False。
示例
Java
// java program to convert ArrayList
// to LinkedHashSet
// importing the java.utils package
import java.util.*;
class GFG {
// defining the method
void arrayListToHashSet()
{
// initializing the ArrayList
ArrayList<String> arrayList = new ArrayList<>();
// filling the ArrayList with values
arrayList.add("Geeks");
arrayList.add("For");
arrayList.add("Geeks");
// printing the list
System.out.println("The Array List:" + arrayList);
// declaring the iterator
Iterator<String> itr = arrayList.iterator();
// initializing the LinkedHashSet
LinkedHashSet<String> linkedHashSet
= new LinkedHashSet<>();
// loop to iterate through the ArrayList
while (itr.hasNext())
// using the add()
// to fill the HashSet
linkedHashSet.add(itr.next());
// printing the LinkedHashSet
System.out.println("The Linked Hash Set:"
+ linkedHashSet);
}
// Driver Code
public static void main(String[] args)
{
// instantiating the class
GFG ob = new GFG();
// calling the method
ob.arrayListToHashSet();
}
}
The Array List:[Geeks, For, Geeks] The Linked Hash Set:[Geeks, For]
方法 4
在这种方法下,我们首先将 ArrayList 转换为流,然后再转换为 Set。这个 Set 最终被转换为 LinkedHashSet。 Stream 类仅适用于 JDK 8 或更高版本。
示例
Java
// java program to convert ArrayList
// to LinkedHashSet
import java.util.*;
import java.util.stream.*;
class GFG {
// defining the method
void arrayListToLinkedHashSet()
{
// initializing the ArrayList
ArrayList<String> arrayList = new ArrayList<>();
// filling the ArrayList with values
arrayList.add("Geeks");
arrayList.add("For");
arrayList.add("Geeks");
// printing the list
System.out.println("The Array List:" + arrayList);
// creating a stream from the ArrayList
Stream<String> stream = arrayList.stream();
// creating a set from the Stream
// using the predefined toSet()
// method of the Collectors class
Set<String> set
= stream.collect(Collectors.toSet());
// converting the Set to
// LinkedHashSet
LinkedHashSet<String> linkedHashSet
= new LinkedHashSet<>(set);
// printing the LinkedHashSet
System.out.println("The Linked Hash Set:"
+ linkedHashSet);
}
// Driver Code
public static void main(String[] args)
{
// instantiating the class
GFG ob = new GFG();
// calling the method
ob.arrayListToLinkedHashSet();
}
}
The Array List:[Geeks, For, Geeks] The Linked Hash Set:[Geeks, For]
将自定义类对象的 ArrayList 转换为 LinkedHashSet
以上示例说明了转换 Integer、String 等原始数据类型的 ArrayList 的过程。在这里,我们将使用上述方法将自定义类对象的 ArrayList 转换为 LinkedHashSet。转换的一个有趣特征是,这允许复制上述场景中不允许的对象。相同的原因是每次创建同一类的新对象时,在比较对象时用于在将元素输入集合之前检查元素的 equals() 方法会找到唯一引用,因为每个新对象都有一个新引用.这允许相同的数据出现在 LinkedHashSet 中的多个位置。
示例
Java
// java code to convert an ArrayList
// of custom class objects to
// LinkedHashSet
// importing the libraries
import java.util.*;
// the custom class
class Sports {
// global variable name of type String
// to hold the name of the sport
private String name;
// constructor
public Sports(String name)
{
// initializing the name
this.name = name;
}
// method to return the string
public String returnString()
{
return name + " is a great sport";
}
}
// primary class
class GFG {
// declaring the method
static void arrayListToLinkedHashSet()
{
// creating an array list of type
// class Sports
ArrayList<Sports> listOfSports
= new ArrayList<Sports>();
// adding the new instances of Sports
// in the array list
listOfSports.add(new Sports("Football"));
listOfSports.add(new Sports("Basketball"));
listOfSports.add(new Sports("Football"));
// printing the list
System.out.println("The Array List:"
+ listOfSports);
// declaring an iterator of type Sports
// to iterate over the list
Iterator<Sports> itr = listOfSports.iterator();
// iterating over the list
while (itr.hasNext())
// printing the contents
// by calling the returnString()
System.out.println(itr.next().returnString());
// initializing the linkedhashset
// of type Sports
LinkedHashSet<Sports> linkedHashSet
= new LinkedHashSet<Sports>(listOfSports);
// printing the contents of the
// linked hash set
System.out.println("The Linked Hash Set:"
+ linkedHashSet);
// declaring an iterator to iterate
// over linkedhashset
Iterator<Sports> itr1 = linkedHashSet.iterator();
// iterating over the linkedhashset
while (itr1.hasNext()) {
// calling the returnString()
// of Sports
System.out.println(itr1.next().returnString());
}
}
// Driver Code
public static void main(String[] args)
{
// calling the method
arrayListToLinkedHashSet();
}
}
The Array List:[Sports@4e50df2e, Sports@1d81eb93, Sports@7291c18f] Football is a great sport Basketball is a great sport Football is a great sport The Linked Hash Set:[Sports@4e50df2e, Sports@1d81eb93, Sports@7291c18f] Football is a great sport Basketball is a great sport Football is a great sport
说明:
在第一行,打印了 ArrayList 的内容,可以看出是对 Sports 类的引用。在下面的三行中,打印了 Sports 类的 returnString() 方法的内容。应该注意的是,所有引用都是唯一的,因此即使内容可能相同,LinkedHashSet 也允许它们。在下一行中,打印出 LinkedHashSet 的内容,这些内容再次引用了 Sports 类。后面的行是 returnString() 方法调用。
相关用法
- Java Array转LinkedHashSet用法及代码示例
- Java LinkedHashSet clear()用法及代码示例
- Java LinkedHashSet removeAll()用法及代码示例
- Java LinkedHashSet toArray(T[])用法及代码示例
- Java LinkedHashSet toArray()用法及代码示例
- Java LinkedHashSet equals()用法及代码示例
- Java LinkedHashSet retainAll()用法及代码示例
- Java LinkedHashSet toString()用法及代码示例
- Java LinkedHashSet containsAll()用法及代码示例
- Java LinkedHashSet hashCode()用法及代码示例
- Java LinkedHashSet add()用法及代码示例
- Java LinkedHashSet contains()用法及代码示例
- Java LinkedHashSet remove()用法及代码示例
- Java LinkedHashSet size()用法及代码示例
- Java LinkedHashSet isEmpty()用法及代码示例
注:本文由纯净天空筛选整理自ag01harshit大神的英文原创作品 How to Convert ArrayList to LinkedHashSet in Java?。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。