새소식

TIL

[TIL] 240423 <자바> 연산자,조건문,반복문,배열,컬렉션

  • -

 

[3. 연산자]

 

연산자 우선순위

산술 > 비교 > 논리 > 대입
 
 

비트 연산

컴퓨터의 가장 작은 단위가 Bit이기 때문에 연산 중에서 Bit 연산이 가장 빠름

  • << : 자릿수를 왼쪽으로 옮기는 횟수만큼 2의 배수로 곱셈 연산과 동일
  • >> : 자릿수를 오른쪽으로 옮기는 횟수만큼 2의 배수로 나눗셈 연산과 동일

 

 


[4. 조건문, 반복문]

 

if문과 switch문의 차이점

1. if문 복합 조건(괄호 안에 조건 여러개 지정가능)을 지원 / switch문피연산자 한개에 대한 조건만 지원
2. if문은 상대적으로 코드 중복이 많음 / switch문은 코드 중복이 적음
 
 
 


[5. 배열]

  • 참조형 변수들처럼 new 명령을 통해서 생성하며 대괄호 안에 크기를 지정해줌
    (참조형 변수이기 때문에 실제 값을 담지 않고 실제 값의 주소값 저장함)

    ex) int array[] = new int[8];


  • 초기값은 int는 0, boolean은 false, String은 null 값으로 초기화됨

 

  • <배열 초기화 방법>
    1. 중괄호 {} 사용
        ex) int[] intArray = {1, 2, 3, 4, 5}, String[] stringArray = {"a", "b", "c", "d"};
    2. for문 사용
    3. Arrays.fill 메소드 사용
        ex) Arrays.fill(intArray, 1);  //배열의 모든 값을 1로 초기화

 

  • <복사>
    - 얕은 복사주소값만 복사되고 실제 값은 1개로 유지되어서 요소값 변경 시 같이 변경됨
       ex) int[] a = { 1, 2, 3, 4 };  int[] b = a;   // 얕은 복사

    - 깊은 복사 똑같은 실제 값을 가지는 배열 만들고 싶다면 깊은복사해야함
       (1) for문 사용
       (2) .clone() 사용 (단, 2차원이상 배열에서는 얕은 복사로 동작!)
       (3) Arrays.copyOf(복사할배열, 배열.length)





 

String  배열

// 선언 후 하나씩 초기화
String[] stringArray = new String[3];
stringArray[0] = "val1";
stringArray[1] = "val2";
stringArray[2] = "val3";

// 선언과 동시에 초기화
String[] stringArray1 = new String[]{"val1", "val2", "val3"};
String[] stringArray2 = {"val1", "val2", "val3"};

 
- char는 기본형 변수(소문자로 시작), String은 참조형 변수(대문자로 시작)이며 실제값의 주소값 저장함
- String을 더 많이 쓰는 이유 : 참조형 변수가 더 많은 기능 보유!

메소드 응답값 타입 기능
.length() int 문자열 길이 반환
.charAt(int index) char 해당 인덱스의 문자 반환
.substring(int from, int to) String 문자열에서 해당 범위(from~to)에 있는 문자열을 반환 (to는 불포함)
.equals(String str) boolean 문자열 내용이 같으면 결과는 true, 다르면 false 반환
.toCharArray() char[] String → char[] 변환
new String(char[] charArr) String char[]  String 변환

 
 


 

다차원  배열

 

가변 배열

행마다 다른 길이의 배열 저장 가능

// 선언 및 초기화
int[][] array = new int[3][];
// 배열 원소마다 각기다른 크기로 지정 가능
array[0] = new int[2];
array[1] = new int[4];
array[2] = new int[1];

// 중괄호 초기화할때도 원소배열들의 크기를 각기 다르게 생성 가능합니다.
int[][] array2 = {
    {10, 20},
    {10, 20, 30, 40},
    {10}

};

