Java

JAVA

choidawon 2023. 10. 11. 17:27

컬렉션

요소의 개수에 따라 자동 크기 조절

요소의 추가, 삭제에 따른 요소의 이동 자동 관리

 

컬렉션의 종류

인터페이스 특징 구현클래스
List 순서가 있는 데이터의 집합
데이터의 중복 허용
ArrayList, LinkedList, Stack, Vrctor
Queue List + FIFO LinkedList, PriorityQueue
Set 순서를 유지하지 않는 데이터의 집합
데이터의 중복을 허용하지 않음
HashSet, TreeSet
Map 키와 값이 쌍으로 이루어진 데이터의 집합 HashMap, TreeMap, Hashtable, Properties

 

ArrayList 연습

package 컬렉션;

import java.awt.Button;
import java.util.ArrayList;

public class 리스트연습1 {

	public static void main(String[] args) {
		// 순서가 있는 데이터를 모으고 싶을때
		//배열??? 컬렉션(리스트 형태)
		ArrayList list = new ArrayList();
		//Collection 상속 - add()
		list.add(100);
		list.add(11.1);
		list.add(true);
		list.add('a');
		list.add("hong");
		list.add("hong");
		list.add(new Button());
		System.out.println(list);//toString()
		//ArrayList안에 toString()이 재정(오버라이드)
		//list라고 주소가 가르키고 있는 데이터들을 프린트하도록
		System.out.println(list.get(0));//위치값은 인덱스로 부르고, 0부터 시작
		System.out.println(list.size());
		
		//hong을 꺼내서 gildong을 붙여 프린트
		System.out.println(list.get(4)+"gildong");
		//for문으로 이용해서 하나씩 꺼내와 모든 데이터를 아래와 같이 프린트
		//"값>>" + 100
		for (int i = 0; i < list.size(); i++) {
			System.out.println("값>> " +list.get(i) );
		}
		for(Object x : list) {
			System.out.println("값>> " +x);
		}
		System.out.println(list.contains("hong"));//hong이 들어있느냐
		System.out.println(list.indexOf("hong"));//어디에 있는지 알려주는
		System.out.println(list.isEmpty());
		list.remove(0);//파괴형함수-->원본을 건드리기 때문에
		list.remove(11.1);
		list.add(0, "추가");//0번 앞에 넣어라!
		list.set(0, "또 수정");
		System.out.println(list);
		System.out.println();
	}

}

Map 연습

package 컬렉션;

import java.util.HashMap;

public class 맵연습1 {

	public static void main(String[] args) {
		// map - 매핑시킨다. 연결시킨다.
		//키 : 값의 쌍으로 매핑시켜서 연결시켜서 저장한다.
		HashMap map = new HashMap();
		map.put("apple", "사과");
		map.put("melon", "메론");
		map.put("ice", "아이스크림");
		System.out.println(map);
		System.out.println(map.get("apple"));
		//순서가 없음.
		map.put("apple", "파란사과");
		System.out.println(map);
		map.remove("apple");
		System.out.println(map);
		map.replace("ice", "아이스크림", "초코아이스크림");
		System.out.println(map);
	}

}

Set 연습

package 컬렉션;

import java.util.Arrays;
import java.util.Random;

public class 셋연습1 {

	public static void main(String[] args) {
		// 로또문제
		int[] lotto = new int[6];
		//고정길이, 같은 타입
		//랜덤하게 만들어서 배열에 6개의 숫자를 넣자.
		Random r = new Random();
		for (int i = 0; i < lotto.length; i++) {
			lotto[i] = r.nextInt(45) + 1;//0~44까지 발생, 1~45까지 발생
			
		}
		System.out.println(Arrays.toString(lotto));//로또 배열이 가리키고 있는 String으로 만들어줌
		
	}

}

Queue 확인문제

package 컬렉션;

import java.util.LinkedList;

public class Queue확인문제 {

	public static void main(String[] args) {
		LinkedList list = new LinkedList();//큐형식의 컬렉션으로 계속해서 변동이 일어날경우 
		list.add("국어");
		list.add("수학");
		list.add("영어");
		list.add("컴퓨터");
		System.out.println("전체 시험 볼 과목: " +list);
		for (int i = 0; i < list.size()+1; i++) {
			list.remove();
			System.out.println(i+1 +"일차 시험 본 후 남은 과목: " + list);
		}

	}

}

스레드

프로세스안에서 실질적으로 작업을 실행하는 단위

1) Thread 클래스 상속 방식

스레드 문제

package 상속응용;

import java.util.Date;

public class 배열스레드 extends Thread {
//run(), start(), ....
	@Override
	public void run() {
		//동시에 처리하고 싶은 내용!
		String [] list = {"1.png","2.png","3.png","4.png","5.png"};
		for (int i = 0; i < list.length; i++) {
			System.out.println("이미지>> " + list[i]);
			try {
				Thread.sleep(5000);//밀리세컨즈, 5초
			} catch (InterruptedException e) {
				e.printStackTrace();//에러출력
				//이메일을 보내는 처리
				//문자로 보내는 처리
			}
			//외부의 자원 cpu을 연결할때는
			//아주 위험한 순간이기 때문에 어떻게 처리할지를 명시해주어야함
		}
	}
}
package 상속응용;

import java.util.Date;

