데이터를 저장하는 방법
1) 변수 : 한가지 타입에 한가지 값만 저장
2) 배열 : 한가지 타입에 여러개의 값을 저장
데이터조작에 불편하다(삽입, 삭제, 수정,검색)
배열은 사이즈가 변경될수 없다!!
🔔 자료구조
: import java.util.* ; 제공한다.
: Collection Framework이라고 한다.
: 데이터를 저장하는 방식에 따라 이미 필요한 객체나 interface를 만들어서
풍부하게 제공을 한다. 사용자인 우리는 만들어 놓은 객체 또는 interface 를 가져다 사용하면
데이터조작을 손쉽게 할수 있다.(ex) 등록, 수정, 삭제, 검색......)
: 제공된 메소드를 최대한 이용하여 작성하면 코딩은 간결하고 하는일 더 많이 할수 있다!!!
: 객체만 저장가능하고 다양한 데이터타입 저장가능하다.
//int float저장 안돼요.(자동으로 바꿔줘서 그동안 가능했던것,) 객체타입만 저장됨
: 자료구조 공간의 크기가 늘어난다! //미리 지정 안해도 ㄱㅊ
: 제공되는 interface
1) List : 순서(index) 있고 중복이 가능하다.
구현객체제공 - ArrayList, Vector, LinkedList,....
2) Set : 순서가 없다, 중복안됨.
구현객체 - HashSet,
TreeSet : element를 정렬해준다!!
3) Map : key와 value의 한쌍으로 이루어지며
key는 중복안되고 value는 중복가능하다
구현객체 - HashMap, Hashtable, TreeMap, Properties...
WapperClass (요즘엔 잘 안씀 자동이여서)
: 기본형을 객체로 변환해주는 전용클래스 (int -> Integer)
AutoBoxing <->Unboxing
int i = 10
Integer i = 5; //에러 안남. AutoBoxing
int j = new Integer(4); //가능하다. Unboxing
🔔 Comparable vs Comparator
: Comparable과 Comparator는 모두 인터페이스(interface)
: Comparable 혹은 Comparator을 사용할때 인터페이스 내에 선언된 메소드를 반드시 재정의 필수.
: 객체를 비교할 때 사용한다.
: Comparable은 자기 자신과 매개변수 객체를 비교함
: Comparator는 두 매개변수 객체를 비교 함.
: Comparable은 lang패키지에 있기 때문에 import 를 해줄 필요가 없지만, Comparator는 util패키지에 있기때문에 반드시 import 필수
🔔 Interface Comparable<T>
: int compareTo(T o)
ex) 자신과 인수 비교
결과: 음수면 인수가 크다
0이면 같다.
양수면 자신이 크다
ex) 사원번호 기준 정렬
( 자신.사원번호 - 인수.사원번호 > 0 )=> 양수니까 자신이 크다.
( 자신.사원번호 - 인수.사원번호 = 0 ) =>0이니까 같다
( 자신.사원번호 - 인수.사원번호 < 0 ) => 음수니까 인수가 크다.
ComparableExam.java - 학생의 정보를 각 속성으로 정렬하는 프로그램
package day05;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
public class ComparableExam {
// 맴버변수
public static void main(String[] args) {
List<Student> list = new ArrayList<>();
list.add(new Student(300,"희정",40, "서울"));
list.add(new Student(800,"나경",21, "대구"));
list.add(new Student(600,"지원",43, "대전"));
list.add(new Student(200,"수희",28, "부산"));
list.add(new Student(400,"가영",30, "경기"));
System.out.println("---------정렬 전-----------");
printList(list);
System.out.println("---------학번 올림차순-----------");
Collections.sort(list);
printList(list);
System.out.println("----나이를 기준으로 정렬---");
List<Student> sortedList = getSortByAge(list);
printList(sortedList);
}
/**
* 출력하는 메소드
* @param list
*/
public static void printList(List<Student> list) { //객체생성없이 호출가능하게 하는 스태틱
System.out.println("---------학생 "+list.size()+"명----------");
for(Student st: list) {
System.out.println(st);
}
System.out.println("----------------------------");
}
/**
* 나이를 기준으로 정렬하고 싶다.
*/
public static List<Student> getSortByAge(List<Student> list){
//인수로 전달된 데이터를 직접 정렬하면 원본이 변경되기 때문에 복사본이 필요하다.
List<Student> sortedStudentList = new ArrayList<>();
for(Student st:list) {
sortedStudentList.add(st);
}
//Collections.sort(sortedStudentList, new SortComparator() );
Collections.sort(sortedStudentList, new Comparator<Student>() {
public int compare(Student o1,Student o2) {
return o1.getAge()-o2.getAge();
}
});
return sortedStudentList;
}
}
'Practice > JAVA' 카테고리의 다른 글
[JAVA] equals 메소드 (0) | 2023.03.08 |
---|---|
[JAVA] 인터페이스 (0) | 2023.03.08 |
[JAVA] 제한자 (0) | 2023.03.08 |
[JAVA] Overriding -재정의 (0) | 2023.03.07 |
[JAVA] 상속 Inheritance (0) | 2023.03.07 |