Arrays.copyOfRange() in Java with Examples
Arrays copyOfRange()
method is used to create a new array by copying a specified range of elements from an existing array. It provides a way to copy a subset of elements between two indices by creating a new array of the same type.
Below is a simple example that uses Arrays.copyOfRange()
method to copy a specified range of elements from an existing array.
import java.util.Arrays;
public class Main {
public static void main(String[] args) {
// Original array
int[] arr1 = {10, 20, 30, 40,};
// Copy elements from index 1 to 3 (exclusive)
int[] arr2 = Arrays.copyOfRange(arr1, 1, 3);
System.out.println("Copied Array: " + Arrays.toString(arr2));
}
}
Output
Copied Array: [20, 30]
Table of Content
Syntax of Arrays.copyOfRange() method
public static int[] copyOfRange(int[] original_array, int from_index, int to_index)
Parameters:
- original_array : Array to be copied from.
- from_index : Starting index (inclusive) of range to be copied.
- to_end : The final index (exclusive) of the range to be copied.
Return Type:
- Returns a new array containing elements from the original array (length will be to_index to from_index).
Exceptions:
- ArrayIndexOutOfBoundsException : This is thrown if the initial index is out of range of original array.
- IllegalArgumentException : This is thrown if from_index > to_index.
- NullPointerException : This is thrown if the original array is null.
Examples of Arrays.copyOfRange() in Java
Now, let's understand the working of Arrays.copyOfRange() method with two examples.
Using Arrays.copyOfRange()
with Integer Array
This method efficiently copies a specified range of elements from an array. This automatically handles out-of-range indices by filling missing elements with default values i.e. 0 for integers.
// Java program to illustrate copyOfRange() method
import java.util.Arrays;
class GFG {
public static void main(String args[]) {
int arr1[] = { 1, 2, 3, 4, 5, 6, 7 };
// Copying elements within range
int[] arr2 = Arrays.copyOfRange(arr1, 2, 6);
for (int i : arr2)
System.out.print(i + " ");
System.out.println();
// Copying with out-of-range index (fills with zeroes)
int[] arr3 = Arrays.copyOfRange(arr1, 4, arr1.length + 3);
for (int i : arr3)
System.out.print(i + " ");
// Uncomment to see exceptions:
// IllegalArgumentException
// int[] arr4 = Arrays.copyOfRange(arr1, 5, 3);
// ArrayIndexOutOfBoundsException
// int[] arr5 = Arrays.copyOfRange(arr1, 10, arr1.length + 5);
}
}
Output
3 4 5 6 5 6 7 0 0 0
Using Arrays.copyOfRange()
with Custom Objects
This method enables easy way to copy a subset of custom objects by reducing the need of manual iteration. This also supports type safety by specifying the target class type for object arrays.
// Java program to illustrate copyOfRange() method
import java.util.Arrays;
class GFG {
static class Employee {
int i;
String n;
// constructor
public Employee(int i, String n)
{
this.i = i;
this.n = n;
}
// Override toString()
public String toString()
{
return i + " " + n;
}
}
public static void main(String args[]) {
Employee[] e = { new Employee(10, "geek1"),
new Employee(20, "geek2"),
new Employee(30, "geek3"),
new Employee(40, "geek4"),
new Employee(50, "geek5") };
// Copying range from index 3 to 5 in E array
Employee[] c = Arrays.copyOfRange(e, 3, 5);
for (Employee e1 : c)
System.out.print(e1.toString() + " ");
System.out.println();
// Copying Employee array to Object array
Object[] o = Arrays.copyOfRange(e, 1, 3, Object[].class);
// Uncommenting the following line would throw an error
// Number[] n = Arrays.copyOfRange(e, 1, 3, Number[].class);
for (Object e1 : o) {
System.out.print(e1.toString() + " ");
}
}
}
Output
40 geek4 50 geek5 20 geek2 30 geek3
copyOf vs copyOfRange
- copyOf(): This method copies elements starting from the 0th index of the original array, and we need to specify the new length of the array (number of elements to copy).
copyOfRange()
: This method copies a specific range of elements from the original array, defined by a start index (inclusive) and an end index (exclusive).