[JAVA] - Dynamic Data Structure

Shim31·2023년 6월 6일

Java

목록 보기
5/5

데이터의 크기를 동적으로 조정할 수 있는 데이터 구조

ArrayList, HashSet, HashMap, LinkedList



ArrayList<type>


  • 크기를 동적으로 조정할 수 있는 배열 기반의 리스트
    • ArrayList의 크기를 초과하여 원소를 추가하면 자동으로 크기가 조정됨
  • 원소의 순서가 중요
    • 인덱스를 사용해 해당 위치에 있는 원소에 접근 가능
  • 원소의 중복을 허용


ArrayList Method

.add( element ) → 원소 추가

.add(index, element) → 해당 위치에 원소 추가, (other ele shift)

.get(index) → 해당 위치에 해당하는 원소 얻음

.set(index, element) → 해당 위치에 해당하는 원소 변경

.remove(index) → 해당 위치의 원소 삭제, (other ele shift)

.remove( element ) → 제일 처음 나온 원소 삭제, (other ele shift)

.clear() → 모든 원소 삭제

.size() → 리스트에 있는 원소 개수 반환

.contains( element ) → boolean으로 원소 있는 지 없는지 확인

.indexOf( element ) → 처음 나타나는 ele의 인덱스 리턴

.isEmpty() → 빈 건지 아닌지 확인 (비었을 때 true)

예시 코드

import java.util.ArrayList; //import 해주고 

public class ArrayListExample {
    public static void main(String[] args) {
        ArrayList<String> fruits = new ArrayList<>();
				//*<자료형>*
				ArrayList<String> lst = new ArrayList<>(20);//크기가 20

        fruits.add("Apple"); //add를 사용하여 추가
        fruits.add("Banana");
        fruits.add("Orange");
				fruits.set(1, "HI"); //"Banana"->"HI"로 바뀜

        System.out.println(fruits);  // 출력: [Apple, Banana, Orange]

				for(int i=0;i<3;i++)
						System.out.println(fruits.get(i)); //.get으로 값 얻어와
		    
				for(String e : fruit){
						System.out.println(e);}		
		}
}



HashSet<type>


  • 순서가 없는 고유한 원소들의 집합
    • 인덱스로 접근 불가
  • 중복된 원소 허용 X
  • 빠른 데이터 조회를 위해 해시 함수를 사용하므로, 데이터의 크기가 클수록 성능이 향상

코드 예시

import java.util.HashSet;

public class HashSetExample {
    public static void main(String[] args) {
        HashSet<String> colors = new HashSet<>();

        colors.add("Red");
        colors.add("Green");
        colors.add("Blue");
        colors.add("Red");  // 중복된 원소는 추가되지 않음
														//무시됨
//.contains("Blue")로 해당 원소가 있는지 확인 가능

        System.out.println(colors);  // 출력: [Red, Green, Blue]

				for(Object obj : color.toArray()){
						String num = (String) obj
						System.out.println(num);
//Integer 객체면 num.intValue 해줘야 int 값 출력됨
				}
    }
}



HashMap<type>


  • 키-값 쌍으로 이루어진 데이터의 집합

    • 키와 값을 모두 객체로 저장됨
    • 키는 중복 불가

  • 순서가 없음

    • 키를 사용하여 직접 원소에 접근 불가
    • 키를 통해 값에 접근

  • 해시 함수를 사용하므로, 빠른 데이터 검색이 가능

Map 인터페이스에 있는 메서드

.put( key, val ) → 추가

.get( key ) → 얻음

.clear() → 다 삭제

.remove( key ) → key에 맞는 val 삭제

.containsKey( key ) → 해당 key가 존재하면 true 리턴

.containsValue( value ) → 해당 val이 존재하면 true 리턴

.isEmpty()

.size()

.KeySet() → 모든 키가 포함된 set 리턴

.values() → 모든 val을 collection으로 리턴

코드 예시

import java.util.HashMap;

public class HashMapExample {
    public static void main(String[] args) {
        HashMap<String, Integer> ages = new HashMap<>();

        ages.put("John", 25);
        ages.put("Emily", 30);
        ages.put("Michael", 35);

        System.out.println(ages.get("John"));  // 출력: 25

				for(String name : ages.KeySet()){
						Integer age = ages.get(name); //오브젝트 타입으로 해야
						System.out.println(name+" : "+ age.intValue);
				}

				ages.remove("Jon");//("John", 25) 삭제됨
    }
}



LinkedList<type>


  • 노드로 연결된 리스트 구조

    • 각 노드는 이전 노드와 다음 노드의 참조를 유지함
    • 데이터의 추가 삭제가 상대적으로 빠름

  • 순서가 중요

    • 인덱스로 접근은 불가
      • 순차적인 데이터 접근 빠름
    • 리스트의 중간 원소를 추가, 삭제에 유용

  • 중복 원소 허용

Interator

→ linked list의 collection

Interator Interface

.hasNext → 다음 노드가 있으면 true

.next → 다음 element 리턴

.remove() → 가장 최근의 노드 삭제?

코드 예시

import java.util.LinkedList;

public class LinkedListExample {
    public static void main(String[] args) {
        LinkedList<String> names = new LinkedList<>();

        names.add("Alice");
        names.add("Bob");
        names.add("Charlie");

        System.out.println(names.get(1));  // 출력: Bob

				//Interator로 접근하기
				Interator<String> listName = names.listInterator();
				while(listName.hasNext){
						System.out.println(listName.next());
				}

    }
}


Iterator(반복자)

컬렉션(Collection) 객체의 요소를 순회하면서 접근하기 위한 인터페이스

  • hasNext(): 다음 요소가 존재하는지 여부를 확인. 만약 다음 요소가 있을 경우 true를 반환하고, 없을 경우 false를 반환.
  • next(): 다음 요소를 반환. hasNext() 메소드를 호출하여 다음 요소가 있는지 확인한 후에 호출.
  • remove(): 현재 요소를 삭제. 이 메소드는 선택적인 기능으로, 모든 컬렉션에서 지원되지 않을 수 있음.
ArrayList<String> list = new ArrayList<>();
list.add("Apple");
list.add("Banana");
list.add("Orange");

Iterator<String> iterator = list.iterator();
while (iterator.hasNext()) {
    String element = iterator.next();
    System.out.println(element);
}

0개의 댓글