Java/Short 개발

[Java/Short] 배열/리스트 값 제거 방법 : 요소 첫번째/마지막 값 제거, 특정 값 제거

adjh54 2023. 3. 5. 17:09
반응형
해당 글에서는 배열의 값들을 앞/뒤의 값을 제거하거나 특정 조건에 따라 제거하는 방법에 대해서 공유합니다.


 

1) 배열/리스트의 앞뒤 값 비우기


1. 배열의 첫번째 값 비우기


💡 해당 방법에서는 사이즈도 줄이고 배열의 첫 번째 요소를 비우는 방법에 대해서 정의하였습니다.

 

1.1. 첫 번째 인덱스 0의 값으로 변경 : 배열 사이즈를 유지하면서 첫 번째 값 비우기

💡 첫번째 값을 비우기 위해서 첫 번째 인덱스 값을 가지고 값을 null로 변경하여 사이즈를 유지하면서 첫 번째 값을 비웁니다.
String[] strArr4 = {"apple", "banana", "cherry", "berry"};
strArr4[0] = null; // [null, "banana", "cherry", "berry"]

 

 

1.2. Arrays.copy() : 배열 재구성

💡 Arrays.copy()를 통해서 새로운 배열을 만들어서 첫번째 값을 비웁니다. 해당 메서드는 주어진 배열의 길이를 변경하여 새로운 배열을 생성합니다.
import java.util.Arrays;

String[] strArr2 = {"apple", "banana", "cherry", "berry"};
String[] copyOfStr = Arrays.copyOf(strArr2, strArr2.length - 1); // ["banana", "cherry", "berry"]

 

[ 더 알아보기 ]
💡 Arrays.copy() 메서드 속성 값

- copyOf(T[] original, int newLength)

- orginal: 원본 배열
- newLength : 생성하려는 배열 길이

 

 

 

1.3. Arrays.copyOfRange() : 배열 재구성

 💡 Arrays.copyOfRange()를 통해서 새로운 배열을 만들어서 첫 번째 값을 비웁니다. 해당 메서드는 복사할 원본 배열과, 복사를 시작할 인덱스와 끝 인덱스를 지정하여, 새로운 배열을 만들어주는 메서드입니다.
import java.util.Arrays;

String[] strArr1 = {"apple", "banana", "cherry", "berry"};
String[] copyStrArr1 = Arrays.copyOfRange(strArr1, 1, strArr1.length); // ["banana", "cherry", "berry"]

 

[ 더 알아보기 ]

💡Arrays.copyOfRange() 메서드 속성 값

- Arrays.copyOfRange(src, srcPos, dest, destPos, length)

- src: 원본 배열
- srcPos : 복사를 시작할 원본 배열의 인덱스
- dest : 복사 대상 배열
- destPos: 복사를 시작할 대상 배열의 인덱스
- length : 복사할 요소의 개수

 

1.4. System.arraycopy() : 배열 재구성

💡 System.arraycopy()를 통해서 새로운 배열을 만들어서 첫번째첫 번째 값을 비웁니다. array 배열에서 인덱스 1부터 시작하여 newArray 배열에 복사합니다. newArray는 array의 요소 중 첫 번째 요소("first")를 제외한 나머지 요소를 가지게 됩니다.
String[] strArr5 = {"apple", "banana", "cherry", "berry"};
String[] newArray = new String[strArr5.length - 1];
System.arraycopy(strArr5, 1, newArray, 0, newArray.length); // [banana, cherry, berry]

 

 [ 더 알아보기 ]

💡 System.arraycopy() 메서드 속성 값

- System.arraycopy(src, srcPos, dest, destPos, length)

- src: 원본 배열
- srcPos : 복사를 시작할 원본 배열의 인덱스
- dest : 복사 대상 배열
- destPos: 복사를 시작할 대상 배열의 인덱스
- length : 복사할 요소의 개수

 

 

1.5. for() : 배열 재구성

💡 for문을 순회하면서 배열의 값과 사이즈를 조정하여 첫번째 값을 비웁니다.
String[] oldArray2 = {"first", "second", "third"};
String[] newArray2 = new String[oldArray2.length - 1];
for (int i = 1; i < oldArray2.length; i++) {
    newArray2[i - 1] = oldArray2[i];
}
oldArray2 = newArray2; // ["banana", "cherry", "berry"]

 

 

2. 배열의 마지막 값 비우기


