Practice/JAVA

[JAVA] Collection API

요모조묘 2023. 3. 8. 15:17

데이터를 저장하는 방법
  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