본문 바로가기
프로그래밍 공부/Java

[lesson] Java 프로그래밍 언어 - Collection

by Luna_lua 2021. 8. 4.
반응형

알고리즘 : 어떤 문제가 발생 되었을 때 해결할 수 있는 절차 혹은 순서

자료구조
의미 없는 내용들을 하나의 정보로 만들기 위함
의미 없는 데이터를 하나의 정보로 만들어주는 알고리즘들의 집합,
수집한 자료를 저장하는 방법.

 

컬렉션 프레임워크 (Collection Framework)는 자료구조에 해당됩니다.

이 컬렉션 프레임워크는 엄청 중요한데 어느정도 중요하냐고 하시면... 조금 과장을 더해 추상메소드부터 지금까지 배운것들을 모두 이 프레임워크를 위해 배웠다고 할 정도 일까요?ㅎㅎㅎ

 

<List extends Collection>

리스트는 인터페이스이며, 주로 사용하는 종류는 3가지입니다.

1. Vector : 보안성 강화, 처리량 감소, 용량 관리 필요
2. LinkedList : FILO으로 인해 넣을때는 빨라도 뺄때는 느리다
3. ArrayList : 인덱스로 데이터를 관리한다.

 

배열과 ArrayList의 차이

배열은 길이에 제한을 두어야 할 때 자주 사용되고, ArrayList는 몇 개의 데이터가 들어올 지 알 수 없을때 사용합니다.

 

<ArrayList>

컬렉션 클래스 중 실무에서 가장 많이 사용되는 클래스이며, 배열의 특징인 인덱스를 이용하여 값을 저장하고 관리합니다.

// ArrayList 선언 방식
ArrayList<Integer> datas = new ArrayList<>();

/*
* <?> : wpspflr <E> 클래스 타입으로 들어가야 합니다.
* 타입을 뭘로 할 지 모를때나
* 객체로 사용할 때 타입을 지정하는 기법입니다.
* 지정할 타입에 제한을 들수 있습니다.
*/

		datas.add(10);
		datas.add(20);
		datas.add(90);
		datas.add(40);
		datas.add(50);
		datas.add(60);
		datas.add(70);
		datas.add(80);
		datas.add(30);


// collection
// add() - 리스트에 추가 (추가 방식이 여러개 있기 때문에 잘 확인해서 사용해야합니다.)
	datas.add(10); // 리스트 맨마지막에 10이라는 숫자 추가

// set() - 리스트에 있는 요소 수정 (수정 방식이 여러개 있기 때문에 잘 확인해서 사용해야합니다.)
	datas.set(3,9); // 인덱스가 3인곳을 숫자 9로 변경

// remove() - 리스트에 있는 요소 삭제 (삭제 방식이 여러개 있기 때문에 잘 확인해서 사용해야합니다.)
	datas.remove(3); //인덱스가 3인 곳을 삭제

★Point! ArrayList는 배열처럼 중간을 지우면 붙여주는 과정이나, 배열길이에 맞게 입력하고, 인덱스로 조절하는 기능들이 자동으로 되어있어 많은 자료들을 처리할때 배열보다 편합니다.

 

<Set - HashSet>

- 구현 클래스
집합에서는 중복되는 원소를 포함할 수 없다.
저장된 값들은 인덱스가 없기 때문에 순서가 없다.
값의 유무 검사에 특화되어 있는 자료구조이다.
해시 코드로 유무 검사가 진행되고 속도가 상대적으로 좋다.

- 순서 부여 : iterator() -> 순서가 없는 것에 순서를 만들어 주는 것
순서가 없는 객체에 순서를 부여하거나, 순서가 있어도 iterator 방식의 순서로
변경하고자 할 때 사용한다.
hasNext()를 통해 다음 값이 있는 지 검사하고, next()를 사용하여 값을 가져온다.

 

public static void main(String[] args) {
		HashSet<String> fruitSet = new HashSet<>();
		
        	// Set 데이터 넣기
		fruitSet.add("자두");
		fruitSet.add("수박");
		fruitSet.add("딸기");
		fruitSet.add("망고");
		fruitSet.add("무화가");
		fruitSet.add("납작복숭아");
	
    		// toString 재정의로 안에 들어있는 데이터가 출력
		System.out.println(fruitSet);
        
        	// 데이터가 6개 들어있으므로 size()는 6
		System.out.println(fruitSet.size());
		fruitSet.add("납작복숭아");
		
		System.out.println(fruitSet);
        	// 납작복숭아는 이미 들어있고, 중복을 허용하지 않는 Set이므로 사이즈는 계속 6
		System.out.println(fruitSet.size());
		
        	// 중복데이터 출력
		if(fruitSet.contains("납작복숭아")) {
			System.out.println("중복데이터");
		}
		
        	// Iterator로 Set에 순서를 넣어줌
		Iterator<String> iter =fruitSet.iterator();
	
    		// 데이터가 있는지 확인
		while(iter.hasNext()) {
        	// 데이터를 하나꺼내서 출력
			System.out.println(iter.next());
		}
	}

 

<Map - hashMap>

 - 서버 간 데이터 교환이 주 목적이 되는 기능

 - Key와 Value 한 쌍으로 저장되며, 검색의 목적을 가지고 있다. 

 - Value 수정 가능, Key 수정 불가능
   * Key로 Value를 검색한다.
   * Key는 순서가 없고(Set), Value는 순서가 있다(Collection).
   * Key가 중복되면 최근 넣었던 Value값으로 수정 된다.
   * 한 쌍인 Entry는 순서가 없다.
   * Value는 중복이 가능하다. Key는 중복이 불가능하다.
   * HashTable을 통하여 검색된다.

public static void main(String[] args) {
			// HashMap 선언
		HashMap<String, Object> userMap = new HashMap<>();
			// key, value의 쌍으로 데이터 입력
        	userMap.put("id", "nameline");
		userMap.put("pw", "1234");
		userMap.put("name", "닉네음");
		userMap.put("age", 20);
		
       		// 들어있는 세트의 양으로 size()는 4
		System.out.println(userMap.size());
		
        	// 키값으로 value를 가져옴
		System.out.println(userMap.get("id"));
        	// toString 재정의로 안에 들어있는 내용들을 출력
		System.out.println(userMap);
			// set형식인 key값을 iterator를 사용하여 순서 생성
		Iterator<Entry<String, Object>> iter =userMap.entrySet().iterator();
		
        	// set과 동일하게 값을 가져와 key와 value를 출력
		while(iter.hasNext()) {
			Entry<String, Object> entry = iter.next();
			System.out.println(entry.getKey() + " : " + entry.getValue());
		}
	}

 

+) JSON

   * Key와 Value, 한 쌍으로 작성한다.
   * Map 자료구조와 비슷하다.
   * {}안에 데이터를 한 쌍씩 저장한다.
   * 데이터 교환 형식이다.
   * 외부 API를 사용해야 한다(json-simple)

반응형