Notice
Recent Posts
Recent Comments
Link
«   2024/09   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30
Tags more
Archives
Today
Total
관리 메뉴

요리사에서 IT개발자로

스파르타 코딩클럽 자바문법 2장 배열, 컬렉션정리 본문

Java

스파르타 코딩클럽 자바문법 2장 배열, 컬렉션정리

H.S-Backend 2024. 4. 25. 21:23
        //1.배열의 특정값을 대입해서 선언
        int[] intArr = {10, 20, 30, 40, 50};
        String[] stringArray = {"a", "b", "c", "d"};

//        2. for 문을 통해서 대립
        for(int i=0; i<intArr.length; i++){
            intArr[i] = i;
            System.out.println(intArr[i]);
        }

for은 intArr의 배열의 길이만큼 순회할것.

intArr[i]는 i가 순회한 횟수가 intArr[i] 배열의 저장되며 

sout으로 i가 intArr[i]의 입력한 횟수를 표시할것이고  

intArr[i]의 길이 5개를 , 0부터 시작하여 4까지 총 0, 1, 2, 3, 4 <= 5개가 출력된다.

 

int[] intArr = {10, 20, 30, 40, 50};
Arrays.fill(intArr, 2);

for(int item: intArr){
    System.out.println(item);
}

Arrays.fill = 배열의 모든 값을 초기화.

intArr의 값은 2로 

출력하면 10, 20, 30 ,40 ,50 이 2,2,2,2,2 로 출력된것을 확인할 수 있다.

 

public class Arr03 {
    public static void main(String[] args) {

        int[] a = {1, 2, 3, 4};
        int[] b = a;

        b[0] = 3;
        System.out.println(a[0]);
    }
}

얕은 복사 = 비효율 복사 = 개개인마다 주소값을 할당받아 만들어진 형태가 아니다.

즉 주소값이 이어져있어 a를 변경하든 b를 변경하든 같이 변경되어 출력된게 보여진다.

 

int[] a = {1, 2, 3, 4};
int[] b = new int[a.length];

for(int i = 0; i<a.length; i++) {

    System.out.println(a[i]);
}

i가 a의 배열 길이만큼 순회를 돌면 i는 0, 1, 2, 3을 출력한다.

i를 대괄호 [ ]로 묶어 입력된 길이만큼 a로 바꾸어서 출력을 하게 되었을 때 

1, 2, 3, 4가 출력된것을 확인할 수 있다.

int[] a = {1, 2, 3, 4};
int[] b = new int[a.length];

for(int i = 0; i<a.length; i++) {
    b[i] = a[i];
    System.out.println(a[i]);
}

중간에 b[ i ]는 a [ i ]라는 값을 입력하게되어

a[ i ]의 배열안에 값은 b [ i ]로 채워줌으로 동일 한 값을 입력받는 것. (깊은복사)

 

//(1)length = 길이
int strLength = str.length();
System.out.println(strLength);

//(2)charAt(int index) = 문자열의 문자를 표시하다
char strChar = str.charAt(1);
System.out.println(strChar);

//(3)substring(int fromIdx, int toIdx)   지하철칸처럼 단위로 배열을 단위로 끊어 시작점과 끝점을 표시한다.
String strSub = str.substring(0,3);
System.out.println(strSub);

//(4) equals(String str)    왼쪽에 있는 값이 오른쪽에 있는 값과 비교할 때 쓰인다
String newStr = "ABCE";
boolean strEqual = newStr.equals(str);
System.out.println(strEqual);

//(5) toCharArray : String => char()      char[] 배열의 문자열을 문자로 변경할때 쓰인다.
char[] strCharArray = str.toCharArray();
System.out.println(strCharArray);

//(6)반대로 char[] => String=> char    char의 가진 문자들의 배열을 하나의 문자열로 변경한다.
char[] charArray = {'A', 'B', 'C'};
String charArrayString = new String(charArray);
System.out.println(charArrayString);

 

 

컬렉션의 기능으로는 

크기 자동조정/ 추가/ 수정/ 삭제 /반복/ 순회 /필터/ 포함확인 등등 이 있다.

컬렉션은 기본형변수를 저장하지않고 참조형변수를 저장한다.

 

intList.add(99);
intList.add(15);
intList.add(3);

System.out.println(intList.get(0));
//삭제
intList.remove(0);
System.out.println(intList.get(0));

