컬렉션
요소의 개수에 따라 자동 크기 조절
요소의 추가, 삭제에 따른 요소의 이동 자동 관리
컬렉션의 종류
| 인터페이스 | 특징 | 구현클래스 |
| 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 |
|---|