□ 프레임 워크 -> 뼈대, 틀
□ 종류 : 리스트(list), 집합(set), 맵(map)
1. 리스트 - ArrayList
■ ArrayList : 배열의 값을 마음대로 넣었다가 뺼 수 있음
- new를 사용해도 주소값이 출력되지 않는데 이는 이미 toString()이 오버라이딩 되어있기에 값이 출력되는 것이다.
-
□ ArrayList 장점
1) 개발자가 개발에 활용하기 용이
2) 프로그램 동작 중에서도 메모리(크기)를 늘리거나 줄일 수 있다.
(= 배열의 3요소 중 하나인 크기를 몰라도 된다. (크기 미정 ok))
3) 자료형과 무관하게 넣을 수 있음. 배열 3요소 중 관련있는 것만 넣는다는 규칙 1가지만 지키면 리스트에 넣을 수 있다.
(다만 웹개발에서는 자료형을 섞어쓰지 않고 "제네릭"을 이용한다.)
□ ArrayList 메서드
1) add() : 값 넣기
- ex. add(0,11); -> 0번 인덱스에 11을 넣어줌
2) clear() : 배열을 비워준다.
3) contains() : 해당 요소가 있는지 확인해준다. true,false 반환
4) get() : 인덱스에 해당하는 값을 가져온다.
5) isEmpty() : 배열이 비어있는지 확인
6) size() : 전체크기를 물어봄
7) set() : 설정
- set(0,123); -> 0번 인덱스를 123으로 바꿔줌
8) remove() : 해당 인덱스 제거
■ 제네릭 : 저장할 데이터의 타입을 '강제'
ArrayList<Integer> al2 = new ArrayList<>();
- 제네릭 자리에는 클래스, 자료형 모두 가능
- 자료형이 섞이면 효율성이 떨어진다.
+ ) 제네릭 안에 <> int가 아닌 Integer(클래스)를 넣는 이유 -> 컬렉션 프레임워크에서는 자바에서 원래 사용하던 자료형을 넣어주야 한다.
[iterator 복사체] // c 포인터 원리로 작동
Iterator<Integer> itr = al.iterator();
while(itr.hasNext()) {
// itr에게 다음 데이터가 있는지 물어봄
System.out.println(itr.next());
} // hasNext()는 복사체만 가진다??
import java.util.ArrayList;
import java.util.Iterator;
public class Test01 {
// iterator 복사체
public static void main(String[] args) {
ArrayList<Integer> al = new ArrayList<>();
al.add(10);
al.add(20);
al.add(30);
al.add(40);
al.add(50);
System.out.println(al);
Iterator<Integer> itr = al.iterator();
while(itr.hasNext()) {
// itr에게 다음 데이터가 있는지 물어봄
System.out.println(itr.next());
} // 포인터(↑)가 이동하는 원리
for(int v : al) {
System.out.println(v);
}
}
■ 형 변환을 클래스에서 하면 캐스팅.
- 형 변환(캐스팅), 다운 캐스팅(강제 형변환)
package class05;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.Scanner;
class Circle {
private String name;
private int radius;
private double area;
static final double PI=3.14;
Circle(String name,int radius){
this.name=name;
this.radius=radius;
this.area=this.radius*this.radius*Circle.PI;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getRadius() {
return radius;
}
public void setRadius(int radius) {
this.radius = radius;
}
public double getArea() {
return area;
}
public void setArea(double area) {
this.area = area;
}
@Override
public boolean equals(Object obj) {
if(!(obj instanceof Circle)) {
return false;
}
Circle circle=(Circle)obj; // 형변환(캐스팅), 다운캐스팅(강제형변환)
return this.name.equals(circle.name);
}
@Override
public String toString() {
return "Circle [name=" + name + ", radius=" + radius + ", area=" + area + "]";
}
}
public class Test01_T {
public static void main(String[] args) {
ArrayList<Circle> al=new ArrayList<>();
al.add(new Circle("도넛",1));
al.add(new Circle("피자",10));
al.add(new Circle("도넛",10)); // 무명 객체
double max=al.get(0).getArea();
int maxIndex=0;
for(int i=1;i<al.size();i++) {
if(max <= al.get(i).getArea()) {
max=al.get(i).getArea();
maxIndex=i;
}
}
System.out.println(al.get(maxIndex));
Scanner sc=new Scanner(System.in);
System.out.print("이름 입력 >> ");
String name=sc.next();
Circle circle = new Circle("도넛", 2);
int cnt=0;
for(Circle v:al) {
if(v.equals(circle)) { // 비교대상은 "원 객체"!!!!!
System.out.println(v);
cnt++;
}
}
System.out.println("cnt = "+cnt);
}
}
■ instanceof는 equals 매커니즘에 주로 사용한다. (캐스팅하려고 할 때)
=> 객체 구분
<예시>
for(int a = 0; a < 2; a++) {
for(int i = 0; i< datas.length; i++) {
if(datas[i].getName().equals("피카츄")) {
// 사용자가 속성을 바꿀 수 있으므로 객체 식별은 속성으로 할 수 없다.
if(datas[i] instanceof Pika) { // instanceof 연산자
datas[i].hello(); // 이 객체가 이 클래스의 인스턴스니?
}
}
}
}
2. Set (집합)
- 추상 클래스로, 객체화가 불가능함.
□ 집합의 특징
1. 중복 허용 X
2. 인덱스 개념이 없어서 순서라도 개념은 X (중복없는 랜덤수 할 때 굳굳)
3. 제네릭 넣을 수 있음 (집합에서는 조건을 넣어도 오름차순/내림차순 불가능하다)
Set set = new Set();
// 에러 발생 이유 : 추상 클래스라서
// 포켓몬 p = new 피카츄(); 앞에 있는 애가 추상 클래스라고 생각
3. Map (맵)
- 추상 클래스.
- "HashMap" : Key와 Value가 한 쌍. 인덱스가 없는 대신 key값으로 검색한다.
- key 값은 중복되면 안되며, value는 괜찮다.
Map<Integer,String> map = new HashMap<>();
// 키값은 integer, value값이 string
// 키값은 중복 X (PK / DATA) == > 유일한 값(PK, 주요 키)
- add() 없고 put(key, value) 있음. get도 있는데 키값으로 조회가능. replace(키값, 변경할값) 도 있고..
키값은 replace로 바꿀 수 없다 (지울 수는 있음)
package class06;
import java.util.HashMap;
import java.util.Map;
public class Test03 {
// 맵 Map
public static void main(String[] args) {
Map<Integer,String> map = new HashMap<>();
// 키값은 integer, value값이 string
// 키값은 중복 X (PK / DATA)
map.put(101, "사과");
map.put(102, "바나나");
map.put(103, "키위");
System.out.println(map.get(101));
System.out.println(map.replace(101,"딸기"));
System.out.println(map);
}
}'IT > JAVA' 카테고리의 다른 글
| Java Section 15 : 기본 API 클래스 (1) | 2025.01.22 |
|---|---|
| Java Section 14 : 예외처리 (1) | 2025.01.21 |
| [DAY 14] 예외처리 (0) | 2025.01.21 |
| Java Section 13 : 내부 클래스 (0) | 2025.01.20 |
| Java Section 12 : 추상 클래스와 인터페이스 (1) | 2025.01.19 |