Java 강의 - 배열2 [즐거운 자바 강좌]

·2023년 8월 8일

java 공부

목록 보기
7/13
post-thumbnail

Arrays

< copyOfRange 메서드 >

char[] copyFrom = {'h', 'e', 'l', 'l', 'o', '!'};

char[] copyTo = Arrays.copyOfRange(copyFrom, 1, 3);// copyOfRange메서드 : 배열 범위 지정하여 복사해 반환

< compare(array, array) >

 int [] array1 = {1, 2, 3, 4, 5};
 int [] array2 = {6, 3, 7, 9, 2, 20];

 int compare = Arrays.compare(array1, array2);
 // 양수, 0, 음수(비교할 때는)
 //x - y = 결과가 양수면 x가 크고, 결과가 0이면 서로 같고, 결과가 음수면 y가 크다고 생각
 System.out.println(compare);// result : -1

< sort(array) >

int [] array1 = {5, 4, 2, 1, 3};
Arrays.sort(array1); //array1은 오름차순으로 정렬된다.
  • 그렇다면 객체를 비교할 때는 어떻게 해야하지?
public static void main(String[] args) {
        Item[] items = new Item [5];
        items[0]= new Item("java", 50000);
        items[1]= new Item("파이썬", 40000);
        items[2]= new Item("C#", 4500);
        items[3]= new Item("자바스크립트", 50);
        items[4]= new Item("Dart", 500);

        //객체의 정렬 기준은 어떻게?? comparable 상속 받고 오버라이딩 해서 구현
        Arrays.sort(items);

        for(Item item : items){
            System.out.println(item);

//Comparable은 어떤 Item이 큰지, 작은지 기준을 정하는 interface
class Item implements Comparable{
    private String name;
    private int price;

    public Item(String name, int price) {
        this.name = name;
        this.price = price;
    }
    // 파라미터로 들어온 Object와 내 자신을 비교하는 메소드
    // compareTo에는 Object를 받아들이도록 했지만 실제로는 Item이 들어온다.
    @Override
    public int compareTo(Object o) {
        Item d = (Item) o;
        return this.name.compareTo(d.name);// String이면 비교 가능, comparable 상속 받아서
    }

    @Override
    public String toString() {
        return "Item{" +
                "name='" + name + '\'' +
                ", price=" + price +
                '}';
    }
}

< 람다 함수 이용한 위와 같은 결과 코드 >

 public static void main(String[] args) {
        Item[] items = new Item [5];
        items[0]= new Item("java", 50000);
        items[1]= new Item("파이썬", 40000);
        items[2]= new Item("C#", 4500);
        items[3]= new Item("자바스크립트", 50);
        items[4]= new Item("Dart", 500);

        //객체의 정렬 기준은 어떻게?? comparable 상속 받고 오버라이딩 해서 구현
        Arrays.sort(items,(Object o1, Object o2) -> {//람다
                Item item1 = (Item) o1;
                Item item2 = (Item) o2;
                return item1.getName().compareTo(item2.getName());
            }
        );

        for(Item item : items){
            System.out.println(item);
        }

    }

< binarySearch(array, 찾는 것) >

  • 꼭 정렬 후 사용할 것
int [] array1 = {5, 4, 2, 1, 3};

Arrays.sort(array1);
// binarySearch란
//1 ~ 100 랜덤 x라는 숫자를 생각하자
// 20 업
// 50 작아
// 범위: 1 ~ 100  50으로 업 다운 판단, 만약 다운이면
// 범위: 1 ~ 50   25로 업 다운 판단, 만약 업이면
// 범위: 25 ~ 49  ... 이런식으로 x을 찾아가는 메서드 binarySearch이다.
// 그래서 무조건 정렬 후 써야한다.
int i = Arrays.binarySearch(array1, 4);
System.out.println(i);// result=3

명령 행 아규먼트(Command-Line Arguments)

  • main 메소드는 JVM이 실행하는 메소드이다.
  • JVM이 main메소드를 실행할 때 String[]을 아규먼트로 넘겨 준다는 것을 의미합니다.
public class EmptyCommandLineArgumentExam {
    public static void main(String[] args) {
        System.out.println(args.length);
    }
}
  • command 창에서 아래 줄들을 명령할 때 a, b, c, d, e가 args 배열로 들어간다.
    • javac EmptyCommandLineArgumentExam.java
      java EmptyCommandLineArgumentExam a b c d e
    • 결과
      -> java -javaagent: 어떤 설정 클래스 명(EmptyCommandLineArgumentExam) a b c d e
      : java와 클래스 사이는 JVM가 java에 주는 옵션 (메모리 크기나 에이전트 설정 등), 클래스 명 뒤의 것은 args 배열
profile
기회를 잡기 위해 준비하자 !

0개의 댓글