Notice
Recent Posts
Recent Comments
Link
passion and relax
[JAVA] 16. 자료구조 (컬렉션 및 제네릭) 본문
1. Class로 구성된 Collection의 정렬 (한가지 방법으로만 정렬하는 경우)
class Song implements Comparable<Song> {
String title;
String artist;
@Override
public int compareTo(Song s) {
return title.compareTo(s.getTitle());
}
}
ArrayList<Song> songArrayList = new ArrayList(Arrays.asList(new Song("bb", "bbb"), new Song("aa", "aaa")));
System.out.println(songArrayList);
Collections.sort(songArrayList);
System.out.println(songArrayList);
2. String으로 구성된 Collection의 정렬 (String에는 이미 compareTo()가 정의되어 있다)
ArrayList의 경우, 생성과 동시에 원소 넣기
ArrayList<String> songArrayList = new ArrayList(Arrays.asList("ccc", "bbb", "aaa"));
System.out.println(songArrayList);
Collections.sort(songArrayList);
System.out.println(songArrayList);
List의 경우, 생성과 동시에 원소 넣기
List<String> songList = Arrays.asList("cccc", "bbbb", "aaaa");
System.out.println(songList);
Collections.sort(songList);
System.out.println(songList);
3. Class로 구성된 Collection의 정렬 (여러가지 방법으로 정렬하는 경우)
ArrayList<Song> songArrayList = new ArrayList(Arrays.asList(new Song("bb", "ccc"), new Song("aa", "ddd")));
System.out.println(songArrayList);
class TitleCompare implements Comparator<Song> {
@Override
public int compare(Song o1, Song o2) {
return o1.getTitle().compareTo(o2.getTitle());
}
}
class ArtistCompare implements Comparator<Song> {
@Override
public int compare(Song o1, Song o2) {
return o1.getArtist().compareTo(o2.getArtist());
}
}
Collections.sort(songArrayList, new TitleCompare());
System.out.println(songArrayList);
Collections.sort(songArrayList, new ArtistCompare());
System.out.println(songArrayList);
* class Song 은 손댈 필요 없다.
Collection
Set (interface)
LinkedHashSet
HashSet
SortedSet (interface)
TreeSet
List (interface)
ArrayList
LinkedList
TreeSet
. 원소가 Comparable을 implement 한 후, compareTo()를 override 하거나,
=> Class로 구성된 Collection의 정렬 (한가지 방법으로만 정렬하는 경우)
. 생성할 때 Comparator를 implement 한 후, compare()를 override 한 클래스를 생성자로 넣어야 함.
=> Class로 구성된 Collection의 정렬 (여러가지 방법으로 정렬하는 경우)
public class BookCompare implements Comparator<Book> {
public int compare(Book one, Book two) {
return (one.title.compareTo(two.title));
}
}
BookCompare bCompare = new BookCompare();
TreeSet<Book> tree = new TreeSet<Book>(bCompare);
제네릭 와일드 카드
public void takeAnimals (ArrayList<? extends Animal> animals) {
for (Animal a : animals) { a.eat(); } //참조하는 것은 가능
animals.add (new Cat()); //넘어온 매개변수를 변경하는 것은 불가능. 컴파일 에러.
}
public <T extends Animal> void takeThing (ArrayList<T> list) 이거와
public void takeThing (ArrayList<? extends Animal> list) 이거는 동일함.
public <T extends Animal> void takeThing (ArrayList<T> one, ArralyList<T> two)
여러 번 써야하는 경우를 위해 필요함.
Array2ArrayList
String[] arrStringS = {"String01", "String02"};
ArrayList<String> arrlistStringS = new ArrayList(Arrays.asList(arrStringS));
Set2Array (String 자료형 유지)
Set<String> arrPubmedIds = new HashSet();
setPubmedIds.add("id01");
setPubmedIds.add("id02");
String[] arrPubmedIds = new String[setPubmedIds.size()];
arrPubmedIds = (String[]) setPubmedIds.toArray(arrPubmedIds);
Set2Array (Object 자료형으로 변형 : 출력 시 동일함)
Set<String> arrPubmedIds = new HashSet();
setPubmedIds.add("id01");
setPubmedIds.add("id02");
Object[] arrObjects = (Object[]) setPubmedIds.toArray();
Set2Array 후, 하나의 요소만 꺼내오기
Set<String> arrPubmedIds = new HashSet();
setPubmedIds.add("id01");
setPubmedIds.add("id02");
String idxZero = (String) setPubmedIds.toArray()[0];
String idxOne = (String) setPubmedIds.toArray()[1];
case insensitive Set
Set<String> mySet = new TreeSet<String>(String.CASE_INSENSITIVE_ORDER);
contains등의 method에서 case insensitive하게 반응.
case insensitive Map
import org.apache.commons.collections.map.CaseInsensitiveMap;
...
Map<String, List<String>> xIdToYIdList = new CaseInsensitiveMap();
'프로그래밍' 카테고리의 다른 글
[JAVA] 18. 분산 컴퓨팅 (RMI와 서블릿, EJB와 지니) (2) | 2024.06.04 |
---|---|
[JAVA] 17. 코드를 배포합시다 (패키지 제작과 배포) (1) | 2024.06.04 |
[JAVA] 15. 연결하는 방법 (네트워크 소켓과 멀티스레딩) (0) | 2024.06.04 |
[JAVA] 14. 객체 저장 (직렬화와 입출력) (0) | 2024.06.03 |
[JAVA] 13. 스윙을 알아봅시다 (레이아웃 관리와 구성요소) (2) | 2024.05.30 |