//.length 사용
for (int i = 0; i < array2.length; i++) { // 1차원 길이
	for (int j = 0; j < array2[i].length; j++) { // 2차원 길이
		System.out.println(array2[i][j]); // 2중 반복문으로 i, j 인덱스 순회
	}
}

 
 
 
 


[6. 컬렉션]

- 배열보다 다수의 "참조형" 데이터를 더 쉽고 효과적으로 처리할 수 있는 기능 많이 가짐
   : 크기 자동조정 / 추가 / 수정 / 삭제 / 반복 / 순회 / 필터 / 포함 확인 등
- 기본형 변수가 아닌 참조형 변수를 저장
- 컬렉션 종류 : List, Set, Queue, Map
 
 


List

순서가 있는 데이터의 집합 (데이터 중복허용) - 배열과 비슷
 

1. ArrayList

Array는 메모리에 연속된 공간을 요청한 사이즈만큼 받아서 실제 값을 저장하는 기본형 변수로 저장하는 정적배열,
ArrayList는 생성시점에 작은 연속된 공간을 요청해서 참조형 변수들을 담아놓고, 값이 추가될 때 더 큰 공간이 필요하면 받아서 저장하는 동적 배열이라 크기를 지정하지 않아도 됨.

  • add(값) :추가,   set(순번,값) :값 수정,    remove(순번) :삭제 ,    toString() :[전체값출력] ,    clear() :전체값 삭제
import java.util.ArrayList;

public class Main {

	public static void main(String[] args) {
		ArrayList<Integer> intList = new ArrayList<Integer>(); // 선언 및 생성
		
		intList.add(1);  //값 추가
		intList.add(2);
		intList.add(3);
		
		System.out.println(intList.get(0)); // 1 출력
		System.out.println(intList.get(1)); // 2 출력
		System.out.println(intList.get(2)); // 3 출력
        
        //intList.toString() : 전체 값을 대괄호로 묶어서 출력
		System.out.println(intList.toString()); // [1,2,3] 출력
		
        
        //intList.set(수정할 순번, 수정할 값)
		intList.set(1, 10); // 1번순번의 값을 10으로 수정
		System.out.println(intList.get(1)); // 10 출력
		
		
		intList.remove(1); // 1번순번의 값 삭제
		System.out.println(intList.toString()); // [1,3] 출력
		
		intList.clear(); // 전체 값 삭제
		System.out.println(intList.toString()); // [] 출력 (비어있음)
	}
}

 
 

2. LinkedList

메모리에 남는 공간을 요청해서 여기저기 나누어서 실제값을 담아놓고, 실제값이 있는 주소값으로 목록을 구성하고 저장

  • 값을 나누어 담기 때문에 모든 값을 조회하는 속도가 느리지만, 값을 중간에 추가/삭제 시 속도 빠름
  • add(값) :추가,  add(순번,값) : 중간에 추가,    set(순번,값) :값 수정,    remove(순번) :삭제 ,    
    toString() :[전체값출력] ,    clear() :전체값 삭제
import java.util.LinkedList;

public class Main {

	public static void main(String[] args) {
		LinkedList<Integer> linkedList = new LinkedList<>(); // 선언 및 생성

		linkedList.add(1);  // 값 추가
		linkedList.add(2);
		linkedList.add(3);

		System.out.println(linkedList.get(0)); // 1 출력
		System.out.println(linkedList.get(1)); // 2 출력
		System.out.println(linkedList.get(2)); // 3 출력
		System.out.println(linkedList.toString()); // [1,2,3] 출력 (속도 느림)

		// ⭐ 값 중간에 추가 가능 ⭐ 
		linkedList.add(2, 4); // 2번 순번에 4 값을 추가 (속도 빠름)
		System.out.println(linkedList); // [1,2,4,3] 출력

		linkedList.set(1, 10); // 1번순번의 값을 10으로 수정
		System.out.println(linkedList.get(1)); // 10 출력

		linkedList.remove(1); // 1번순번의 값을 삭제 (속도 빠름)
		System.out.println(linkedList); // [1,4,3] 출력

		linkedList.clear(); // 전체 값 삭제
		System.out.println(linkedList); // [] 출력 (비어있음)
	}
}

 
 

