언어/Java

Arrays 클래스

코딩은 내 밥줄 2023. 1. 21. 01:57

Arrays.copyof

: 새로운 배열을 생성하여 복사한다

import java.util.Arrays;

public class Arrays_Copy {
    public static void main(String[] args){
        String[] arOrg = {"hello","world","apple"};
        String[] arCpy = Arrays.copyOf(arOrg,arOrg.length); // 전체 복사

        for(String d : arCpy)
            System.out.println(d+"\t");
    }
}

 

Arrays.equals

: 두 배열의 내용이 같을 때 true 반환

import java.util.Arrays;

public class Array_Eq {
    public static void main(String[] args){
        int[] ar1 = {1,2,3,4};
        int[] ar2 = Arrays.copyOf(ar1,ar1.length);

        System.out.println(Arrays.equals(ar1,ar2));
    }
}

객체로 생성된 배열 비교

import java.util.Arrays;

class Num{
    private int num;
    public Num(int num){
        this.num = num;
    }
    public void showInfo() {
        System.out.println(num);
    }

}

public class ArrayObjEq {
    public static void main(String[] args){
        Num[] ar1 = new Num[3];
        Num[] ar2 = new Num[3];

        ar1[0] = new Num(1);
        ar1[1] = new Num(2);
        ar2[0] = new Num(1);
        ar2[1] = new Num(2);

       for(Num num : ar1) {
            num.showInfo();
        }

        for(Num num : ar2) {
            num.showInfo();
        }

        System.out.println(Arrays.equals(ar1,ar2)); //false
    }

}

equals 클래스가 내용 비교가 아닌 참조 값을 비교한다

 

그러므로 내용 비교를 하려면 오버라이딩으로 equals 클래스가 객체로 받는 부분을 변경해야 한다.

import java.util.Arrays;

class Num{
    private int num;
    public Num(int num){
        this.num = num;
    }

    @Override
    public boolean equals(Object obj) {
        if(this.num == ((Num)obj).num)
            return true;
        else
            return false;

    }

    public void showInfo() {
        System.out.println(num);
    }

}

public class ArrayObjEq {

    public static void main(String[] args){
        Num[] ar1 = new Num[2];
        Num[] ar2 = new Num[2];

        ar1[0] = new Num(1);
        ar1[1] = new Num(2);
        ar2[0] = new Num(1);
        ar2[1] = new Num(2);

        for(Num num : ar1) {
            num.showInfo();
        }

        for(Num num : ar2) {
            num.showInfo();
        }

        System.out.println(Arrays.equals(ar1,ar2)); //true
    }

}

 

Arrays.sort

: 배열을 정렬함

import java.util.Arrays;

public class ArraySort {
    public static void main(String[] args){
        int[] ar1 = {1,5,8,9};

        Arrays.sort(ar1);

        for(int n : ar1)
            System.out.println(n);
    }
}

객체로 생성된 배열 정렬하기

인터페이스 comparable의 추상 메소드 compareTo, toString을 오버라이딩한다

import java.util.Arrays;
import java.util.Objects;

class Person implements Comparable{
    private String name;
    private  int age;

    public Person(String name, int age){
        this.name = name;
        this.age = age;
    }

    @Override
    public int compareTo(Object o){
        Person p = (Person)o;
        if(this.age > p.age)
            return 1;
        else if(this.age < p.age)
            return -1;
        else
            return 0;
    }

    @Override
    public String toString(){
        return name + ":" + age;
    }
}

public class ArrObjSort {

    public static void main(String[] args){
        Person[] ar = new Person[2];
        ar[0] = new Person("min",23);
        ar[1] = new Person("Gee",17);

        Arrays.sort(ar);

        for(Person p : ar)
            System.out.println(p);
    }
}

 

Arrays.binarySearch

: Key값으로 어디 index에 있는지 찾음

import java.util.Arrays;

public class ArraySearch {

    public static void main(String[] args){
        int[] ar = {1,4,2,8};
        Arrays.sort(ar);
        for(int n : ar)
            System.out.println(n);

        int idx = Arrays.binarySearch(ar,4);
        System.out.println("where 4:"+idx);
    }
}