Java程序 将ArrayList转换为LinkedList
给定一个ArrayList,你的任务是编写一个程序,将给定的ArrayList转换为Java中的LinkedList。
例子
输入: ArrayList: [Geeks, forGeeks, A computer Portal]
输出: LinkedList: [Geeks, forGeeks, A computer Portal]
输入: ArrayList: [1, 2, 3, 4, 5]
输出: LinkedList: [1, 2, 3, 4, 5]
ArrayList – ArrayList是集合框架的一部分,存在于 java.util 包中。它为我们提供了Java中的动态数组。尽管它可能比标准数组慢,但在需要对数组进行大量操作的程序中是有帮助的。
链接列表 – 链接列表是一种线性数据结构,其中的元素不存储在连续的内存位置。链接列表中的元素使用指针进行链接,如下图所示:

方法
在 Java 中,有许多方法可以将给定的ArrayList转换为链接列表。下面列出了其中的几种。
- 使用蛮力或天真方法
- 使用列表构造器
- 使用Java 8 Streams API
- 使用谷歌的Guava库
- 不兼容类型之间的转换
1.使用蛮力法或天真法
在这个方法中,创建一个空的LinkedList,然后将ArrayList中的所有元素一个一个地添加到其中。
算法:
- 获取要转换的ArrayList。
- 创建一个空的LinkedList。
- 遍历ArrayList中的项目。
- 对于每个项目,将其添加到LinkedList中。
- 返回形成的LinkedList。
代码
// Java Program to convert
// ArrayList to LinkedList
// using Naive method
import java.util.*;
import java.util.stream.*;
class GFG {
// Generic function to convert an ArrayList to LinkedList
public static <T> List<T> convertALtoLL(List<T> aL)
{
// Create an empty LinkedList
List<T> lL = new LinkedList<>();
// Iterate through the aL
for (T t : aL) {
// Add each element into the lL
lL.add(t);
}
// Return the converted LinkedList
return lL;
}
public static void main(String args[])
{
// Create an ArrayList
List<String> aL = Arrays.asList("Geeks",
"forGeeks",
"A computer Portal");
// Print the ArrayList
System.out.println("ArrayList: " + aL);
// convert the ArrayList to LinkedList
List<String>
lL = convertALtoLL(aL);
// Print the LinkedList
System.out.println("LinkedList: " + lL);
}
}
输出
ArrayList: [Geeks, forGeeks, A computer Portal]
LinkedList: [Geeks, forGeeks, A computer Portal]
2.使用列表构造函数
在这个方法中,ArrayList被作为参数传递给LinkedList构造函数。
算法:
- 获取要转换的ArrayList。
- 通过将ArrayList作为参数传递给LinkedList的构造函数来创建LinkedList。
- 返回形成的LinkedList。
代码
// Java Program to convert
// ArrayList to LinkedList
// using List Constructor
import java.util.*;
import java.util.stream.*;
class GFG {
// Generic function to convert an ArrayList to LinkedList
public static <T> List<T> convertALtoLL(List<T> aL)
{
// Create the LinkedList by passing the ArrayList
// as parameter in the constructor
List<T> lL = new LinkedList<>(aL);
// Return the converted LinkedList
return lL;
}
public static void main(String args[])
{
// Create an ArrayList
List<String> aL = Arrays.asList("Geeks",
"forGeeks",
"A computer Portal");
// Print the ArrayList
System.out.println("ArrayList: " + aL);
// convert the ArrayList to LinkedList
List<String>
lL = convertALtoLL(aL);
// Print the LinkedList
System.out.println("LinkedList: " + lL);
}
}
输出
ArrayList: [Geeks, forGeeks, A computer Portal]
LinkedList: [Geeks, forGeeks, A computer Portal]
3.使用Java 8 Stream API
该方法包括将ArrayList转换为Stream,并使用Stream.collect()方法收集LinkedList中的元素,该方法接受一个收集器。
算法:
- 获取要转换的ArrayList。
- 将ArrayList转换为流。
- 使用收集器,收集ArrayList流并将其转换为LinkedList。
- 现在收集LinkedList。
- 返回形成的LinkedList。
代码
// Java Program to convert
// ArrayList to LinkedList
// using Streams API
import java.util.*;
import java.util.stream.*;
class GFG {
// Generic function to convert an
// ArrayList to LinkedList
public static <T> List<T> convertALtoLL(
List<T> aL)
{
// Return the converted LinkedList
return aL
// Convert the ArrayList into Stream
.stream()
// Collect the LinkedList
.collect(Collectors
// Convert the Stream into LinkedList
// Collection type
.toCollection(LinkedList::new));
}
public static void main(String args[])
{
// Create an ArrayList
List<String> aL = Arrays.asList("Geeks",
"forGeeks",
"A computer Portal");
// Print the ArrayList
System.out.println("ArrayList: " + aL);
// convert the ArrayList to LinkedList
List<String> lL = convertALtoLL(aL);
// Print the LinkedList
System.out.println("LinkedList: " + lL);
}
}
输出
ArrayList: [Geeks, forGeeks, A computer Portal]
LinkedList: [Geeks, forGeeks, A computer Portal]
4.使用谷歌的Guava库
Guava也提供了一个LinkedList的实现,可以使用Collection.addAll()方法从另一个集合创建一个LinkedList。
算法:
- 获取要转换的ArrayList。
- 创建一个空的LinkedList。
- 使用LinkedList.addAll()方法将ArrayList中的元素添加到LinkedList中,并将ArrayList作为参数。
- 返回形成的LinkedList。
代码
// Java Program to convert
// ArrayList to LinkedList
// using Google's Guave library
import java.util.*;
import java.util.stream.*;
class GFG {
// Generic function to convert an ArrayList
// to LinkedList
public static <T> List<T> convertALtoLL(List<T> aL)
{
// Create an empty LinkedList
List<T> lL = new LinkedList<>();
// Add ArrayList into the lL
lL.addAll(aL);
// Return the converted LinkedList
return lL;
}
public static void main(String args[])
{
// Create an ArrayList
List<String> aL = Arrays.asList("Geeks",
"forGeeks",
"A computer Portal");
// Print the ArrayList
System.out.println("ArrayList: " + aL);
// convert the ArrayList to LinkedList
List<String>
lL = convertALtoLL(aL);
// Print the LinkedList
System.out.println("LinkedList: " + lL);
}
}
输出
ArrayList: [Geeks, forGeeks, A computer Portal]
LinkedList: [Geeks, forGeeks, A computer Portal]
5.不兼容类型之间的转换
如果需要的TreeMap与HashMap的类型不同,可以使用该方法。在这种情况下,转换需要手动完成。
算法:
- 获取要转换的ArrayList。
- 将ArrayList转换为流。
- 通过转换将流元素转换为所需类型。这可以通过将铸造函数作为参数传递给map()函数来完成。
- 使用收集器,收集ArrayList流并将其转换为LinkedList。
- 现在收集LinkedList。
- 返回形成的LinkedList。
代码
// Java Program to convert
// ArrayList to LinkedList for
// Conversion between incompatible types
import java.util.*;
import java.util.stream.*;
class GFG {
// Generic function to convert an ArrayList to LinkedList
public static <T> List<String> convertALtoLL(List<T> aL)
{
// Return the converted LinkedList
return aL
// Convert the ArrayList into Stream
.stream()
// Convert the Stream into String
// Desired casting function can be passed
// as parameter in next step
.map(String::valueOf)
// Collect the LinkedList
.collect(Collectors
// Convert the Stream into LinkedList
// Collection type
.toCollection(LinkedList::new));
}
public static void main(String args[])
{
// Create an ArrayList
List<Integer> aL = Arrays.asList(1, 2, 3, 4, 5);
// Print the ArrayList
System.out.println("ArrayList: " + aL);
// convert the ArrayList to LinkedList
List<String> lL = convertALtoLL(aL);
// Print the LinkedList
System.out.println("LinkedList: " + lL);
}
}
输出
ArrayList: [1, 2, 3, 4, 5]
LinkedList: [1, 2, 3, 4, 5]
极客教程