자바 Arrays 도구 클래스 사용법 상세 설명
Arrays 클래스
기능 설명
4.567917.Arrays 류 는 도구 류 로 배열 작업 의 많은 방법 을 포함한다.예 를 들 어 검색 과 정렬 등 이다
1.asList(T... a)
주어진 배열 a 에서 고정 크기 의 List 대상 을 되 돌려 줍 니 다.여기 서 앞에서 이 말의 깊 은 의 미 를 설명 하 는 데 중심 을 두 고 우 리 는 Arrays 류 의 소스 코드 를 보고 우리 가 이해 하 는 데 도움 을 줄 수 있다.
생 성 된 List 대상 은 주어진 배열 a 에 의 해 결 정 됩 니 다.원본 코드 를 살 펴 보 겠 습 니 다.
public static <T> List<T> asList(T... a) {
return new ArrayList<>(a);
}
return new ArrayList<>(a);
}
이 ArrayList 는 java.util 의 ArrayList 클래스 가 아니 라 Arrays 의 내부 클래스 ArrayList 입 니 다.원본 코드 는:
private static class ArrayList<E> extends AbstractList<E>
implements RandomAccess, java.io.Serializable
{
private static final long serialVersionUID = -2764017481108945198L;
private final E[] a;
ArrayList(E[] array) {
a = Objects.requireNonNull(array);
}
@Override
public int size() {
return a.length;
}
@Override
public Object[] toArray() {
return a.clone();
}
@Override
@SuppressWarnings("unchecked")
public <T> T[] toArray(T[] a) {
int size = size();
if (a.length < size)
return Arrays.copyOf(this.a, size,
(Class<? extends T[]>) a.getClass());
System.arraycopy(this.a, 0, a, 0, size);
if (a.length > size)
a[size] = null;
return a;
}
@Override
public E get(int index) {
return a[index];
}
@Override
public E set(int index, E element) {
E oldValue = a[index];
a[index] = element;
return oldValue;
}
@Override
public int indexOf(Object o) {
E[] a = this.a;
if (o == null) {
for (int i = 0; i < a.length; i++)
if (a[i] == null)
return i;
} else {
for (int i = 0; i < a.length; i++)
if (o.equals(a[i]))
return i;
}
return -1;
}
@Override
public boolean contains(Object o) {
return indexOf(o) != -1;
}
@Override
public Spliterator<E> spliterator() {
return Spliterators.spliterator(a, Spliterator.ORDERED);
}
@Override
public void forEach(Consumer<? super E> action) {
Objects.requireNonNull(action);
for (E e : a) {
action.accept(e);
}
}
@Override
public void replaceAll(UnaryOperator<E> operator) {
Objects.requireNonNull(operator);
E[] a = this.a;
for (int i = 0; i < a.length; i++) {
a[i] = operator.apply(a[i]);
}
}
@Override
public void sort(Comparator<? super E> c) {
Arrays.sort(a, c);
}
}
public static <T> T requireNonNull(T obj) {
if (obj == null)
throw new NullPointerException();
return obj;
}
따라서 마지막 으로 생 성 된 List 인 스 턴 스 의 요 소 는 배열 a 의 요소 와 같 고 그 길 이 는 배열 a 의 요소 와 같다 는 것 을 알 수 있다.이제'고정 길이 의 뜻'을 설명 하 겠 습 니 다.
List 와 배열 의 차이 점 은 List 의 길 이 는 가 변 적 이 고 List 에 요 소 를 삽입 하고 삭제 할 수 있 으 며 배열 의 길 이 는 고정 적 이 며 배열 에서 요 소 를 삭제 할 수 없고 요소 의 값 만 수정 할 수 있다 는 것 이다.Arrays.asList(array)를 이용 하여 List 를 되 돌려 줍 니 다.그러나 이 되 돌아 오 는 List 는 add 와 reove 작업 을 지원 하지 않 습 니 다.
그런데 왜 add 와 remove 작업 을 지원 하지 않 습 니까?원본 코드 만 올 라 갈 수 있 습 니 다:
우 리 는 AbstractList 에서 삽입 과 삭제 요 소 를 어떻게 실현 하 는 지 근 거 를 찾 았 습 니 다.
public boolean add(E e) {
add(size(), e);
return true;
}
public void add(int index, E element) {
throw new UnsupportedOperationException();
}
public E remove(int index) {
throw new UnsupportedOperationException();
}
따라서 우리 가asList()
방법 을 통 해 목록 인 스 턴 스 를 생 성 할 때 이 인 스 턴 스 를 삽입 하고 삭제 하 는 데 이상 이 있 을 수 있 습 니 다.생 성 된 List 대상 의 크기 는 원래 주어진 배열 에 의 해 결정 된다 는 것 도 설명 했다.자신 이 한 테스트:
import java.util.Arrays;
import java.util.Iterator;
import java.util.List;
public class ArraysTest
{
public static void main(String[] args)
{
Integer[] a = {1,2,3,4};
int[] b = {1,2,3,4};
String[] str = {"a","s","d"};
List list1 = null;
List list2 = null;
List list3 = null;
list1 = Arrays.asList(a);
list2 = Arrays.asList(str);
list3 = Arrays.asList(b);
System.out.println("list1 :"+list1.size());
System.out.println("list2 :"+list2.size());
System.out.println("list3 :"+list3.size());// , , list 1
System.out.println("-------- ----------");
System.out.print("a :");
for(int i= 0; i<a.length;i++)
{
System.out.print(a[i]+",");
}
System.out.print("
");
System.out.print("str :");
for(int i= 0; i<str.length;i++)
{
System.out.print(str[i]+",");
}
System.out.print("
");
System.out.println("-------- list ----------");
System.out.print("list1 :");
Iterator ite = list1.iterator();
while(ite.hasNext())
{
System.out.print((Integer)ite.next()+",");
}
System.out.print("
");
System.out.println("list1 :"+list1.size());
System.out.print("list2 :");
Iterator ite1 = list2.iterator();
while(ite1.hasNext())
{
System.out.print(ite1.next().toString()+",");
}
System.out.print("
");
System.out.println("list2 :"+list2.size());
list1.set(1,new Integer(23));
a[0] = new Integer(90);
System.out.println("-------- ----------");
System.out.print("a :");
for(int i= 0; i<a.length;i++)
{
System.out.print(a[i]+",");
}
System.out.print("
");
System.out.print("list1 :");
Iterator ite2 = list1.iterator();
while(ite2.hasNext())
{
System.out.print((Integer)ite2.next()+",");
}
System.out.print("
");
list1.add(new Integer(6));
System.out.println("------------------------");
System.out.println("list1 :"+list1.size());
System.out.println("------------------------");
list1.add(2,new Integer(9));
list1.remove(3);
}
}
결과 캡 처:이 를 통 해 알 수 있 듯 이 원래 배열 의 요 소 를 바 꿀 때 list 대상 의 해당 요 소 를 변화 시 킬 수 있다.마찬가지 로 생 성 된 list 대상 의 요 소 를 수정 할 때 원래 배열 의 해당 요 소 를 변화 시 킬 수 있 습 니 다.
2.fill():
특정 값 val 을 지정 하여 전체 배열 이나 아래 표 시 된 범위 내의 요소 값 을 val 로 합 니 다.
int 배열 로 분석,기타 유형의 배열
연습 원본:
import java.util.Arrays;
public class ArraysTest04
{
public static void main(String[] args)
{
int[] a = new int[7];
int[] b = new int[7];
Arrays.fill(a,3);
Arrays.fill(b,3,5,6);
for(int i = 0;i<a.length;i++)
{
System.out.print(a[i]+",");
}
System.out.print("
");
for(int i = 0;i<b.length;i++)
{
System.out.print(b[i]+",");
}
System.out.print("
");
}
}
결과 캡 처:3.copyOf() && copyOfRange()
4.567914.원본 배열 의 요 소 를 새로운 배열 에 복사 하면 복사 할 길 이 를 설정 할 수 있 습 니 다(즉,복사 해 야 할 요소 개수).
4.567914.특정한 범위 안의 요 소 를 새로운 배열 에 복사 합 니 다.
int 배열 로 분석,기타 유형의 배열
연습 원본:
import java.util.Arrays;
public class ArraysTest03
{
public static void main(String[] args)
{
int[] a = {1,3,5,3,6,7};
int[] b;
int[] c;
int[] d;
System.out.println("----------- ---------");
for(int i = 0;i<a.length;i++)
{
System.out.print(a[i]+",");
}
System.out.print("
");
b = Arrays.copyOf(a,7);// a b , , 0
c = Arrays.copyOf(a,3);
d = Arrays.copyOfRange(a,2,4);
System.out.println("----------- ---------");
for(int i = 0;i<b.length;i++)
{
System.out.print(b[i]+",");
}
System.out.print("
");
for(int i = 0;i<c.length;i++)
{
System.out.print(c[i]+",");
}
System.out.print("
");
for(int i = 0;i<d.length;i++)
{
System.out.print(d[i]+",");
}
System.out.print("
");
}
}
결과 캡 처:4.equals()
두 배열 의 요소 가 일일이 대응 하 는 지 여 부 를 판단 하 다.
int 배열 로 분석 하면 다른 유형의 배열 원리 가 같다.
연습 원본:
import java.util.Arrays;
public class ArraaysTest05
{
public static void main(String[] args)
{
int[] a = new int[]{1,2,3};
int[] b = null;
int[] c = new int[]{};
int[] d = new int[]{1,2,3};
System.out.println(Arrays.equals(a,b));
System.out.println(Arrays.equals(a,c));
System.out.println(Arrays.equals(a,d));
System.out.println(Arrays.equals(b,c));
System.out.println(Arrays.equals(b,d));
System.out.println(Arrays.equals(c,d));
}
}
결과 캡 처:5.sort():
배열 을 오름차 순 으로 정렬 하고 정렬 한 후에 배열 에 저 장 된 것 은 정렬 후의 결과 입 니 다.
int 배열 로 분석 하면 다른 유형의 배열 원리 가 같다.
연습 코드:
import java.util.Arrays;
public class ArraysTest05
{
public static void main(String[] args)
{
int[] a ={34,56,23,565,23,-56};
Arrays.sort(a);
for(int i = 0;i<a.length;i++)
{
System.out.print(a[i]+",");
}
System.out.print("
");
}
}
결과 캡 처:6.binarySearch()
정렬 된 배열 에 대해 서 는 2 분 검색 방식 으로 특정한 요 소 를 찾 을 수 있 고 전체 배열 에서 찾 을 수 있 으 며 특정한 범위 에서 찾 을 수 있 습 니 다.
int 배열 로 분석 하면 다른 유형의 배열 원리 가 같다.
연습 원본:
import java.util.Arrays;
public class ArraysTest02
{
public static void main(String[] args)
{
int[] a = {1,45,78,23,123,98,67,12,90,56};
System.out.println("----------- ---------");
for(int i = 0;i<a.length;i++)
{
System.out.print(a[i]+",");
}
System.out.print("
");
Arrays.sort(a);
System.out.println("----------- ---------");
for(int i = 0;i<a.length;i++)
{
System.out.print(a[i]+",");
}
System.out.print("
");
System.out.print(" :");
System.out.println(Arrays.binarySearch(a,78));
System.out.print(" :");
System.out.println(Arrays.binarySearch(a,4,7,1));
}
}
결과 캡 처:자바 관련 내용 에 관심 이 있 는 독자 들 은 본 사이트 의 주 제 를 볼 수 있 습 니 다.
본 고 에서 말 한 것 이 여러분 의 자바 프로 그래 밍 에 도움 이 되 기 를 바 랍 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
JPA + QueryDSL 계층형 댓글, 대댓글 구현(2)이번엔 전편에 이어서 계층형 댓글, 대댓글을 다시 리팩토링해볼 예정이다. 이전 게시글에서는 계층형 댓글, 대댓글을 구현은 되었지만 N+1 문제가 있었다. 이번에는 그 N+1 문제를 해결해 볼 것이다. 위의 로직은 이...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.