2.1. 마지막 인덱스의 값으로 변경 : 배열 사이즈를 유지하면서 마지막 값 비우기

💡 첫번째 값을 비우기 위해서 첫 번째 인덱스 값을 가지고 값을 null로 변경하여 사이즈를 유지하면서 첫 번째 값을 비웁니다.
String[] strArr4 = {"apple", "banana", "cherry", "berry"};
strArr4[strArr4.length] = null; // ["apple", "banana", "cherry", null]

 

 

2.2. Arrays.copyOfRange() : 배열 재구성

💡 Arrays.copyOfRange()를 통해서 새로운 배열을 만들어서 마지막 값을 비웁니다. 해당 메서드는 복사할 원본 배열과, 복사를 시작할 인덱스와 끝 인덱스를 지정하여, 새로운 배열을 만들어주는 메서드입니다.
import java.util.Arrays;

// 마지막 값 제거
String[] strArr3 = {"apple", "banana", "cherry", "berry"};
String[] copyOfRangeStrArr3 = Arrays.copyOfRange(strArr3, 0, strArr3.length - 1); // ["apple", "banana", "cherry"]

 

[ 더 알아보기 ]

💡Arrays.copyOfRange() 메서드 속성 값

- Arrays.copyOfRange(src, srcPos, dest, destPos, length)

- src: 원본 배열
- srcPos : 복사를 시작할 원본 배열의 인덱스
- dest : 복사 대상 배열
- destPos: 복사를 시작할 대상 배열의 인덱스
- length : 복사할 요소의 개수

 

 

2.3. System.arraycopy() : 배열 재구성

💡 System.arraycopy()를 통해서 새로운 배열을 만들어서 마지막 값을 비웁니다. array 배열에서 인덱스 0부터 시작하여 newArray.length-1 만큼 newArray 배열에 복사합니다.
String[] strArr5 = {"apple", "banana", "cherry", "berry"};
String[] newArray = new String[strArr5.length - 1];
System.arraycopy(strArr5, 0, newArray, 0, newArray.length - 1); // ["apple", "banana", "cherry"]
[ 더 알아보기 ]

💡 System.arraycopy() 메서드 속성 값

- System.arraycopy(src, srcPos, dest, destPos, length)

- src: 원본 배열
- srcPos : 복사를 시작할 원본 배열의 인덱스
- dest : 복사 대상 배열
- destPos: 복사를 시작할 대상 배열의 인덱스
- length : 복사할 요소의 개수

 

 

 

2) 배열/리스트의 특정 값 비우기


1. Stream API를 이용한 특정 값 비우기


💡 배열내에서 Stream API를 이용하여서 특정 조건 값을 제거하여 배열을 반환받는 방식을 이용하여 특정값을 제거합니다.
// Stream을 이용한 특정 값 제거 방법
String[] fruitArr1 = {"apple", "banana", "cherry", "berry"};
fruitArr1 = Arrays.stream(fruitArr1)
        .filter(item -> !item.equals("apple"))
        .toArray(String[]::new);        // ["banana", "cherry", "berry"]

 

 

2. List의 remove() 메서드로 특정 값 비우기


💡 리스트로 변환하여 remove() 메서드를 사용하여서 배열의 순차적으로 먼저 발견된 값만 발견하여 반환합니다.
// 리스트로 변환하여 제거 방법: 해당 값은 순차적으로 먼저 발견된 값만 제거합니다.
String[] fruitArr2 = {"apple", "banana", "cherry", "berry", "apple"};
List<String> fruitArrList = new ArrayList<>(Arrays.asList(fruitArr2));
fruitArrList.remove("apple");
fruitArr2 = fruitArrList.toArray(String[]::new);    // ["banana", "cherry", "berry", "apple"]

 

 

3. List의 removeAll() 메서드로 특정 값 비우기


💡 배열을 리스트로 변환하여 removeAll() 메서드를 사용하여서 값과 동일하게 존재하는 모든 값을 제거하여 반환합니다.
// 리스트로 변환하여 제거 방법: 해당 값은 배열 내에 동일하게 존재하는 모든 값을 제거합니다.
String[] fruitArr3 = {"apple", "banana", "cherry", "berry", "apple"};
List<String> fruitArrList3 = Arrays.asList(fruitArr3);
fruitArrList3.removeAll(Arrays.asList("apple"));
fruitArr3 = fruitArrList3.toArray(String[]::new);

 

 

 

오늘도 감사합니다. 😀

 

 

 

반응형