자바

collection

chantleman 2024. 7. 26. 11:27

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;

    }

 

 

 

 

2024.07.26 - [자바] - hash

 

hash

HashSet- key로 이루어짐- key값은 중복 허용하지 않고 순서가 보장되지 않음- set 타입의 대표 컬렉션  주요 메소드.add(key)          : 값 추가.remove(key)    : 값 삭제.contains(key)   : 포함 여부.iterato

chantleman.tistory.com

 

 

 

 

 

'자바' 카테고리의 다른 글

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