1. List
- 특징: 순서가 있는 컬렉션
- 중복 허용: 같은 값이 여러 번 들어갈 수 있음
- 예제: [1, 2, 3, 2, 4]
- 주요 연산: 인덱스를 사용하여 요소에 접근
(예를 들어, list[0]은 첫 번째 요소를 의미) - 사용 예: 순서가 중요한 데이터를 저장할 때 사용
2. Set
- 특징: 순서가 없는 컬렉션(키로만 이루어짐)
- 중복 허용: 같은 값이 들어갈 수 없음. 즉, 각 요소는 유일해야 함
- 예제: {1, 2, 3, 4}
- 주요 연산: 주로 집합 연산(교집합, 합집합, 차집합 등)을 수행하는 데 유용
- 사용 예: 중복된 값을 제거하거나, 특정 값의 존재 여부를 빠르게 확인할 때 사용
3. Map (또는 Dictionary)
- 특징: 키-값 쌍으로 이루어진 컬렉션
- 중복 허용: 같은 키를 사용할 수 없지만, 같은 값은 여러 번 들어갈 수 있음
- 예제: {'a': 1, 'b': 2, 'c': 3}
- 주요 연산: 키를 사용하여 값에 빠르게 접근할 수 있음
(예를 들어, map['a']는 값 1을 의미) - 사용 예: 데이터를 키를 통해 빠르게 검색하거나 연관된 정보를 저장할 때 사용
주로 배열보다 컬렉션을 사용합니다.
그 이유는
배열은 처음에 선언할 때 크기를 미리 지정해줘야하는데, 정적이라 크기 조절이 불편합니다.
반면에 ArrayList는 크기를 동적으로 늘려줄 수 있습니다. (자동확장)
속도 측면에서는 배열이 더 빠릅니다. (ArrayList는 자동확장기능 때문에 속도가 느림)
하지만 처음에 ArrayList 크기를 크게 해주면 자동확장을 안해도 되기때문에 결국 배열과 속도가 같습니다.
List
사이즈 옵션을 넣어 속도 이슈 해결
public CustomArrayList() {
strList = new String[10];
}
public CustomArrayList(int size)
{
strList = new String[size];
this.size= size;
}
자동 확장(자동 확장하면 배열 크기 지정 안해도됨)
public void add(String str) {
if(size == strList.length) {
String[] tempList = new String[size+10];
System.arraycopy(strList,0,tempList,0,size);
strList = tempList;
}
strList[size++] = str;
}
arraycopy(복사할 대상(원본), 원본에서 읽어올 위치, 붙여넣을 대상, 복사본에서 쓸 시작 위치, 원본에서 복사본까지 얼만큼 읽어올지)
사이즈가 10인데 9까지밖에 없으니까 자동확장해야됨
public String remove(int num) {
String result = get(num);
String[] tempList = new String[strList.length];
System.arraycopy(strList, 0, tempList, 0, num);
System.arraycopy(strList, num+1, tempList, num, strList.length-num-1);
strList = tempList;
size--;
return result;
}
1 2 3 4 5에서 3을 삭제시켰을 때 1 2 4 5가 되는 것처럼
뒤에 있는 기존값들을 한 칸씩 땡겨오는 작업
<회원 정보 crud 예제>
<hide/>
public class MemberList {
public static void main(String[] args) {
MemberList obj = new MemberList();
obj.process();
}
List<Member> list = new ArrayList();
public void process() {
while(true)
{
System.out.println("1. 회원가입");
System.out.println("2. 회원조회");
System.out.println("3. 회원변경");
System.out.println("4. 회원탈퇴");
int sel = ScanUtil.nextInt("선택: ");
if(sel ==1) addMember();
if(sel==2) printMember();
if(sel==3) changeMember();
if(sel==4) deleteMember();
}
}
public void addMember() {
Member member = new Member();
member.setName(ScanUtil.nextLine("이름: "));
member.setAge(ScanUtil.nextInt("나이: "));
member.setAddr(ScanUtil.nextLine("주소: "));
list.add(member);
}
public void printMember() {
for(Member mem : list) System.out.println(mem);
}
private void changeMember() {
printMember();
int num = ScanUtil.nextInt("수정할 회원 번호(0부터): ");
Member mem = list.get(num);
mem.setName(ScanUtil.nextLine("이름: "));
mem.setAge(ScanUtil.nextInt("나이: "));
mem.setAddr(ScanUtil.nextLine("주소: "));
}
private void deleteMember() {
printMember();
int num = ScanUtil.nextInt("삭제할 회원 번호(0부터): ");
Member mem = list.remove(num);
System.out.println(mem.getName()+"님이 탈퇴하셨습니다.");
}
}
@Data
class Member{
private String name;
private int age;
private String addr;
}
'자바' 카테고리의 다른 글
mvc (0) | 2024.07.30 |
---|---|
eclispe 상위 버전 (0) | 2024.07.29 |
hash (0) | 2024.07.26 |
date, calendar (0) | 2024.07.25 |
try-catch, throw Exception (2) | 2024.07.24 |