intList에 0번째는 99, 1번쨰는 15, 2번째는 3이라는 값을 저장하고 

출력을 할 경우 0번째는 99가 출력된다, 허나 remove함수를 사용하여 0번째 값을 삭제를 하면 데이터 자체가 사라져

다음인 15가 출력된다.


 

linkedList는 조회하는 속도가 느리지만 값을 추가하거나 삭제할 때는 빠르다.
package collection;

import java.util.LinkedList;

public class Col2 {
    public static void main(String[] args) {
        //linked list
        //메모리에 남는 공간을 요청해서 여기 저기 나누어서 실제 값을 담아놓는다.
        // 실제값이 있는 주소값으로 목록을 구성하고 저장하는 자료구조이다.

        // 기본적 기능 => ArrayList와 동일하다
        //LinkedList 값을 => 여기저기 나누어서 : 조회하는 속도가 느리다.
        // 값을 추가하거나, 삭제할 때 는 속도가 빠르다.

        LinkedList<Integer>linkedList = new LinkedList<Integer>();

        linkedList.add(5);
        linkedList.add(10);
        linkedList.add(3);

        System.out.println(linkedList.get(0));
        System.out.println(linkedList.get(1));
        System.out.println(linkedList.get(2));

        System.out.println(linkedList.toString());  //

        linkedList.add(200);
        System.out.println(linkedList.toString()); //

        linkedList.add(2, 4);
        System.out.println(linkedList.toString()); //

        linkedList.set(1, 30);
        System.out.println(linkedList.toString());

        linkedList.remove(1);
        System.out.println(linkedList.toString());

        linkedList.clear();
        System.out.println(linkedList.toString());
    }
}

Stack의 사용이유

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

 

FILO

처음에 넣었던 자료가 점점 쌓인다.

그러면 Last가 되어 출력할 때 먼저 출력이 된다.

 

push 추가하다,

pop 맨 마지막에 저장된 값을 출력하고 데이터를 없앤다.

peak 제일 처음에 저장된 값을 출력.

size 배열안의 크기를 조회한다.

package collection;

import java.util.Stack;

public class Col3 {
    public static void main(String[] args) {
        //Stack
        //수직으로 값을 쌓아놓고 넣었다가 뺀다. FILO(Basket)
        //push, peek, pop
        // 최근 저장된 데이터를 나열하고싶거나 데이터의 중복처리를 막고싶을 때 사용한다.
        Stack<Integer>intStack = new Stack<Integer>();  //선언 및 생성
        intStack.push(10);
        intStack.push(15);
        intStack.push(1);

        // 다 지워질 때 까지 출력
        while(!intStack.isEmpty()) {
            System.out.println(intStack.pop()); //상단에 있는 값을 출력하고 빼준다
        }
        //다시한번 추가
        intStack.push(10);
        intStack.push(15);
        intStack.push(1);

        //peek
        System.out.println(intStack.peek());
        System.out.println(intStack.size());
    }
}

Queue

FIFO (마지막에 넣은 자료를 먼저 출력한다)

생성자가 없는 인터페이스.

poll 선택해서 출력한다

peak 제일 최근에 저장된 값을 출력.

size 배열안의 크기를 조회한다.

package collection;

import java.util.LinkedList;
import java.util.Queue;

public class Col4 {
    public static void main(String[] args) {
        //Queue : FIFO
        // add, peek, poll
        // Queue : 생성자가 없는 인터페이스 =

        Queue<Integer> intQueue = new LinkedList<>();  //Queue를 선언하고 생성


        intQueue.add(1);
        intQueue.add(3);
        intQueue.add(5);

        while(!intQueue.isEmpty()){
            System.out.println(intQueue.poll()); // isEmpty() => intQeue에 저장된 배열이 비어있지 않으면 순회하며 출력해라
        }
        intQueue.add(1);
        intQueue.add(3);
        intQueue.add(5);
        intQueue.add(10);

        //peek
        System.out.println(intQueue.peek());  //1 이 출력
        System.out.println(intQueue.size());  //4 출력
    }
}

set은 집합과 비슷하다

순서가 보장되지 않는 대신 중복데이터를 허용하지 않는다.

HashSet과 TreeSet을 응용할 수 있다.

생성자가 없는 인터페이스라 HashSet 또는 TreeSet을 사용해서 생성할 수 있다.

