Java 多维集合
在Java中,我们有一个集合框架,提供了存储一组对象的功能。这就是所谓的单维ArrayList,我们在一行中只能有一个元素。但如果我们想做一个多维ArrayList,对于这个功能,我们在Java中确实有 多维集合(或嵌套集合) 。
多维集合(或嵌套集合)是一个对象组的集合,每个组可以动态地拥有任意数量的对象。因此,在这里我们可以随时在一个组中存储任何数量的元素。
示例
**Single dimensional ArrayList :**
[121, 432, 12, 56, 456, 3, 1023]
[Apple, Orange, Pear, Mango]
语法
ArrayList <Object> x = new ArrayList <Object>();
对多维集合的需求
与数组不同,在多维集合中我们不受任何行的大小限制。因此,如果我们想使用一个多维结构,可以在一行中动态地创建任何数量的对象,那么我们应该在java中使用多维集合。
语法 :多维集合
ArrayList<ArrayList<Object>> a = new ArrayList<ArrayList<Object>>();
示例
Multidimensional ArrayList: [[3, 4], [12, 13, 14, 15], [22, 23, 24], [33]]
让我们快速浏览一下多维ArrayList的add()方法,如下所示。
- **boolean add( ArrayList
- **void add( int index, ArrayList
例子 1 :
// Java Program to Illustrate Multidimensional ArrayList
// Importing required classes
import java.util.*;
// Main class
// MultidimensionalArrayList
class GFG {
// Method 1
// To create and return 2D ArrayList
static List create2DArrayList()
{
// Creating a 2D ArrayList of Integer type
ArrayList<ArrayList<Integer> > x
= new ArrayList<ArrayList<Integer> >();
// One space allocated for R0
x.add(new ArrayList<Integer>());
// Adding 3 to R0 created above x(R0, C0)
x.get(0).add(0, 3);
// Creating R1 and adding values
// Note: Another way for adding values in 2D
// collections
x.add(
new ArrayList<Integer>(Arrays.asList(3, 4, 6)));
// Adding 366 to x(R1, C0)
x.get(1).add(0, 366);
// Adding 576 to x(R1, C4)
x.get(1).add(4, 576);
// Now, adding values to R2
x.add(2, new ArrayList<>(Arrays.asList(3, 84)));
// Adding values to R3
x.add(new ArrayList<Integer>(
Arrays.asList(83, 6684, 776)));
// Adding values to R4
x.add(new ArrayList<>(Arrays.asList(8)));
// Appending values to R4
x.get(4).addAll(Arrays.asList(9, 10, 11));
// Appending values to R1, but start appending from
// C3
x.get(1).addAll(3, Arrays.asList(22, 1000));
// This method will return 2D array
return x;
}
// Method 2
// Main driver method
public static void main(String args[])
{
// Display message prior for better readability
System.out.println("2D ArrayList :");
// Printing 2D ArrayList by calling Method 1
System.out.println(create2DArrayList());
}
}
输出
2D ArrayList :
[[3], [366, 3, 4, 22, 1000, 6, 576], [3, 84], [83, 6684, 776], [8, 9, 10, 11]]
现在让我们看看多维LinkedHashSet的同样的实现,为了显示它的行为方式的不同。同样地,我们也可以将任何其他的集合实现为多维集合,如下图所示。
语法
HashSet< HashSet<Object> > a = new HashSet< HashSet<Object> >();
注意: LinkedHashSet类包含唯一的元素,并保持插入顺序。因此,在多维LinkedHashSet中,唯一性也将在行中得到维护。
例2 :
// Java Program to Illustrate Multidimensional LinkedHashSet
// Importing required classes
import java.util.*;
// Main class
// Multidimensional LinkedHashSet
class GFG {
// Method 1
// To create and return 2D LinkedHashSet
static Set create2DLinkedHashSet()
{
// Creating an empty 2D LinkedHashSet
LinkedHashSet<LinkedHashSet<String> > x
= new LinkedHashSet<LinkedHashSet<String> >();
// Creating R0
x.add(new LinkedHashSet<String>(
Arrays.asList("Apple", "Orange")));
// Creating R1, here "Coffee" will be considered as
// only one object to maintain uniqueness
x.add(new LinkedHashSet<String>(Arrays.asList(
"Tea", "Coffee", "Milk", "Coffee", "Water")));
// Creating R2
x.add(new LinkedHashSet<String>(
Arrays.asList("Tomato", "Potato", "Onion")));
// Creating R3 but it will not be added as it
// contains the same items as R2
// Note: LinkedHashSet inserts only unique items
x.add(new LinkedHashSet<String>(
Arrays.asList("Tomato", "Potato", "Onion")));
// Returning multidimensional LinkedHashSet
return x;
}
// Method 2
// Main driver method
public static void main(String[] args)
{
// Display message for better readability
System.out.println("2D LinkedHashSet :");
// Printing 2D LinkedHashSet by
// calling method 1
System.out.println(create2DLinkedHashSet());
}
}
输出
2D LinkedHashSet :
[[Apple, Orange], [Tea, Coffee, Milk, Water], [Tomato, Potato, Onion]]