3. Stack (LIFO)

최근 저장된 데이터를 나열하고 싶거나 데이터의 중복 처리를 막고 싶을 때 사용

  • push(값) :추가,   peek() :맨위값 조회,    pop() :맨위값 꺼냄
import java.util.Stack;

public class Main {

	public static void main(String[] args) {
		Stack<Integer> intStack = new Stack<Integer>(); // 선언 및 생성
		
		intStack.push(1);  //값 추가  
		intStack.push(2);
		intStack.push(3);

		while (!intStack.isEmpty()) { // 다 지워질때까지 출력
        	
            // pop() : 맨 위값 꺼내고 삭제
		    System.out.println(intStack.pop()); // 3,2,1 출력
		}

		// 다시 값 추가
		intStack.push(1);
		intStack.push(2);
		intStack.push(3);
		
		// peek() : 맨 위값 조회
		System.out.println(intStack.peek()); // 3 출력
		System.out.println(intStack.size()); // 3 출력 (peek() 할때 삭제 안됐음)
		
		// pop() : 맨 위값 꺼내고 삭제
		System.out.println(intStack.pop()); // 3 출력
		System.out.println(intStack.size()); // 2 출력 (pop() 할때 삭제 됐음)		
		
		System.out.println(intStack.pop()); // 2 출력
		System.out.println(intStack.size()); // 1 출력 (pop() 할때 삭제 됐음)		

		while (!intStack.isEmpty()) { // 다 지워질때까지 출력
		    System.out.println(intStack.pop()); // 1 출력 (마지막 남은거 하나)
		}
	}
}

 
 


Queue (FIFO)

생성자가 없는 인터페이스 (LinkedList 사용)

  • add(값) :추가,   peek() :맨아래값 조회,    poll() :맨아래값 꺼냄
import java.util.LinkedList;
import java.util.Queue;

public class Main {

	public static void main(String[] args) {
		Queue<Integer> intQueue = new LinkedList<>(); // 선언 및 생성

		intQueue.add(1);  //값 추가
		intQueue.add(2);
		intQueue.add(3);

		while (!intQueue.isEmpty()) { // 다 지워질때까지 출력
        
        	// poll() : 맨 아래 값 꺼냄
			System.out.println(intQueue.poll()); // 1,2,3 출력
		}

		// 다시 값 추가
		intQueue.add(1);
		intQueue.add(2);
		intQueue.add(3);

		// peek() : 맨 아래 값 조회
		System.out.println(intQueue.peek()); // 1 출력 (맨먼저 들어간값이 1 이라서)
		System.out.println(intQueue.size()); // 3 출력 (peek()는 삭제X 조회만!)

		// poll() : 맨 아래 값 꺼냄
		System.out.println(intQueue.poll()); // 1 출력
		System.out.println(intQueue.size()); // 2 출력 (poll() 할때 삭제 됐음)

		System.out.println(intQueue.poll()); // 2 출력
		System.out.println(intQueue.size()); // 1 출력 (poll() 할때 삭제 됐음)

		while (!intQueue.isEmpty()) { // 다 지워질때까지 출력
			System.out.println(intQueue.poll()); // 3 출력 (마지막 남은거 하나)
		}
	}
}

 

 


Set

