HashMap 是 Java 1.2 以来 Java 集合的一部分。它提供了Java Map 接口的基本实现。它将数据存储在(键,值)对中。与 Hashmap 不同,ArrayList 用于为我们提供 Java 中的动态数组。它是在存储方面提供更多灵活性的阵列的替代方案。在本文中,我们将了解如何将 Hashmap 转换为 ArrayList。由于 hashmap 中的每个元素都包含一个键/值对,因此不可能将此键/值对存储在单个 ArrayList 中。因此,为了将 hashmap 转换为 ArrayList,我们需要维护两个独立的 ArrayList,其中一个 ArrayList 用于存储 Key,另一个用于存储与这些键对应的值。以下是用于将 hashmap 转换为 ArrayList 的各种方法。
方法一:
一种转换方法是使用 ArrayList 的构造函数。为此,我们可以使用 HashMap 中的 keySet() 方法。此方法返回包含 hashmap 的所有键的集合。该集合可以在初始化时传递到 ArrayList 中,以获得包含所有键的 ArrayList。获取keys后,我们可以使用hashmap中存在的values()方法来获取hashmap中存在的所有值的集合。我们可以使用这个集合来初始化另一个数组,该数组包含哈希图中键的所有值。
Java
// Java program to convert a HashMap
// to an ArrayList
import java.util.*;
public class GFG {
public static void main(String[] args)
{
// Create an empty hash map
HashMap<String, Integer> map
= new HashMap<>();
// Add elements to the map
map.put("vishal", 10);
map.put("sachin", 30);
map.put("vaibhav", 20);
// Finding the Set of keys from
// the HashMap
Set<String> keySet = map.keySet();
// Creating an ArrayList of keys
// by passing the keySet
ArrayList<String> listOfKeys
= new ArrayList<String>(keySet);
// Getting Collection of values from HashMap
Collection<Integer> values = map.values();
// Creating an ArrayList of values
ArrayList<Integer> listOfValues
= new ArrayList<>(values);
System.out.println("The Keys of the Map are "
+ listOfKeys);
System.out.println("The Values of the Map are "
+ listOfValues);
}
}
输出:
The Keys of the Map are [vaibhav, vishal, sachin] The Values of the Map are [20, 10, 30]
注意:在上面的示例中,可以清楚地观察到键和值之间的相关性是由 ArrayList 的索引保留的。这意味着可以在值列表中的相同索引处找到特定键的值。
方法二:
将 HashMap 转换为 ArrayList 的另一种方法是使用 Stream API 将映射键和值转换为相应的列表。
Java
// Java program to convert a HashMap
// to an ArrayList
import java.util.*;
import java.util.stream.*;
public class GFG {
public static void main(String[] args)
{
// Create an empty hash map
HashMap<String, Integer> map
= new HashMap<>();
// Add elements to the map
map.put("vishal", 10);
map.put("sachin", 30);
map.put("vaibhav", 20);
// Java 8 code to convert map keys to list
// Here, the collect() method collects the
// stream of keys in a ArrayList.
ArrayList<String> listOfKeys
= map.keySet().stream().collect(
Collectors.toCollection(ArrayList::new));
// Java 8 code to convert map values to list
ArrayList<Integer> listOfValues
= map.values().stream().collect(
Collectors.toCollection(ArrayList::new));
System.out.println("The Keys of the Map are "
+ listOfKeys);
System.out.println("The Values of the Map are "
+ listOfValues);
}
}
输出:
The Keys of the Map are [vaibhav, vishal, sachin] The Values of the Map are [20, 10, 30]
注意:Collectors.toCollection(ArrayList::new) 传递给 collect() 方法以收集为新的 ArrayList。我们也可以使用 toList() 代替这个函数将其转换为 List,然后再转换为任何其他 List 实现。
方法三:
在上述两种方法中,HashMap 都被转换为 ArrayList,而不保留直接的键/值关系。键和值存储在两个不同的 ArrayList 中。但是,我们可以使用 entrySet() 方法在 ArrayList 中保留键/值对。此方法用于创建包含在哈希映射中的相同元素的集合。它本质上返回哈希映射的集合视图,或者我们可以创建一个新集合并将映射元素存储到其中。我们可以使用构造函数将此 Set 传递到 ArrayList 中,以形成一个以 Entry 对象作为键/值对的 ArrayList。
例:
Java
// Java program to convert a HashMap
// to an ArrayList
import java.util.*;
import java.util.stream.*;
import java.util.Map.*;
public class GFG {
public static void main(String[] args)
{
// Create an empty hash map
HashMap<String, Integer> map
= new HashMap<>();
// Add elements to the map
map.put("vishal", 10);
map.put("sachin", 30);
map.put("vaibhav", 20);
// Set of the entries from the
// HashMap
Set<Map.Entry<String, Integer> > entrySet
= map.entrySet();
// Creating an ArrayList of Entry objects
ArrayList<Map.Entry<String, Integer> > listOfEntry
= new ArrayList<Entry<String, Integer> >(entrySet);
System.out.println(listOfEntry);
}
}
输出:
[vaibhav=20, vishal=10, sachin=30]
相关用法
- Java ArrayList转HashMap用法及代码示例
- Java HashMap转LinkedList用法及代码示例
- Java ArrayList转LinkedList用法及代码示例
- Java ArrayList转LinkedHashMap用法及代码示例
- Java Vector转ArrayList用法及代码示例
- Java ArrayList转Vector用法及代码示例
- Java ArrayList转LinkedHashSet用法及代码示例
- Java TreeMap转ArrayList用法及代码示例
- Java String转ArrayList用法及代码示例
- Java ArrayList转HashSet用法及代码示例
注:本文由纯净天空筛选整理自KaashyapMSK大神的英文原创作品 How to Convert HashMap to ArrayList in Java?。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。