[JAVA] array, List, Set, Map

mango·2023년 3월 19일
0

JAVA

목록 보기
2/10
post-thumbnail

🐬 Array

배열. 배열은 선언할 때부터 크기가 정해진다. 추가로 늘리지는 못한다.

int[] arr = new int[크기]

System.out.println(Arrays.toString(arr)); //arr for문 없이 값 출력

🐬 List

리스트는 배열의 가장 큰 차이점은 배열은 크기를 10개로 정했다면 10개 이상의 값을 담을 수 없지만, 리스트는 크기가 정해져 있지 않아 원하는 만큼의 값을 담을 수 있다.

ArrayList

List의 자료형 중 가장 간단한 형태의 자료형

ArrayList 객체명 = new ArrayList();

ArrayList<Integer> arrList = new ArrayList<>();
ArrayList<Integer> arrList2 = new ArrayList<>(5);

1. Array -> ArrayList 
- int 가능
ArrayList<Integer> al = new ArrayList<>();
int [] arr = {0};

for(i = 0; i < arr.length(), i++){
al.add(arr[i]); 
}

- Integer, String 가능
String [] arr = {"a", "b", "c"};
List<String> al = new ArrayList<>(Arrays.asList(arr));
-> String, IntegerReference라서 가능, int 는 primitive라서 불가능 

2. add
al.add(3);
al.add(3, "Lee");

3. ArrayList 의 길이
al.size() 

. Iterator
Iterator it = al.iterator();
while(it.hasNext()){
어쩌구저쩌구
}
  
  
[출처] [Java] 14일차 - Generic, List, Set, Map|작성자 윤슬
  • add( ): 객체(데이터) 추가
  • get(int idx): idx 위치에 있는 객체를 리턴
  • size( ): 요소의 갯수를 반환하는 메서드 반복문을 돌릴 때 사용함
  • contains( ): 리스트 안에 해당 항목이 있는지를 판별하여 그 결과를 boolean으로 리턴
  • clear(): 객체의 모든 요소 제거
  • remove()
  • remove(객체): 해당되는 항목을 삭제하고 삭제한 결과(true, false)를 리턴
  • remove(인덱스): 해당 인덱스의 항목을 삭제하고 삭제된 항목을 리턴
    -> remove 했을 때 index 모두 달라짐
    -> 원소가 5개 있었는데, remove를 4번 하면 나머지 1개의 index 는 무조건 0
ArrayList<Integer> myAL = new ArrayList<Integer>();
  
arrList.remove(3);
- int 형이 파라미터로 들어왔으므로 index 3의 값 삭제  
  
arrList.remove(Integer.valueOf(3));
- Integer 형이 파라미터로 들어왔으므로 값 30부터 찾아서 삭제
  

🐬 Set

Set은 List와 다르게 객체(데이터)를 중복해서 저장할 수 없다. 또한 저장된 데이터를 인덱스로 관리하지 않기 때문에 저장 순서가 보장되지 않는다.

HashSet

Set컬렉션을 구현하는 대표적인 클래스

Set 객체명 = new HashSet();

  • add(): 객체(데이터) 추가
  • iterator(): 검색을 위한 반복자 생성
  • size(): 저장된 객체의 수 리턴
  • remove(): 해당 객체 삭제
  • clear(): 저장된 모든 객체 삭제

Set에 들어 있는 값 가져오는 방법 2가지

  • iterator 이용
  • collections 이용

[출처][Java] 14일차 - Generic, List, Set, Map|작성자 윤슬


🐬 Map

Map 인터페이스는 Collection 인터페이스와는 다른 저장 방식을 가진다. Map 인터페이스를 구현한 Map 컬렉션 클래스들은 키와 값을 하나의 쌍으로 저장하는 방식(Key - Value)방식을 사용한다.

Map은 리스트나 배열처럼 순차적으로 해당 요소 값을 구하지 않고 Key를 통해 Value를 얻는다.

Value는 중복을 허용 하지만 Key는 중복을 허용하지 않는다.