순서가 없는 데이터의 집합 (데이터 중복허용X) - 순서 없고 중복 없는 배열

  • 그냥 Set으로도 쓸 수 있지만  HashSet, TreeSet 등으로 응용하여 사용가능
    - HashSet : 가장 빠름, 순서 전혀 예측불가
    - TreeSet : 정렬된 순서대로 보관하며 정렬 방법 지정가능
    - LinkedHashSet : 추가된 순서, 또는 가장 최근에 접근한 순서대로 접근 가능
    - 보통 HashSet 쓰는데, 순서보장 필요 시 LinkedHashSet 사용
  • 생성자가 없는 인터페이스
  • add(값) :추가,   remove(값) :삭제,    contains(값) :포함 확인으로 boolean반환
import java.util.HashSet;
import java.util.Set;

public class Main {

	public static void main(String[] args) {
		Set<Integer> intSet = new HashSet<Integer>(); // 선언 및 생성

		intSet.add(1);  //값 추가
		intSet.add(2);
		intSet.add(3);
		intSet.add(3); // 중복된 값은 덮어씀!
		intSet.add(3); // 중복된 값은 덮어씀!

		for (Integer value : intSet) {
			System.out.println(value); // 1,2,3 출력
		}


		// contains() : 해당 값이 포함되어있는지 boolean값 반환
		System.out.println(intSet.contains(2)); // true 출력
		System.out.println(intSet.contains(4)); // false 출력

		// remove() : 삭제할 값 직접 지정 (순번 아님!)
		intSet.remove(3); // 3 삭제

		for (Integer value : intSet) {
			System.out.println(value); // 1,2 출력
		}
	}
}

 

 


Map

순서가 없는 (Key,Value)쌍으로 이루어진 데이터의 집합 (Key값 중복 허용X)

  • key값 기준으로 value 조회 (key값 중복X!)
  • 그냥 Map으로도 쓸 수 있지만 HashMap, TreeMap 등으로 응용하여 사용가능
    - HashMap : 중복 허용X, 순서보장X, key와 value로 null 허용
    - TreeMap : key값 기준 정렬 가능, 저장 시 정렬(오름차순)하기 때문에 저장시간 다소 오래걸림

  • put(key,value) :key에 value값 추가,   get(key) :key에 대한 value값 조회,    keySet() :전체 key값들 조회,
    values() :전체 value값들 조회,   remove(key) :key에 대한 value값 삭제
import java.util.Map;

public class Main {

	public static void main(String[] args) {
		Map<String, Integer> intMap = new HashMap<>(); // 선언 및 생성

		//  put(key,value) : 값 추가 
		intMap.put("일", 11);
		intMap.put("이", 12);
		intMap.put("삼", 13);
		intMap.put("삼", 14); // 중복 Key값은 덮어씀
		intMap.put("삼", 15); // 중복 Key값은 덮어씀


		// key 값 전체 출력
        // intMap.keySet() : 전체 key값들 조회
		for (String key : intMap.keySet()) { 
			System.out.println(key); // 일,이,삼 출력
		}

		// value 값 전체 출력
        // intMap.values() : 전체 value값들 조회
		for (Integer key : intMap.values()) {
			System.out.println(key); // 11,12,15 출력
		}


		// get(key) : key에 대한 value값 조회
		System.out.println(intMap.get("삼")); // 15 출력
        
		// remove(key) : key에 대한 value값 삭제
		intMap.remove("삼"); // 15 삭제
	}
}

 
 


길이값 반환

 

1. length

  • 배열의 길이 조회
  • arrays(int[], double[], String[])

2. length()

  • 문자열의 길이 조회
  • String related Object(String, StringBuilder etc)

3. size()

  • 컬렉션 타입 목록의 길이 조회
  • Collection Object(ArrayList, Set etc)

'TIL' 카테고리의 다른 글

[TIL] 240425 <자바> 상속,인터페이스  (1) 2024.04.25
[TIL] 240424 <자바> 클래스  (0) 2024.04.24
[TIL] 240422 <자바> JVM,변수  (0) 2024.04.22
[TIL] 240419 웹 기초  (0) 2024.04.19
[TIL] 240416 TIL 작성법  (0) 2024.04.19
Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.