자바 Arrays 도구 클래스 사용법 상세 설명

이 글 의 사례 는 자바 Arrays 도구 류 의 용법 을 서술 하 였 다.여러분 께 참고 하도록 공유 하 겠 습 니 다.구체 적 으로 는 다음 과 같 습 니 다.
Arrays 클래스
기능 설명
4.567917.Arrays 류 는 도구 류 로 배열 작업 의 많은 방법 을 포함한다.예 를 들 어 검색 과 정렬 등 이다
  • Arrays 류 의 방법 은 모두 static 로 수식 되 어 있 으 며,Arrays.xxx(xxx)의 형식 으로 직접 호출 할 수 있 습 니 다
  • 몇 가지 중요 한 방법
      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)); } }
    결과 캡 처:

    자바 관련 내용 에 관심 이 있 는 독자 들 은 본 사이트 의 주 제 를 볼 수 있 습 니 다.
    본 고 에서 말 한 것 이 여러분 의 자바 프로 그래 밍 에 도움 이 되 기 를 바 랍 니 다.

    좋은 웹페이지 즐겨찾기