20240820수업
정렬:Sorting
- 오름차순 정렬:Ascending 1234, ABCD, 가나다라 순, 선동률 순, 방어율 순
- 내림차순 정렬:Descending 9876, DCBA, ..., 타율, 홈런순, 승수
Array정렬
①Array.sort()
int [] nums = {8, 5, 4, 7, 1};//초기값 설정
System.out.println("1.");
System.out.println(Arrays.toString(nums));
Arrays.sort(nums); //오름차순 정렬
System.out.println(Arrays.toString(nums));
- Arrays.sort(nums, Collections.reverseOrder()); =>error
∵int[] 배열은 reverseOrder할수가 없음
②함수 만들기
String out_msg = " ";
for (int i = 0; i < nums.length; i++) { //i 0-4,1-3
out_msg += (nums[ 4-i]);
if(nums[4-i]!=1) //=> if(i<num.length-1)
out_msg += ", ";
}
System.out.println(out_msg);
③Arrays.sort(변수, Collections.reverseOrder()) , Integer[]
Integer [] arr = {8, 5, 4, 7, 1};
System.out.println(Arrays.toString(arr));
Arrays.sort(arr); //오름차순
System.out.println(Arrays.toString(arr));
Arrays.sort(arr, Collections.reverseOrder()); //내림차순
//Collections이라는 클래스 안에 잇는 arr을 비교하기위해선 Integer를 사용해서 인스턴스화 시킨 후 비교가능
System.out.println(Arrays.toString(arr));
Integer [] arr1=new Integer[] {1,5,3,2,4};
Integer [] arr2={10,50,30,20,40};
Double [] arr3={12.5,53.4,37.8,20.9,40.7};
System.out.println("3.");
System.out.println(Arrays.toString(arr1));
람다식 알아보기
:java1.8부터 가능한 문법
- 함수 표현식을 줄인 것
- 새로나오는 언어들의 코딩이 간결해지는 추세라서 java에서 도입함
ex)(a,b)->{return a-b;}
[예제]
public int add(int a,int b){
return a+b;
}함수 한개를 위한 클래스
>>위 코드를
(a,b)->{return a+b;} 로 만들거나
(a,b)-> a+b; >>왼쪽과 같이 return 까지 생략가능
(int a, int b)->{ return a+b;}
Arrays.sort(arr1,(a,b)->a+b); 함수 사용
함수의 인자로 람다식을 사용
함수의 인자를 함수로 사용하는 기술
->callback 함수(인수자리에 함수를 넣는것 >callback)
③람다식 표현
Arrays.sort(arr1,(a,b)->{return a-b;});//오름차순
System.out.println(Arrays.toString(arr1));
Arrays.sort(arr1,(a,b)->{return b-a;});//내림차순
System.out.println(Arrays.toString(arr1));
④double 인자를 a.compareTo(b)
Arrays.sort(arr3,(a,b)->{return a.compareTo(b);});//오름차순
System.out.println(Arrays.toString(arr3));
Arrays.sort(arr3,(a,b)->{return b.compareTo(a);});//내림차순
System.out.println(Arrays.toString(arr3));
⑤문자열을 순서대로 정렬
String[]names= {"이순신","이이","세종","최영","연개소문"};
System.out.println(Arrays.toString(names));
Arrays.sort(names,(a,b)->{return a.compareTo(b);});//순서를 따지는 것이므로 equals를 쓰면안되고 compareTo를 써야함
System.out.println(Arrays.toString(names));
Arrays.sort(names,(a,b)->{return b.compareTo(a);});
System.out.println(Arrays.toString(names));
ArrayList정렬
ArrayList<Integer> list=new ArrayList<>();
list.add(10);
list.add(5);
list.add(35);
list.add(57);
list.add(28);
System.out.println(list);
generic:<T> T:class type
제네릭은 컬렉션에 저장할 수 있는 객체의 타입을 명확히 지정할 수 있다.
∴ArrayList 안의 요소가 Integer type의 data만 가능하다
(ArrayList는 실행하다가 배열의 크기를 조정할수있는데 이떄 Integer가 필요하다.)
①Collections.sort(변수명,Collections.reverseOrder());
Collections.sort(list); //오름차순 정렬
System.out.println(list);
Collections.sort(list,Collections.reverseOrder()); //내림차순 정렬
System.out.println(list);
②Comparator
아래와 같이 선언해서 Comparator라는 객체 생성 인터페이스가 코드를 가질수 있게한다. 즉 Comparator를 class처럼 사용하게 할 수 있게 한다.
Comparator<Integer> comp1=new Comparator<Integer>() {
그리고 아래와 같이 메소드를 구현한다.
@Override
public int compare(Integer o1, Integer o2) {
return o1-o2; //오름차순 정렬
//return o2-o1; 내림차순
}
출력은 아래와 같이 한다.
Collections.sort(list,comp1);
System.out.println(list);
③문자열 ArrayList를 정렬
ArrayList<String> names=new ArrayList<>();
names.add("원영");
names.add("윈터");
names.add("카리나");
names.add("사나");
names.add("미나");
Comparator<String> name1=new Comparator<String>() {
@Override
public int compare(String o1, String o2) {
// TODO Auto-generated method stub
return o1.compareTo(o2); //오름차순 정렬
//return o2.compareTo(o1) ; //내림차순 정렬
}
};
Collections.sort(names,name1);
System.out.println(names);
④ArrayList 람다식
Collections.sort(names,(a,b)->{return a.compareTo(b);});
System.out.println(names);
compareTo를 쓰는 이유▼
여기서 compareTo를 쓰는 이유는 람다식은 Comparable인터페이스 기반이기 때문이다.
이떄, Comparable 인터페이스는 "자기 자신과 매개변수 객체를 비교"하는 것이고, Comparator 인터페이스는는 "두 매개변수 객체를 비교"하는 것이다. 더 자세히 알고 싶다면 아래 링크를 참조할 것
https://st-lab.tistory.com/243
응용
(숫자와 문자열이 같이 있는 배열 정렬)
public class TestStudentSort {
public static void main(String[] args) {
Student [] students=new Student [5];
students[0]=new Student(3,"Hanni");
students[1]=new Student(2,"Haerin");
students[2]=new Student(1,"Minji");
students[3]=new Student(5,"Hyein");
students[4]=new Student(4,"Danielle");
disp_array(students); //display.array
//번호순으로 내림차순 정렬
Arrays.sort(students);
disp_array(students);
//이름순으로 오름차순 정렬
Arrays.sort(students,new Comparator<>() {
@Override
public int compare(Student o1, Student o2) {
return o1.getName().compareTo (o2.getName()); //문자일때는 compareTo 숫자일때는 -
}});
disp_array(students);
//----------------------------------
ArrayList<Student> sList=new ArrayList<>();
sList.add(new Student(10,"하니") );
sList.add(new Student(15,"해린") );
sList.add(new Student(20,"민지") );
sList.add(new Student(13,"혜인") );
sList.add(new Student(16,"다니엘") );
sList.add(new Student(11,"원영") );
//번호순으로 정렬
//Collections.sort(sList); //번호순 오름차순
Collections.sort(sList, new Comparator<Student>() {
@Override
public int compare(Student o1, Student o2) {
// TODO Auto-generated method stub
return o1.getSno()-o2.getSno();
}
});
disp_List(sList);
//이름순으로 오름차순 정렬
Collections.sort(sList,(a,b)->{return a.getName().compareTo(b.getName());});
disp_List(sList);
}
private static void disp_array(Student[] students) {
// TODO Auto-generated method stub
}
}
'JAVA' 카테고리의 다른 글
[java]Collection Framework (3) | 2024.08.22 |
---|---|
[java]class에 모든 기능을 구현해서 출력 (0) | 2024.08.22 |
[java] action , abstract, interface (0) | 2024.08.21 |
[java]객체 개념 (0) | 2024.08.20 |
[java]getter/setter (0) | 2024.08.18 |