1. Generic
블로그 참조 :
2. Collection
collection이란 데이터 또는 Object 수집을 의미한다.
블로그 참조 : https://gangnam-americano.tistory.com/41
Collection에서 가장 중요한 것은 List와 Map이다.
1) List: 목록
🎈 ArrayList (배열 목록)
- 크기를 동적으로 조정할 수 있는 배열과 같은 구조를 가진 목록입니다.
- 배열처럼 index로 접근하고 관리합니다.
- 추가 및 삭제가 자주 일어나는 경우에 유용합니다.
- 선형(라인)구조로 데이터가 연속적으로 저장됩니다.
- 데이터의 검색 속도가 빠르지만, 추가/삭제가 느리다는 단점이 있습니다.
* 동적 : 길이가 늘어났다 줄어들았다 할 수 있다.
다음과 같이 Java의 List는 Object 형태로 데이터를 저장하기 때문에 어떤 타입이든 저장할 수 있습니다.
List list = new ArrayList();
list.add("Hello world");
List는 Object 형태로 저장하기 때문에 어떤 타입의 데이터가 저장되어있는지 알 수 없습니다. 그렇기 때문에 get()을 호출하면 Object가 리턴됩니다.
따라서, List에서 데이터를 가져올 때는 다음과 같이 형변환을 해줘야 합니다. 형변환을 하지 않으면 컴파일 에러가 발생합니다.
이때, generic을 통해 원하는대로 자료형을 바꿀 수 있습니다.
✨list <추가>
ArrayList<String> arrlist = new ArrayList<String>();
//제네릭만 빼면 일반 클래스와 동일하다.
//추가
arrlist.add("Tigers");
arrlist.add("eagles");
arrlist.add("Bears");
//리스트의 길이값 출력하기
System.out.println(arrlist.size()); //3반환
//리스트의 모든 데이터 출력하기
for(int i = 0; i<arrlist.size(); i++ ) {
System.out.println(i + ":" + arrlist.get(i));
}
//콘솔값 : 0:Tigers 1:eagles 2:Bears
System.out.println(); //개행
//추가하는방법은 1. 맨뒤에 추가 2. 중간에 추가 하는 방법이 있다.
//1.맨뒤에 추가
arrlist.add("Lions");
//콘솔값 : 0:Tigers 1:eagles 2:Bears 3:Lions
//2.중간에 추가도 : 2번지에 추가
arrlist.add(2, "Giants");
for(int i = 0; i<arrlist.size(); i++ ) {
System.out.println(i + ":" + arrlist.get(i));
}
//콘솔값 : 0:Tigers 1:eagles 2: Giants 3:Bears 4:Lions
System.out.println(); //개행
✨list <삭제>
//삭제 :지우고싶은 인덱스넘버를 알아야한다.
ArrayList<String> arrlist = new ArrayList<String>();
arrlist.remove(1); //1번지를 삭제
//콘솔값 : 0:Tigers 1: Giants 2:Bears 3:Lions
✨list <검색>
//검색
ArrayList<String> arrlist = new ArrayList<String>();
//제네릭만 빼면 일반 클래스와 동일하다.
int index = arrlist.indexOf("Giants"); //indexOf에 찾고싶은 문자열 입력
//index넘버로 리턴값 얻어올 수 있다.
System.out.println("데이터가 있습니다" + index);
//콘솔값 : 데이터가 있습니다 1 // index가 1: 1번지가 Giants라는뜻
//없는값을 검색하면 -1이 나온다.
int index = arrlist.indexOf("Twins"); //indexOf에 찾고싶은 문자열 입력
//index넘버로 리턴값 얻어올 수 있다.
System.out.println("데이터가 있습니다" + index);
//콘솔값 : 데이터가 있습니다 -1 // index가 -1: Twins데이터가 없다는뜻
for(int i = 0; i< arrlist.size(); i++) {
String s = arrlist.get(i); //arrlist에서 하나씩 꺼내오기
if("Giants".equals(s)) { //arrlist에서 꺼내온 s와 Giants를 비교하기
index = i;
break;
}
}
System.out.println("데이터가 있습니다" + index);
✨list <수정>
//수정
ArrayList<String> arrlist = new ArrayList<String>();
//수정할 데이터를 준비한다.
String updateStr = "Twins";
arrlist.set(2, updateStr); //2번지를 updateStr 즉, Twins로 바꾼다(수정한다)
for(int i = 0; i< arrlist.size(); i++) {
String s = arrlist.get(i); //arrlist에서 하나씩 꺼내오기
}
//콘솔값 : 0:Tigers 1: Giants 2:Twins 3:Lions
🎃List를 사용한 실전예제
package sample37;
import java.util.ArrayList;
import java.util.List;
public class MainClass {
public static void main(String[] args) {
// TODO Auto-generated method stub
//List는 interface
List<Human> list = new ArrayList<Human>();
//추가 : 3명
//일단 Human class의 객체(인스턴스)생성, 인스턴스 참조변수 hman 선언
//hman 변수는 이름이 "홍길동"이고 나이가 24인 새로운 Human 객체를 참조
Human hman = new Human("홍길동", 24); ////Human 객체를 생성
list.add(hman);
//Human 객체를 계속 생성할 수 있다. 대신 human변수만 쓴다.
hman = new Human("성춘향", 16); //Human 객체를 생성
list.add(hman); //객체를 list에 추가
//위 방법을 한줄로 하는방법. Human객체 생성 + list에 추가
list.add(new Human("일지매", 22));
//리스트의 길이값 출력하기
System.out.println(list.size()); //3 반환
//리스트의 모든 데이터 출력하기
for(int i = 0; i<list.size(); i++ ) {
Human h = list.get(i); // list에 들어있는게 하나씩 h에 담긴다.
System.out.println(h.toString());
}
/* //위의 코드를 foreach문으로 사용하기
for(Human h : list) { // list에 들어있는게 하나씩 h에 담긴다.
System.out.println(h.toString());
}
*/
/* 콘솔값 :
Human [name=홍길동, age=24]
Human [name=성춘향, age=16]
Human [name=일지매, age=22]
*/
//중간에 추가하기 : 위의 human 변수를 다시 쓴다.
hman = new Human("홍두께", 23); //Human객체 생성
list.add(1, hman); //list에 추가 : 1번지에 변수 hman을 추가
/* 콘솔값 :
Human [name=홍길동, age=24]
Human [name=홍두께, age=23]
Human [name=성춘향, age=16]
Human [name=일지매, age=22]
*/
//삭제 : 일지매 지우기 (인덱스 번호 모름)
String name = "일지매";
//인덱스 번호 찾기
int findindex = -1; // -1로 초기화 : 인덱스를 찾지 못했을 때로 초기화
for (int i = 0; i < list.size(); i++) {
Human h = list.get(i); //list에 들어있는게 하나씩 h에 담긴다.
if(name.equals(h.getName())) {
findindex = i; //찾았으면 loop그만돌고 i리턴하고 빠져나감.
break;
}
}
list.remove(findindex);
//리스트의 모든 데이터 출력하기
for(Human h : list) { // list에 들어있는게 하나씩 h에 담긴다.
System.out.println(h.toString());
/* 콘솔값 :
Human [name=홍길동, age=24]
Human [name=홍두께, age=23]
Human [name=성춘향, age=16]
*/
}
System.out.println(); //개행
//검색 -> 일지매 찾기 (위에서 이미 지워놨음)
name = "성춘향";
//인덱스 번호 찾기
findindex = -1; // -1로 초기화 : 인덱스를 찾지 못했을 때로 초기화
for (int i = 0; i < list.size(); i++) {
Human h = list.get(i); //list에 들어있는게 하나씩 h에 담긴다.
if(name.equals(h.getName())) {
findindex = i; //찾았으면 loop그만돌고 i리턴하고 빠져나감.
break;
}
}
if(findindex != -1) { // 성춘향을 찾았을때
// System.out.println(list.get(findindex)); // 객체 출력이니까 "성춘향, 16" 출력
System.out.println(list.get(findindex).toString());
//Human.java의 toString문장이 출력됨. "Human [name=" + name + ", age=" + age + "]";
// 콘솔값 : Human [name=성춘향, age=16]
}else {
System.out.println("데이터가 없습니다");
}
System.out.println(); //개행
//수정 -> 1명
Human updateHman = new Human("이몽룡", 17);
list.set(1, updateHman); //1번지 데이터를 이몽룡, 17로 수정하기
/* 콘솔값 :
Human [name=홍길동, age=24]
Human [name=이몽룡, age=23]
Human [name=성춘향, age=16]
*/
}}
🎉배열을 List로 수정해보기
[배열]
private HumanDto humanArr[] = new HumanDto[100];
-> list
private List<HumanDto> list = new ArrayList<HumanDto>();
[배열]
humanArr[count] = new HumanDto(name, age, phone, address, memo);
count++;
->list
Human dto = new HumanDto(name, age, phone, address, memo); -> 객체생성
list.add(dto); -> count가 늘려줄 필요 없이, list가 알아서 늘린다.
[배열]
humanArr[index].setPhone(phone);
humanArr[index].setAddress(address);
->list
이 코드만의 특성때문에 객체를 새로 생성하지 않고 get으로 먼저 얻어왔다.
//방법1.
list.get(index).setPhone(phone);
list.get(index).setAddress(address);
//방법2.
HumanDto h = list.get(index);
h.setAddress(address);
h.setPhone(phone);
[배열]
String split[] = datas[i].split(":");
humanArr[i] = new HumanDto( split[0]
integer.parseInt(split[1]),
split[2]
split[3]
split[4] );
->list
// h로 객체 생성
HumanDto h = new HumanDto( split[0]
integer.parseInt(split[1]),
split[2]
split[3]
split[4] );
list.add(h);
🎈 LinkedList (연결 목록)
- 노드(Node)가 연결된 구조를 가지는 목록입니다.
- 데이터를 삽입/삭제하는 경우에 유용합니다.
- 데이터의 검색 속도가 느리지만, 추가/삭제가 빠르다는 장점이 있습니다.
2) Map: 사전
🎈 HashMap (해시 맵)
- 키-값 쌍으로 데이터를 저장하는 목록입니다.
- 데이터를 검색하는 경우에 유용합니다.
- 내부적으로 해시 함수를 사용하여 데이터를 저장하므로, 검색 속도가 빠릅니다.
- 순서가 보장되지 않습니다.
🎈 TreeMap (트리 맵)
- 키-값 쌍으로 데이터를 저장하는 목록입니다.
- 데이터를 정렬하여 저장하므로, 정렬된 데이터를 검색하는 경우에 유용합니다.
- 내부적으로 트리 구조를 사용하여 데이터를 저장하므로, 검색 속도가 빠릅니다.
- 데이터의 순서가 보장됩니다.
'java' 카테고리의 다른 글
[JAVA/스프링] setAttribute getParameter / getParameter (0) | 2023.02.21 |
---|---|
[JAVA] foreach문 (0) | 2023.02.20 |
[java] 다형성 (0) | 2023.02.19 |
java) row_number()over, partition, substr, order by (0) | 2023.02.17 |
Java) String.format 을 이용한 문자열 형식 설정하기 (0) | 2023.02.16 |
댓글