Skip to main content

Command Palette

Search for a command to run...

[Java] Collection, Generic,File,Input,Output,Thread (1)

Published
•5 min read•View as Markdown
[Java] Collection, Generic,File,Input,Output,Thread (1)

자료구조 + 알고리즘, 문제해결방법

  1. 선형 구조

    • 배열

    • 리스트

    • 스택

    • 큐

    • 데크

  2. 비선형 구조

    • 트리

    • 그래프

Java Collection Framework (1)

  • 객체들을 효율적으로 추가, 삭제,검색할 수 있도록 제공되는 컬렉션 라이브러리

  • 객체를 수집하여 저장하여 두었다가 요청이 있을시 저장소에서 추출하여 제공하는것을 목적

  • 배열(array)의 단점을 개선한 클래스로 객체만 저장할 수 있다.

  • java.util.*

    • import java.util.Iterator;

    • import java.util.HashMap;

    • import java.util.HashSet;

    • import java.util.Map;

    • import java.util.Set;

    • import java.util.Vector;

  1. List : 순서가 있다. 중복허용.

    • List, Vector, ArrayList, Interator,Stack
    Vector vec = new Vector();  // 자료형(타입)을 정하지 않음.

            System.out.println(vec.size()); // 요소의 개수 : 현재 0개
            vec.add(3);
            vec.add(3.14);
            vec.add("Happy");
            vec.add('K');
            vec.add(3);   // 중복 허용

            System.out.println(vec.size());  // 현재 5개

            vec.add(new Integer(5));  // 정수 값을 갖는 Integer 객체를 추가
            vec.add(new Double(3.5));  // 실수 값을 갖는 Double 객체를 추가

            System.out.println(vec.size());   // 현재 7개
            System.out.println("----");

            for(int i = 0; i < vec.size(); i++) {
                System.out.println(vec.get(i));  // vec의 각 요소 하나씩 출력, 0 부터 인덱스 시작
            }

            System.out.println("----");

            vec.remove(3);  //  인덱스가 3인 위치에 있는 요소를 제거

            for(int i = 0; i < vec.size(); i++) {
                System.out.println(vec.get(i));
            }

            System.out.println("----");

            System.out.println(vec.get(3));

            vec.removeAllElements();  // Vector에 있는 모든 요소를 제거

            System.out.println(vec.size());  // 그래서 크기 0 

            System.out.println("----");

            if(vec.isEmpty()) {  // 비어있는가?
                System.out.println("비어있다.");
            } else {
                System.out.println("비어있지 않다.");
            }
  1. Set : 순서가 없다. 중복허용 안함.

    • Set, HashSet
    Set set = new HashSet();  
            set.add(3);
            set.add(3.14);
            set.add("Happy");
            set.add('K');
            set.add(new Integer(5));
            set.add(new Double(3.5));
            set.add(new String("Java"));
            System.out.println(set.size());  // 7
            set.add(3);        // 불가능 -> 중복을 허용하지 않는다.
            System.out.println(set.size());  // 7
    HashSet hs = new HashSet();
            hs.add(3);
            hs.add(3.14);
            hs.add("soul");
            hs.add('R');
            hs.add(new Integer(5));

Iterator

  • 컬렉션에 저장된 요소를 접근하는데 사용되는 인터페이스
boolean hasNext()읽어 올 요소가 남아있는지, true / false
Object next()다음 요소 읽어오기, hasNext()로 확인 후 next() 호출하면 더 안전
void remove()next()로 읽어 온 요소 삭제, next() 호출 다음에 호출해야 함.
    java.util.Iterator iter = hs.iterator();        

            System.out.println("----");
            while(iter.hasNext() == true) { 
                Object obj = iter.next(); 
                System.out.println(obj.toString());
            }
  1. Map : 순서가 없다.

    • Key, Value 쌍으로 이루어져 있음.

    • Key 중복 불가능

    • Value 중복 가능

    • Map,HashMap,HashTable

    Map map = new HashMap();
            // "key" 중복불가능
            // value 중복가능
            map.put("one", 3);
            map.put("two", 3.14);
            map.put("three", "Happy");
            map.put("four", new Integer(5));
            map.put("five", 3);
            map.put("five", 5);    // "key" 중복불가능, 최종적으로는 이 value를 가진다.

            System.out.println(map.size());   // 5
            System.out.println(map.get("two"));  // value 값을 가져온다. 3.14
            System.out.println(map.get("five"));  // 그래서 "five" key에서는 5라는 value를 가진다.
  • 배열의 크기는 변경이 불가능하나 ArrayList, Vector는 동적인 크기 변경이 가능하다.

Java Collection Framework (2)

  • import java.util.ArrayList;
import java.util.ArrayList;

class Jumsu {
    String name = "";
    int kor = 0;
    int eng = 0;
    int tot = 0;
    int avg = 0;
    public Jumsu() { }
    public Jumsu(String name, int kor, int eng) {
        // super();
        this.name = name;
        this.kor = kor;
        this.eng = eng;
        this.tot = kor + eng;
        this.avg = (kor + eng) / 2;
    }
} // class end