package collection;

import java.util.HashSet;
import java.util.Set;

public class Col5 {
    public static void main(String[] args) {
        //Set(집합) : 순서없고, 중복없다
        //순서가 성장되지 않는 대신 중복을 허용하지 않도록 하는 프로그램에서 사용할 수 있는 자료구조
        //Set => 바로 사용할 수 있다. 그러나 HashSet, TreeSet 등으로 응용해서 같이 사용가능하다.
        //Set은 생성자가 없는 껍데기라 바로 생성 할 수 없다.
        //생성자가 존재하는 HashSet을 이용하여 -> Set을 구현해 볼 수 있다.

        Set<Integer> intSet = new HashSet<>(); //선언 밑 생성

        intSet.add(1);
        intSet.add(12);
        intSet.add(5);
        intSet.add(9);
        intSet.add(1);
        intSet.add(12);

        for(Integer value:intSet){
            System.out.println(value); //1,5,9,12 만 출력 중복되는 값들은 출력X
        }
        // contains : 포함하는지를 뜻한다.
        // true와 false로 출력한다
        System.out.println(intSet.contains(2));  //전체 변수의 종류가 3이 아님 false
        System.out.println(intSet.contains(5));  //전체 변수의 종류가 6이 맞음 true

    }
}

Map은 key와 value가 한쌍이다.

Map은 HashSet과 TreeSet을 응용해서 사용이 가능하다.

 

put 은 세팅하다.

get은 가져오다.

package collection;

import java.util.HashMap;
import java.util.Map;

public class Col6 {
    public static void main(String[] args) {
        // Map : key => value pair => 중요하다.
        //keyvalue 값으로 uique하게 보장이 되야한다.
        // Map => HashSet, Treeset으로 응용된다.

        Map<String, Integer> intMap = new HashMap<>();

        // 키 값
        intMap.put("일", 11);
        intMap.put("이", 12);
        intMap.put("삼", 13);
        intMap.put("삼", 14); //중복 key
        intMap.put("삼", 15); //중복 key
        intMap.put("삼", 16); //중복 key

        //key 값 검색 출력(향상된 for문)
        for(String key:intMap.keySet()){
            System.out.println(key);  //중복은 출력X, 키값출력 순서를 보장하지 않는다.
        }

        // value 값 전체 출력(향상된 for문)
        for(Integer value: intMap.values()){
            System.out.println(value);   //키 값을 출력, 중복되는 값을 높은값을 출력한다.
        }
        System.out.println(intMap.get("삼"));  //삼중에 높은값을 출력 중복 허용하지않는다
    }
}

 

 

 

숙제 

Queue는 FIFO 

생성자가 없는 인터페이스여서 ArrayList와 동일한 LinkedList 생성자를 사용하여 선언 및생성

add으로 추가하고

while문을 사용하여 isEmpty <= 비어있는 값을 출력

에 ! <= 사용하여 반대로 비어있지 않은 값을 출력 함으로 써

 

결론

Queue방식의  데이터 출력 (FIFO)

LinkedList의 동적배열을 사용 (데이터가 가변적으로 늘어나도 상관없다. 추가가 가능하다)

마지막으로 while문에 isEmpty () 를 사용하고 !를 활용하여 비어있는 값에서 멈추도록 만들었다. 

package collection;


import java.util.LinkedList;
import java.util.Queue;

public class Col7 {
    public static void main(String[] args) {
        Queue<String> strQueue = new LinkedList<>();

        strQueue.add("[ Queue로 저장된, 알리오 올리오 만들기 ]");
        strQueue.add("면을 삶는다.");
        strQueue.add("팬에 기름을 두른다");
        strQueue.add("마늘을 갈색나게 익힌다.");
        strQueue.add("팬에 면수를 넣는다.");
        strQueue.add("팬에 파스타 면을 넣는다");
        strQueue.add("조미료를 넣어 간을 맞춘다");
        strQueue.add("졸인다.");
        strQueue.add("면을 돌돌말아 그릇에 세팅한다.");
        strQueue.add("파슬리와 후추를 뿌린다.");
        strQueue.add("끝");

        while(!strQueue.isEmpty()){
            System.out.println(strQueue.poll()); // isEmpty() => strList에 저장된 배열이 비어있지 않으면 순회하며 출력해라
        }

    }
}

 

반응형