만약 Key가 중복되면, 나중에 들어간 Value로 값이 수정된다.

HashMap

자바의 Map중 가장 간단한 형태의 맵

Map<Key, Value> 객체명 = new HashMap<Key, Value>();

선언			HashMap<String, Integer> hm = new HashMap<String, Integer>();

아이템 넣기	hm.put("merong", 150);
  
값 찾기		value = hm.get("merong");
  
아이템 삭제	hm.remove("merong");
  
아이템 갯수	int counts = hm.size();

전체삭제		hm.clear();
  
복제			newHM = hm.clone();
  
키가 있는지	yn = hm.containsKey("merong");
  
값이 있는지	yn = hm.containsValue(150);
  
비었는지		yn = hm.isEmpty();

전체 set		Set set = hm.entrySet();
				System.out.println("Set 데이터는 : " + set);
                "set values : [merong=150,babo=3, ...]"
  
키 set		String keys = hm.keySet(); //데이터형은 맞게 바꿔줘야함
				"key values : [merong,babo, ...]"
  
값 collection	Integer c = hm.values(); //데이터형은 맞게 바꿔줘야함
				"values values : [150,3, ...]"

🐬 예제코드

import java.util.*;
public class Main {
	public static void main(String[] args) {
		System.out.println("-------- array --------");
		// 자료 구조 -> 배열
		int[] arr = new int[3]; // 배열을 만들때 크기가 3으로 고정된다(정적배열)
		arr[0] = 7;
		arr[1] = 1;
		arr[2] = 3;
		for(int i : arr) {
			System.out.println(i);
		}
		// arr[3] = 9; // ArrayIndexOutOfBoundsException 발생
		
		// 배열 사용 X -> 배열대신 Collections(기본API) 사용 -> 3가지의 자료구조(list/set/map)
		
		System.out.println("-------- list --------");
		// 1) list(동적배열)
		ArrayList<Integer> list = new ArrayList<Integer>(3);
		// list.set(0, 7);
		// list.set(1, 1);
		// list.set(2, 3);
		// list.set(3, 9); // 4개째 예외발생? -> IndexOutOfBoundsException 발생
		list.add(7);
		list.add(1);
		list.add(3);
		list.add(9); // 자동으로 list의 크기가 변경된다
		System.out.println(list.get(3)); // 9
		
		for(int i : list) {
			System.out.println(i);
		}
		
		System.out.println("-------- set --------");
		HashSet<Integer> set = new HashSet<Integer>();
		set.add(3);
		set.add(7);
		set.add(3); // 중복된 값은 입력되지 않는다
		// System.out.println(set.get(1)); // error -> index가 없다
		System.out.println(set);
		
		System.out.println("-------- map --------");
		HashMap<String, Integer> map = new HashMap<String, Integer>();
		map.put("최도희",3);
		map.put("최설",7);
		map.put("최도희",10); // 동일한 키를 사용하면 덮어쓰기
		System.out.println(map.get("최도희"));
		System.out.println(map.get("최설"));
		
		System.out.println("-------- 응용 list<map> --------");
		ArrayList<HashMap<String, Object>> studentList = new ArrayList<HashMap<String, Object>>();
		
		HashMap<String, Object> s1 = new HashMap<String, Object>();
		s1.put("이름", "최도희");
		s1.put("나이", 21);
		studentList.add(s1);
		
		HashMap<String, Object> s2 = new HashMap<String, Object>();
		s2.put("이름", "최설");
		s2.put("나이", 22);
		studentList.add(s2);
		
		for(HashMap<String, Object> m : studentList) {
			System.out.print((String)m.get("이름"));
			System.out.print((Integer)m.get("나이"));
			System.out.println("");
		}
	}
}



  • 결과

    -------- array --------
    7
    1
    3
    -------- list --------
    9
    7
    1
    3
    9
    -------- set --------
    [3, 7]
    -------- map --------
    10
    7
    -------- 응용 list --------
    최도희21
    최설22

profile
앎의 즐거움을 아는 나는 mango ♪

0개의 댓글