public class ArrayListEx1 {

    public static void main(String[] args) {
        Jumsu j1 = new Jumsu("홍길동", 100, 100);
        Jumsu j2 = new Jumsu("김철수", 40, 40);
        Jumsu j3 = new Jumsu("이영희", 70, 70);

        ArrayList alst = new ArrayList();
        alst.add(j1);
        alst.add(j3);
        alst.add(j2);
        alst.remove(j2);

        Jumsu t = null;
        for(int i = 0; i < alst.size(); i++) {
            //System.out.println(alst.get(i));
            t = (Jumsu)alst.get(i);
            //System.out.println(((Jumsu)alst.get(i)).name);
            System.out.print(t.name + "\\t");
            System.out.print(t.kor+ "\\t");
            System.out.print(t.eng+ "\\t");
            System.out.print(t.tot+ "\\t");
            System.out.println(t.avg);
        }        
    }
}
  • 입력받은 값을 ArrayList에 담아 출력하기
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.Scanner;

// Scanner class로 부터 console에서 이름을 입력 받아
// ArrayList에 저장하고 출력
public class ArrayListEx2 {

    public static void main(String[] args) {

        List<String> a = new ArrayList<String>();
        Scanner input = new Scanner(System.in);
        for(int i = 0; i < 3; i++) {
            System.out.print("이름을 입력하세요 >> ");
            String name = input.next();
            a.add(name);
        }

        for(int i = 0; i < a.size(); i++) {    
            String name = a.get(i);
            System.out.println("전통 for문 name : " + name);
        }

        for(String name : a) {
            System.out.println("향상 for문 name : " + name);
        }

        // 결과적으로  List에서도, Set에서도 사용가능
        Iterator<String> it = a.iterator();
        while(it.hasNext()) { // 다음 요소 존재하는지 판별(true, false)
            String name = it.next(); // 다음 요소값을 반환(Iterator->String)
            System.out.println("Iterator name : " + name);
        }    
    }
}

Java Collection Framework (3)

  • 빙고판 만들기
import java.util.*; 

public class BingoTest {
      public static void main(String[] args) { 
            Set set = new HashSet(); 

            int[][] board = new int[5][5];  // 2차원 배열

            for(int i=0; set.size() < 25; i++) { 
                                // 1에서 50 사이의 랜덤 수, int로 형변환
                  set.add((int)(Math.random()*50)+1+""); 
            } 

          Iterator it = set.iterator(); 

          for(int i=0; i < board.length; i++) { 
                for(int j=0; j < board[i].length; j++) { 
                    // 가져온 문자열을 정수로 변환
                      board[i][j] = Integer.parseInt((String)it.next());
                      // 1의 자리 숫자면 공백을 두칸 아니면 한칸으로 빙고판 모양 만들기
                      System.out.print((board[i][j] < 10 ? "  " : " ") + board[i][j]); 
                } 
                System.out.println(); // 한 행이 끝나면 
            } 
      } // main end
}

Generics 제네릭

  • 자료형(data type) 을 일반화(generalize)하는 것

  • E element (원소) —> 클래스만 가능


  • 객체를 저장하는 기술인 Collection Framework의 단점을 개선한 기능.

    Vector vec=new Vector();

    vec.add(123);

    vec.add("sky");

    int[3] a={1,2,3}


  • 데이터 자료형인 String, Integer같은 형태를 처음에 정해 놓지 않고

    임의의 타입으로 명시해 준 후에 나중에 직접적으로 해당구문을 사용할때

    지정하는 형태


  • Class ArrayList<E>에서 'E'가 있는 곳에는 ArrayList를 선언하고

    생성할 때 사용할 실제 참조자료형이 들어간다.

  • E는 Element(원소)를 말하며,

    new ArrayList<String>() 이면 'E'는 'String' 클래스를 가르키며,

    < > 안의 String은 유형 매개 변수(type parameter)이다.

    따라서 boolean add(Object o) 메소드는 boolean add(String o) 가 된다.

  • 'E'는 ArrayList의 인스턴스를 만들때 < > 안에 넣는 타입을 말함.

  • 'E'는 컬렉션에 저장하고 컬렉션에서 리턴할 원소의 타입을 가르킴.

import java.util.ArrayList;
import java.util.Iterator;

class Mountain {
    String name;// 산이름
    int height;    // 산높이

    public Mountain() {}
    public Mountain(String name, int height) {
        super();
        this.name = name;
        this.height = height;
    }    
}
public class GenericEx1 {

