-
0. JAVA 기초 (6)JAVA Spring 2020. 3. 7. 18:17
- Collection Framework : 배열, 링크드리스트 등이 구현되어있는 종합 라이브러리 (java.util 패키지에 있음)
- Generic Programming : Collection Framework에서 채용하는 프로그래밍 기법 ( C++의 Template과 유사)
public class GenericPrinter<T extends Material> { // Material에서 상속받은 애들만 인자로 받겠다. private T material; public T getMaterial() { return material; } public void setMaterial(T material) { this.material = material; } }
public class GenericPrinterTest { public static void main(String[] args) { GenericPrinter<Powder> PowderPrintrer = new GenericPrinter<Powder>(); Powder powder = new Powder(); PowderPrintrer.setMaterial(powder); } }
- Generic Method : 제네릭 메소드는 매개 타입과 리턴 타입으로 타입 파라미터를 갖는 메소드를 말합니다.
public <타입 파라미터, ...> 리턴 타입 메소드명(매개변수, ...) { ... } public <T> Box<T> boxing(T t) { ... }
[Link] https://palpit.tistory.com/667
[Java] 제네릭(generic) - 제네릭 메소드
제네릭은 여러 절로 구성되어 있습니다. Intro 제네릭 타입 멀티 타입 파라미터 제네릭 메소드 제한된 타입 파라미터 & 와일드카드 타입 제네릭 타입의 상속과 구현 제네릭 메소드(<t, r=""> R method(T t)) 제네릭..</t,>
palpit.tistory.com
- 앞에 붙은 타입 파라미터 <T>는 Local VAR와 같은 개념으로 생각하면 된다.
- Collection Framework : 배열, 링크드리스트 등이 구현되어있는 종합 라이브러리 (java.util 패키지에 있음)
- Collection Interface와 Map Interface로 구성된다.
List Interface : Collection의 하위 Interface
ex. ArrayList, Vector, LinkedList
- Vector는 멀티 쓰레드 프로그램에서 동기화를 지원
- Capacity와 size는 다른 개념. ArrayList에서는 element의 공간이 부족하면 더 큰 공간으로 메모리를 복사한다. (ex. {{1,2}, {4,5,6}})
- LinkedList
package hello; import java.util.LinkedList; public class HelloJava { public static void main(String[] args) { LinkedList<String> myList = new LinkedList<String>(); myList.add("A"); myList.add("B"); myList.add("C"); System.out.println(myList); // [A, B, C] myList.add(1,"D"); System.out.println(myList); // [A, D, B, C] myList.removeLast(); System.out.println(myList); // [A, D, B] for(int i=0; i<myList.size(); i++) { System.out.println(myList.get(i)); } } }
- HashSet : 기본적으로 Set인데 Hash형태로 저장함.
import java.util.HashSet; import java.util.Iterator; public class HelloJava { public static void main(String[] args) { HashSet<String> set = new HashSet<String>(); set.add("A"); set.add("B"); set.add("C"); set.add("A"); System.out.println(set); // [A, B, C] Iterator<String> ir = set.iterator(); while(ir.hasNext()) { // 다음이 있으면 System.out.println(ir.next()); // next()로 가져온다. } } }
- Iterator() : Collection이면 다 돌아볼 수 있게 하는 METHOD. enhanced for로 구현해도 된다.
- TreeSet : Set인데 정렬된 형태. Red-Black Tree를 이용한다(O(log n) 의 시간복잡도로 삽입, 삭제, 검색). 보통 Search에서 쓴다.
- 정렬을 위해 Comparable interface를 구현해야 한다. (add()할 때 알아서 compareTo를 참조할 것임)
- Comparable interface
public class Member implements Comparable<Member> { // Comparable 인터페이스를 받아야, 무엇을 기준으로 정렬할 지 알려줄 수 있다. @Override public int compareTo(Member member) { // 양수이면 오름차순, 음수이면 내림차순 return (this.memberId - member.memberID); // int 기준 // String 기준으로 하려면 String 내의 compareTo로 비교하면 된다. return this.memberName.compareTo(member.getMemberName()); } }
- Comparator interface
public class Member implements Comparator<Member> { // Comparable 인터페이스를 받아야, 무엇을 기준으로 정렬할 지 알려줄 수 있다. @Override public int comapre(Member member1, Member member2) { return (member1.memberId - member2.memberID); } } // 단 선언할 때, treeSet = new TreeSet<Member>(); // 를 treeSet = new TreeSet<Member>(new Member()); // 으로 바꿔줘야함. // Template 방식에서 쓸 때 클래스를 전달해 주어야 한다. // 그렇지 않으면 compareTo를 호출한다. // 정렬방식을 여러개 쓸 수 있는 것.
Map Interface :
HashMap :
import java.util.HashMap; public class MemberHashMap { private HashMap<Integer, Member> hashMap; // <Key, Value> public MemberHAshMAp() { hashMap = new HashMap<Integer, Member>(); } public void addMember(Member member) { hashMap.put(member.getMemberId(), member) } public boolean removeMember(int memberId) { if( hashMap.containsKey(memberId)) { hashMap.remove(memverId); // Key로 검색해서 지운다. return true; } return false; } public void showAllMember() { Iterator<Integer> ir_key = hashMap.keySet().iterator(); // key의 iterator Iterator<Integer> ir_value = hashMap.values().iterator(); // values의 iterator (중복 제외) while ( ir_key.hasNext() ) { System.out.println(hashMap.get(ir_key.next())); } } }
TreeMap : 위와 동.
'JAVA Spring' 카테고리의 다른 글
0. JAVA 기초 (8) (0) 2020.03.07 0. JAVA 기초 (7) (0) 2020.03.07 0. JAVA 기초 (5) (0) 2020.03.07 0. JAVA 기초 (4) (0) 2020.03.06 0. JAVA 기초 (2) (0) 2020.03.06