Introduction
The Arrays.copyOf() method in Java is a utility method that creates a new array by copying an existing array, either truncating or padding it to a specified length. This method is part of the java.util package and provides a convenient way to handle array resizing. The method is overloaded to support various data types and custom array types.
Key Points:
- Truncation or Padding: The method truncates the original array if the new length is shorter or pads it with default values if the new length is longer.
- Overloaded Methods: Supports different data types, including
boolean,byte,char,double,float,int,long,short, and generic object arrays. - Default Values: Pads the array with default values specific to each data type.
Syntax
The Arrays.copyOf() method has several overloaded versions. Here are some of the common signatures:
boolean[] copiedArray = Arrays.copyOf(original, newLength);
byte[] copiedArray = Arrays.copyOf(original, newLength);
char[] copiedArray = Arrays.copyOf(original, newLength);
double[] copiedArray = Arrays.copyOf(original, newLength);
float[] copiedArray = Arrays.copyOf(original, newLength);
int[] copiedArray = Arrays.copyOf(original, newLength);
long[] copiedArray = Arrays.copyOf(original, newLength);
short[] copiedArray = Arrays.copyOf(original, newLength);
T[] copiedArray = Arrays.copyOf(original, newLength);
T[] copiedArray = Arrays.copyOf(original, newLength, Class<? extends T[]> newType);
- original: The original array to copy.
- newLength: The length of the new array.
- newType: The type of the new array (for the generic method).
Example: Using Arrays.copyOf()
Let’s explore how to use the Arrays.copyOf() method with various examples.
Example 1: Copying an Array of Booleans
import java.util.Arrays;
public class CopyOfExample {
public static void main(String[] args) {
// Original boolean array
boolean[] original = {true, false, true};
// Copy the array with a new length
boolean[] copied = Arrays.copyOf(original, 5);
// Print the copied array
System.out.println("Copied boolean array: " + Arrays.toString(copied));
}
}
Output:
Copied boolean array: [true, false, true, false, false]
Explanation:
- Padding with Default Values: The new array is padded with
false(default value for boolean) to reach the specified length.
Example 2: Copying an Array of Integers
import java.util.Arrays;
public class CopyOfIntegers {
public static void main(String[] args) {
// Original integer array
int[] original = {1, 2, 3, 4};
// Copy the array with a shorter length
int[] copied = Arrays.copyOf(original, 2);
// Print the copied array
System.out.println("Copied integer array: " + Arrays.toString(copied));
}
}
Output:
Copied integer array: [1, 2]
Explanation:
- Truncation: The new array is truncated to the specified length.
Example 3: Copying an Array of Characters
import java.util.Arrays;
public class CopyOfCharacters {
public static void main(String[] args) {
// Original char array
char[] original = {'A', 'B', 'C'};
// Copy the array with a longer length
char[] copied = Arrays.copyOf(original, 5);
// Print the copied array
System.out.println("Copied char array: " + Arrays.toString(copied));
}
}
Output:
Copied char array: [A, B, C, �, �]
Explanation:
- Padding with Default Values: The new array is padded with null characters (
\u0000, default value for char) to reach the specified length.
Example 4: Copying an Array of Objects
import java.util.Arrays;
public class CopyOfObjects {
public static void main(String[] args) {
// Original array of strings
String[] original = {"Apple", "Banana", "Cherry"};
// Copy the array with a longer length
String[] copied = Arrays.copyOf(original, 5);
// Print the copied array
System.out.println("Copied object array: " + Arrays.toString(copied));
}
}
Output:
Copied object array: [Apple, Banana, Cherry, null, null]
Explanation:
- Padding with Default Values: The new array is padded with
null(default value for objects) to reach the specified length.
Example 5: Copying and Changing Array Type
import java.util.Arrays;
public class CopyOfWithType {
public static void main(String[] args) {
// Original array of strings
String[] original = {"Apple", "Banana", "Cherry"};
// Copy the array with a longer length and specify the type
Object[] copied = Arrays.copyOf(original, 5, Object[].class);
// Print the copied array
System.out.println("Copied array with type: " + Arrays.toString(copied));
}
}
Output:
Copied array with type: [Apple, Banana, Cherry, null, null]
Explanation:
- Changing Type: The method copies the original array and allows specifying the type of the new array.
Real-World Use Case
In real-world applications, Arrays.copyOf() can be used for dynamically resizing arrays, handling buffer overflow situations, or preparing data for batch processing.
Example: Resizing a Buffer
Consider a scenario where you need to dynamically resize a buffer when it exceeds its capacity.
import java.util.Arrays;
public class BufferResize {
public static void main(String[] args) {
// Initial buffer with a capacity of 3
int[] buffer = {10, 20, 30};
int currentIndex = 3; // Buffer is full
// Resize the buffer when full
buffer = Arrays.copyOf(buffer, buffer.length * 2);
// Add more data to the resized buffer
buffer[currentIndex++] = 40;
buffer[currentIndex++] = 50;
// Print the resized buffer
System.out.println("Resized buffer: " + Arrays.toString(buffer));
}
}
Output:
Resized buffer: [10, 20, 30, 40, 50, 0]
Explanation:
- Dynamic Resizing: The buffer is resized dynamically to handle additional data, ensuring efficient storage management.
Conclusion
The Arrays.copyOf() method in Java provides a versatile and convenient way to copy and resize arrays. With its overloaded methods and support for various data types, it is useful for a wide range of applications.
Summary:
- Truncation or Padding: Adjusts the length of the new array by truncating or padding with default values.
- Overloaded Methods: Supports different data types and custom array types.
- Use Cases: Suitable for resizing arrays, managing buffers, and preparing data for processing.
- Default Values: Uses type-specific default values for padding.
By understanding and utilizing the Arrays.copyOf() method, developers can efficiently manage array resizing and copying operations in their Java applications.