    public static void main(String[] args) {
        // 교재 : ch13, 670page
        ArrayList<String> list = new ArrayList<>();
        list.add("soul");
        list.add("Jeju");
        //list.add(3);
        //list.add(3.14);
        //list.add(new Integer(5));

        Mountain one = new Mountain("한라산", 1950);
        Mountain two = new Mountain("설악산", 1230);
        Mountain three = new Mountain("북한산", 1500);

        ArrayList<Mountain> mlist = new ArrayList<>();
        mlist.add(one);
        mlist.add(two);
        mlist.add(three);

        // 1)
        for(int i = 0; i<mlist.size(); i++) {
            Object obj = mlist.get(i);
            Mountain dto = (Mountain)obj;
            System.out.println(dto.name + " : " + dto.height);
        }

        // 2)
        Iterator<Mountain> iter = mlist.iterator();
        while(iter.hasNext()) {
            Mountain dto = iter.next();
            System.out.println(dto.name + " : " + dto.height);
        }

    } // main end

} // class en

Thumbnail :Image by Freepik

More from this blog

[혼공후기] 재밌으면서도 알찼던 6주! 14기 활동 회고

매번 혼공 학습단을 신청해 봐야겠다고 했지만 기간 놓쳐버리기…또는 너무 바쁜 나머지 완주 못할 것 같아서 포기하다가 때마침 공부가 필요한 시기에 시간이 나서 신청하게 되었다. 공부할 새 책도 배송이 오고 완주할 생각에 기대감 상승. (+중간에 간식 먹을 생각) 참고할 수 있는 강의 영상이 있기 때문에 영상강의 보면서 책 필기 및 정리 이해한 내용을 바탕으로 블로그 정리 이런 방식으로 공부를 했다. 사실 하루에 조금씩 공부했으면 적당한 ...

Aug 23, 20252 min read

[혼공컴운] 6주차_책 한 권을 끝내다니(Ch 14~ 15)

14-1) 연속 메모리 할당 연속 메모리 할당 : 프로세스에 연속적인 메모리 공간을 할당하는 방식 스와핑 : 메모리상의 빈 공간에 또 다른 프로세스를 적재하여 실행하는 방식 스왑 영역 : 프로세스들이 쫓겨나는 보조기억장치의 일부 영역 스왑 아웃 : 현재 실행되지 않는 프로세스가 메모리에서 스왑 영역으로 옮겨지는 것 스왑 인 : 스왑 영역에 있던 프로세스가 다시 메모리로 옮겨오는 것 → 스와핑을 이용하면 프로세스들이 요구하는 메모...

Aug 16, 20259 min read
[혼공컴운] 6주차_책 한 권을 끝내다니(Ch 14~ 15)

[혼공컴운] 5주차_끝이 보인다(Ch 12 ~ 13)

12-1) 동기화란 동시다발적으로 실행되는 많은 프로세스는 서로 데이터를 주고받으며 협력하며 실행된다. ⇒ 협력하여 실행되는 프로세스들은 실행 순서와 자원의 일관성을 보장해야 하기에 반드시 동기화가 필수 프로세스 동기화 : 프로세스들 사이의 수행 시기를 맞추는 것 실행 순서 제어 : 프로세스를 올바른 순서대로 실행하기 상호 배제 : 동시에 접근해서는 안 되는 자원에 하나의 프로세스만 접근하게 하기 공유가 불가능한 자원의 동시 사용을 피하...

Aug 9, 20255 min read
[혼공컴운] 5주차_끝이 보인다(Ch 12 ~ 13)

[혼공컴운] 4주차_운영체제 시작(Ch 09 ~ 11)

09-1) 운영체제를 알아야 하는 이유 운영체제 : 실행할 프로그램에 필요한 자원을 할당하고, 프로그램이 올바르게 실행되도록 돕는 특별한 프로그램 (시스템) 자원 : 프로그램 실행에 마땅히 필요한 요소 컴퓨터가 부팅될 때 메모리 내 커널 영역에 적재 사용자 영역 : 사용자가 이용하는 응용 프로그램이 적재되는 영역 ⇒ 메모리 공간에 주소가 겹치지 않게 프로그램 적재해 준 건? 운영체제 실행할 프로그램 메모리에 적재 실행되지 않...

Jul 26, 20257 min read
[혼공컴운] 4주차_운영체제 시작(Ch 09 ~ 11)

[혼공컴운] 3주차_컴퓨터 구조 끝(Ch 06 ~ 08)

06-1) RAM의 특징과 종류 RAM 휘발성 저장 장치 실행할 대상 저장 보조기억장치 비휘발성 저장 장치 보관할 대상 저장 CPU는 보조기억장치에 직접 접근하지 못하고 RAM으로 복사하여 저장한 뒤 실행. RAM 용량이 적으면 보조기억장치에서 실행할 프로그램을 가져오는 일이 잦아 실행 시간이 길어지기 때문에 RAM용량이 충분히 크면 많은 데이터를 가져와 미리 RAM에 저장하여 프로그램들을 동시에 빠르게 실행하는데 유리하다...

Jul 19, 20258 min read
[혼공컴운] 3주차_컴퓨터 구조 끝(Ch 06 ~ 08)
W

WOW's dev archive

42 posts

언젠가 나에게 힘이 될 차곡차곡 쌓은 기록🥰