public class 시각스레드 extends Thread{
	@Override
	public void run() {
		//동시에 처리하고 싶은 내용!
			for (int i = 0; i <500; i--) {
				Date date = new Date();
				System.out.println("시각>> " + date);
				try {
					Thread.sleep(1000);
				} catch (InterruptedException e) {
					e.printStackTrace();//에러출력
					//이메일을 보내는 처리
					//문자로 보내는 처리
				}
				//외부의 자원 cpu을 연결할때는
				//아주 위험한 순간이기 때문에 어떻게 처리할지를 명시해주어야함
			}
		}
	}
package 상속응용;

import java.util.Date;

public class 카운터스레드 extends Thread {
//run(), start(), ....
	@Override
	public void run() {
		//동시에 처리하고 싶은 내용!
		for (int i = 500; i >= 0; i--) {
			System.out.println("카운터>> " + i);
			try {
				Thread.sleep(1000);
			} catch (InterruptedException e) {
				e.printStackTrace();//에러출력
				//이메일을 보내는 처리
				//문자로 보내는 처리
			}
			//외부의 자원 cpu을 연결할때는
			//아주 위험한 순간이기 때문에 어떻게 처리할지를 명시해주어야함
		}
	}
}
package 상속응용;

public class 스레드프로그래밍1 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		카운터스레드 counter = new 카운터스레드();
		시각스레드 timer = new 시각스레드();
		배열스레드 array = new 배열스레드();
		
		counter.start(); //스레드 시작
		timer.start();
		array.start();
		

	}

}
package 상속응용;

import java.awt.BorderLayout;
import java.awt.Font;
import java.util.Date;

import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;

public class 스레드그래픽 extends JFrame {

	JLabel count, image, day;//라벨은 전역변수로 선언
	//선언에 위치에 따라 사용위치가 결정됨.
	
	//객체생성시 자동호출하는 생성자 메서드를 만들어주면 된다.
	public 스레드그래픽() {
		setTitle("나의 pc방 모니터링 서비스");
		setSize(800, 300);
		count = new JLabel("카운터들어가는 자리");
		image = new JLabel();
		day = new JLabel("시각자리들어가는 자리");
		
		Font font = new Font("맑은고딕", Font.BOLD, 20);
		count.setFont(font);
		image.setFont(font);
		day.setFont(font);
		//JFrame은 BorderLayout으로 이미 설정됨.
		//동서남북가운데만 넣을 수 있음.
		
		add(count, BorderLayout.WEST);
		add(image, BorderLayout.EAST);
		add(day, BorderLayout.SOUTH);
		
		카운터스레드 counter = new 카운터스레드();
		시각스레드 timer = new 시각스레드();
		배열스레드 array = new 배열스레드();
		
		counter.start(); //스레드 시작
		timer.start();
		array.start();
		
		//맨밑으로
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		setVisible(true);
	}
	
	public static void main(String[] args) {
		스레드그래픽 name = new 스레드그래픽();
		//name.go();

	}
	
	//클래스안에 클래스를 끼워넣을 수 있다.
	//전역변수를 사용하기 위해서
	//클래스안에 끼워넣은 클래스를 안쪽클래스(inner 클래스)
	public class 카운터스레드 extends Thread {
	//run(), start(), ....
		@Override
		public void run() {
			//동시에 처리하고 싶은 내용!
			for (int i = 500; i >= 0; i--) {
				//System.out.println("카운터>> " + i);
				count.setText("카운터>> " + i);
				if( i == 0) {
					JOptionPane.showMessageDialog(count, "카운터완료!! pc방을 나가셔야합니다.");
				}
				try {
					Thread.sleep(1000);
				} catch (InterruptedException e) {
					e.printStackTrace();//에러출력
					//이메일을 보내는 처리
					//문자로 보내는 처리
				}
				//외부의 자원 cpu을 연결할때는
				//아주 위험한 순간이기 때문에 어떻게 처리할지를 명시해주어야함
			}
		}
	}
	public class 배열스레드 extends Thread {
		//run(), start(), ....
			@Override
			public void run() {
				//동시에 처리하고 싶은 내용!
				String [] list = {"1.png","2.png","3.png","4.png","5.png"};
				for (int i = 0; i < list.length; i++) {
					//System.out.println("이미지>> " + list[i]);
					//image.setText("이미지>> " + list[i]);
					ImageIcon icon = new ImageIcon(list[i]);
					image.setIcon(icon);
					if(i == 4) {
						i = -1;
					}
					try {
						Thread.sleep(1000);//밀리세컨즈, 5초
					} catch (InterruptedException e) {
						e.printStackTrace();//에러출력
						//이메일을 보내는 처리
						//문자로 보내는 처리
					}
					//외부의 자원 cpu을 연결할때는
					//아주 위험한 순간이기 때문에 어떻게 처리할지를 명시해주어야함
				}
			}
		}
	public class 시각스레드 extends Thread{
		@Override
		public void run() {
			//동시에 처리하고 싶은 내용!
				for (int i = 0; i <500; i--) {
					Date date = new Date();
					//System.out.println("시각>> " + date);
					day.setText("시각>> " + date);
					try {
						Thread.sleep(1000);
					} catch (InterruptedException e) {
						e.printStackTrace();//에러출력
						//이메일을 보내는 처리
						//문자로 보내는 처리
					}
					//외부의 자원 cpu을 연결할때는
					//아주 위험한 순간이기 때문에 어떻게 처리할지를 명시해주어야함
				}
			}
		}

}//class

'Java' 카테고리의 다른 글

객체지향 프로그래밍  (0) 2025.04.16