Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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
- 대덕인재개발원
- NestedFor
- 정수형타입
- 예외미루기
- 생성자오버로드
- 제네릭
- 예외처리
- 메소드오버로딩
- 추상메서드
- abstract
- 인터페이스
- cursor문
- 자동차수리시스템
- 집합_SET
- 어윈 사용법
- Java
- exception
- 오라클
- 컬렉션 타입
- 한국건설관리시스템
- 사용자예외클래스생성
- 객체 비교
- 환경설정
- 참조형변수
- 자바
- GRANT VIEW
- 컬렉션프레임워크
- oracle
- 다형성
- EnhancedFor
Archives
- Today
- Total
거니의 velog
230823_컬렉션 프레임워크 2 본문
[ArrayListTest02.java]
package kr.or.ddit.basic;
import java.util.ArrayList;
import java.util.Scanner;
/*
* 문제 ) 5명의 사람 이름을 입력받아 ArrayList에 추가한 후에
* ArrayList에 저장된 이름들 중에 '김'씨 성의 이름을 모두 출력하시오.
* (단, 입력은 Scanner 객체를 이용한다.)
*/
public class ArrayListTest02 {
static Scanner sc = new Scanner(System.in);
public static void main(String[] args) {
ArrayList<String> nameList = new ArrayList<String>();
System.out.println("5명의 이름을 입력하세요...");
for(int i=0; i<5; i++) {
System.out.print((i+1) + "번째 사람 이름 >> ");
String name = sc.nextLine();
nameList.add(name);
}
System.out.println();
System.out.println("김씨 성을 가진 사람들...");
for(int i=0; i<nameList.size(); i++) {
// 첫번째 방법
// if(nameList.get(i).substring(0, 1).equals("김")) {
// System.out.println(nameList.get(i));
// }
// 두번째 방법
// if(nameList.get(i).charAt(0) == '김') {
// System.out.println(nameList.get(i));
// }
// 세번째 방법
// if(nameList.get(i).startsWith("김")) {
// System.out.println(nameList.get(i));
// }
// 네번째 방법
// if(nameList.get(i).indexOf("김") == 0) {
// System.out.println(nameList.get(i));
// }
// 다섯번째 방법
if(nameList.get(i).subSequence(0, 1).equals("김")) {
System.out.println(nameList.get(i));
}
}
}
}
[ArrayListTest03.java]
package kr.or.ddit.basic;
import java.util.ArrayList;
import java.util.Scanner;
/*
* 문제1) 5명의 별명을 입력받아 ArrayList에 추가한 후 이들 중
* 별명의 길이가 제일 긴 별명을 출력하시오.
* (단, 각 별명의 길이는 모두 다르게 입력한다.)
*/
public class ArrayListTest03 {
static Scanner sc = new Scanner(System.in);
public static void main(String[] args) {
// ArrayList<String> nameList = new ArrayList<String>();
//
// System.out.println("5명의 별명을 입력하세요...");
// for(int i=0; i<5; i++) {
// System.out.print((i+1) + "번째 별명 이름 >> ");
// String name = sc.nextLine();
// nameList.add(name);
// }
//
// System.out.println();
//
// System.out.println("별명의 길이가 제일 긴 별명은?");
//
// String temp = aliasList.get(0);
// int cnt = aliasList.get(0).length();
// for(int i=0; i<nameList.size(); i++) {
//// System.out.println(nameList.get(i).length());
// if(nameList.get(i).length() > cnt) {
// cnt = nameList.get(i).length();
// temp = nameList.get(i).toString();
// }
// }
//
// System.out.println(temp);
//
// System.out.println("--------------------------");
ArrayList<String> aliasList = new ArrayList<String>();
System.out.println("서로 다른 길이의 별명을 5번 입력하세요...");
for(int i=0; i<5; i++) {
System.out.print((i+1) + "번째 별명 >> ");
String alias = sc.nextLine();
aliasList.add(alias);
}
System.out.println();
// 제일 긴 별명이 저장될 변수 선언 ==> 이 변수에는 List의 첫 번째 데이터
String maxAlias = aliasList.get(0);
for(int i=1; i<aliasList.size(); i++) {
if(maxAlias.length() < aliasList.get(i).length()) {
maxAlias = aliasList.get(i);
}
}
System.out.println("제일 긴 별명 : " + maxAlias);
}
}
[ArrayListTest04.java]
package kr.or.ddit.basic;
import java.util.ArrayList;
import java.util.Scanner;
/*
* 문제2) 문제 1에서 입력할 때 각 별명의 길이가 같은 것이 있을 경우에 대하여 처리하시오.
*/
public class ArrayListTest04 {
static Scanner sc = new Scanner(System.in);
public static void main(String[] args) {
ArrayList<String> aliasList = new ArrayList<String>();
System.out.println("별명을 5번 입력하세요...");
for(int i=0; i<5; i++) {
System.out.print((i+1) + "번째 별명 >> ");
String alias = sc.nextLine();
aliasList.add(alias);
}
System.out.println();
// 제일 긴 별명의 길이가 저장될 변수 선언 ==> 이 변수는 첫 번째 데이터의 길이로 초기화한다.
int maxLength = aliasList.get(0).length();
for(int i=1; i<aliasList.size(); i++) {
if(maxLength < aliasList.get(i).length()) {
maxLength = aliasList.get(i).length();
}
}
System.out.println("제일 긴 별명들...");
for(int i=0; i<aliasList.size(); i++) {
if(maxLength == aliasList.get(i).length()) {
System.out.println(aliasList.get(i));
}
}
}
}
[StackQueueTest.java]
package kr.or.ddit.basic;
import java.util.LinkedList;
import java.util.Queue;
import java.util.Stack;
/*
* Stack ==> Last In First Out(LIFO), 후입선출
* Queue ==> First In First Out(FIFO), 선입선출
*
* Stack과 Queue는 LinkedList를 이용하여 사용할 수 있다.
* (Stack은 'Stack'이라는 클래스를 제공해 준다.)
*/
public class StackQueueTest {
public static void main(String[] args) {
/*
* - Stack의 명령
* 1. 자료 입력 : push(입력값)
* 2. 자료 출력 : pop() ==> 자료를 꺼내온 후 꺼내온 자료를 Stack에서 삭제한다.
* peek() ==> 삭제 없이 자료를 꺼내온다.
*/
Stack<String> stack = new Stack<String>();
stack.push("홍길동");
stack.push("일지매");
stack.push("변학도");
stack.push("강감찬");
System.out.println("현재 stack값 : " + stack); // 현재 stack값 : [홍길동, 일지매, 변학도, 강감찬]
System.out.println();
String data = stack.pop();
System.out.println("1번째 pop()으로 꺼내온 값 : " + data); // 1번째 pop()으로 꺼내온 값 : 강감찬
System.out.println("2번째 pop()으로 꺼내온 값 : " + stack.pop()); // 2번째 pop()으로 꺼내온 값 : 변학도
System.out.println("현재 stack값 : " + stack); // 현재 stack값 : [홍길동, 일지매]
System.out.println();
stack.push("성춘향");
System.out.println("push()로 추가한 후 stack값 : " + stack); // push()로 추가한 후 stack값 : [홍길동, 일지매, 성춘향]
System.out.println("pop()으로 꺼내온 값 : " + stack.pop()); // pop()으로 꺼내온 값 : 성춘향
System.out.println("현재 stack값 : " + stack); // 현재 stack값 : [홍길동, 일지매]
System.out.println();
System.out.println("삭제없이 꺼내온 값 : " + stack.peek()); // 삭제없이 꺼내온 값 : 일지매
System.out.println("현재 stack값 : " + stack); // 현재 stack값 : [홍길동, 일지매]
System.out.println();
System.out.println("-------------------------------------");
System.out.println();
/*
* - Queue의 명령
* 1. 자료 입력 : offer(입력값)
* 2. 자료 출력 : poll() ==> 자료를 꺼내오고 꺼내온 자료를 Queue에서 삭제한다.
* peek() ==> 삭제없이 자료를 꺼내온다.
*/
Queue<String> queue = new LinkedList<String>();
queue.offer("홍길동");
queue.offer("일지매");
queue.offer("변학도");
queue.offer("강감찬");
System.out.println("현재 queue의 값 : " + queue); // 현재 queue의 값 : [홍길동, 일지매, 변학도, 강감찬]
System.out.println();
String temp = queue.poll();
System.out.println("꺼내온 값 : " + temp); // 꺼내온 값 : 홍길동
System.out.println("꺼내온 값 : " + queue.poll()); // 꺼내온 값 : 일지매
System.out.println("현재 queue의 값 : " + queue); // 현재 queue의 값 : [변학도, 강감찬]
System.out.println();
queue.offer("성춘향");
System.out.println("offer()로 추가한 후 queue의 값 : " + queue); // offer()로 추가한 후 queue의 값 : [변학도, 강감찬, 성춘향]
System.out.println("꺼내온 값 : " + queue.poll()); // 꺼내온 값 : 변학도
System.out.println("현재 queue의 값 : " + queue); // 현재 queue의 값 : [강감찬, 성춘향]
System.out.println();
System.out.println("삭제없이 꺼내온 값 : " + queue.peek()); // 삭제없이 꺼내온 값 : 강감찬
System.out.println("현재 queue의 값 : " + queue); // 현재 queue의 값 : [강감찬, 성춘향]
System.out.println();
}
}
[StackTest.java]
package kr.or.ddit.basic;
import java.util.Stack;
public class StackTest {
public static void main(String[] args) {
Browser b= new Browser();
b.goURL("1. 네이버");
b.history();
// 1. 네이버 사이트에 접속합니다...
//
// --------------------------
// 방 문 기 록
// --------------------------
// back ==> []
// 현재페이지 ==> 1. 네이버
// forward ==> []
// --------------------------
b.goURL("2. 야후");
b.history();
// 2. 야후 사이트에 접속합니다...
//
// --------------------------
// 방 문 기 록
// --------------------------
// back ==> [1. 네이버]
// 현재페이지 ==> 2. 야후
// forward ==> []
// --------------------------
b.goURL("3. 구글");
b.history();
// 3. 구글 사이트에 접속합니다...
//
// --------------------------
// 방 문 기 록
// --------------------------
// back ==> [1. 네이버, 2. 야후]
// 현재페이지 ==> 3. 구글
// forward ==> []
// --------------------------
b.goURL("4. 다음");
b.history();
// 4. 다음 사이트에 접속합니다...
//
// --------------------------
// 방 문 기 록
// --------------------------
// back ==> [1. 네이버, 2. 야후, 3. 구글]
// 현재페이지 ==> 4. 다음
// forward ==> []
// --------------------------
System.out.println("뒤로 가기 후...");
b.goBack();
b.history();
// 뒤로 가기 후...
//
// --------------------------
// 방 문 기 록
// --------------------------
// back ==> [1. 네이버, 2. 야후]
// 현재페이지 ==> 3. 구글
// forward ==> [4. 다음]
// --------------------------
System.out.println("뒤로 가기 후...");
b.goBack();
b.history();
// 뒤로 가기 후...
//
// --------------------------
// 방 문 기 록
// --------------------------
// back ==> [1. 네이버]
// 현재페이지 ==> 2. 야후
// forward ==> [4. 다음, 3. 구글]
// --------------------------
System.out.println("앞으로 가기 후...");
b.goForward();
b.history();
// 앞으로 가기 후...
//
// --------------------------
// 방 문 기 록
// --------------------------
// back ==> [1. 네이버, 2. 야후]
// 현재페이지 ==> 3. 구글
// forward ==> [4. 다음]
// --------------------------
System.out.println("새로운 사이트 접속 후..."); // forward를 비워야 한다.
b.goURL("5. 네이트");
b.history();
// 새로운 사이트 접속 후...
// 5. 네이트 사이트에 접속합니다...
//
// --------------------------
// 방 문 기 록
// --------------------------
// back ==> [1. 네이버, 2. 야후, 3. 구글]
// 현재페이지 ==> 5. 네이트
// forward ==> []
// --------------------------
}
}
// 웹브라우저의 앞으로 가기, 뒤로 가기 기능 구현하기(Stack 이용)
class Browser {
private Stack<String> back; // 이전 방문 내역이 저장될 스택, url 주소가 문자열.
private Stack<String> forward; // 다음 방문 내역이 저장될 스택, url 주소가 문자열.
private String currentURL; // 현재 페이지 주소가 저장될 변수.
// 생성자
public Browser() {
back = new Stack<String>();
forward = new Stack<String>();
currentURL = "";
}
// 사이트를 방문하는 메서드 ==> 매개변수에 방문할 URL주소가 저장된다.
public void goURL(String url) {
System.out.println(url + " 사이트에 접속합니다...");
if(currentURL != null && !"".equals(currentURL)) { // 현재 페이지가 있으면...
back.push(currentURL); // 현재 페이지를 back 스택에 추가한다.
}
currentURL = url; // 현재 페이지를 변경한다.
forward.clear(); // forward스택의 데이터를 전부 삭제한다.
}
// 뒤로 가기 기능 구현
public void goBack() {
// isEmpty() ==> Collection에 데이터가 없으면 true, 그렇지 않으면 false를 반환한다.
if(!back.isEmpty()) { // back스택에 값이 있으면...
forward.push(currentURL); // 현재 페이지를 forward 스택에 추가한다.
currentURL = back.pop(); // back 스택에서 1개의 요소를 꺼내와 현재 페이지로 한다.
}
}
// 앞으로 가기 기능 구현
public void goForward() {
if(!forward.isEmpty()) { // forward스택에 값이 있으면...
back.push(currentURL); // 현재 페이지를 back스택에 추가한다.
currentURL = forward.pop(); // forward 스택에서 1개의 요소를 꺼내와 현재 페이지로 한다.
}
}
// 방문 기록 확인하기
public void history() {
System.out.println();
System.out.println("--------------------------");
System.out.println(" 방 문 기 록");
System.out.println("--------------------------");
System.out.println("back ==> " + back);
System.out.println("현재페이지 ==> " + currentURL);
System.out.println("forward ==> " + forward);
System.out.println("--------------------------");
System.out.println();
}
}
[ListSortTest01.java]
package kr.or.ddit.basic;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
public class ListSortTest01 {
public static void main(String[] args) {
ArrayList<String> list = new ArrayList<String>();
list.add("일지매");
list.add("홍길동");
list.add("성춘향");
list.add("변학도");
list.add("이순신");
System.out.println("정렬 전 : " + list); // 정렬 전 : [일지매, 홍길동, 성춘향, 변학도, 이순신]
// 정렬은 Collections.sort() 메서드를 이용하여 정렬한다.
// Collections.sort() 메서드는 기본적으로 내부 정렬 기준으로 정렬한다.
Collections.sort(list);
System.out.println("오름차순 정렬 후 : " + list); // 오름차순 정렬 후 : [변학도, 성춘향, 이순신, 일지매, 홍길동]
// 내부 정렬 기준? 리스트 안에 들어간 데이터 종류에 따라 정렬.
// String 클래스 안에는 이미 정렬 기준이 있다는 말.
// ㄱ~ㅎ 순으로 오름차순 정렬.
// a~z, A~z 순으로 오름차순 정렬.
// 내림차순 정렬은 어떻게 할까? 이럴 때를 대비해서 내가 정렬 기준을 만들 수 있다. 즉, 오름차순일지 내림차순일지에 대한 기준을 설정할 수 있다.
Collections.shuffle(list); // 자료 섞기
System.out.println("자료 섞은 후 : " + list); // 다시 실행 될 때마다 난수를 이용해 순서가 바뀜.
// 외부 정렬 기준 클래스를 지정해서 정렬하기
Collections.sort(list, new Desc());
System.out.println("내림차순 정렬후 : " + list); // 내림차순 정렬후 : [홍길동, 일지매, 이순신, 성춘향, 변학도]
}
}
/*
정렬(sort)와 관련된 interface는 Comparable, Comparator 이렇게 두 가지가 있다.
- Comparable은 Collection에 추가되는 데이터 자체에 정렬 기준을 넣고 싶을 때(내부 정렬 기준)
구현하는 인터페이스이다.
- Comparator는 외부에 별도로 정렬 기준을 구현하고 싶을 때(외부 정렬 기준) 구현하는 인터페이스이다.
- Comparable에서는 compareTo() 메서드를 재정의하고
Comparator에서는 compare() 메서드를 재정의해야 한다.
- String클래스, Wrapper클래스, Date클래스, File클래스 등에는 이미 내부 정렬 기준이 구현되어 있다.
(내부 정렬 기준은 오름차순으로 처리되도록 구현되어 있다.)
*/
// 1, 4, 6, 2, 5
// 정렬 방식을 정해주는 class를 작성한다. (외부 정렬 기준 클래스라고 한다.)
// Comparator 인터페이스를 구현해서 작성한다.
class Desc implements Comparator<String> {
// compare() 메서드의 매개변수는 서로 인접한 2개의 데이터가 저장된다고 가정하여 처리한다.
// compare() 메서드의 반환값의 의미
// 반환값이 '0'이라면 두 값이 같다. (순서는 바뀌지 않는다.)
// 반환값이 양수일 경우에는 앞, 뒤의 순서를 바꾼다.
// 반환값이 음수일 경우에는 순서를 바꾸지 않는다.
// 예) 오름차순 정렬일 경우 ==> 앞의 값이 크면 양수, 같으면 0, 앞의 값이 작으면 음수를 반환하도록 구현한다.
@Override
public int compare(String str1, String str2) {
// 내림차순으로 구현하려 한다.
// if(str1.compareTo(str2) > 0) {
// return -1; // 앞의 수가 크고 뒤의 수가 작으므로 내림차순일 경우 순서를 바꾸면 안 된다.
// }else if(str1.compareTo(str2) < 0) {
// return 1; // 앞의 수가 작고 뒤의 수가 크므로 내림차순일 경우 순서를 바꿔야 한다.
// }else {
// return 0; // 두 값이 같으므로 순서를 바꾸지 않는다.
// }
return str1.compareTo(str2) * -1;
}
}
[ListSortTest02.java]
package kr.or.ddit.basic;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
public class ListSortTest02 {
public static void main(String[] args) {
ArrayList<Member> memList = new ArrayList<Member>();
memList.add(new Member(1, "홍길동", "010-1111-1111"));
memList.add(new Member(5, "이순신", "010-2222-1111"));
memList.add(new Member(9, "성춘향", "010-3333-1111"));
memList.add(new Member(3, "강감찬", "010-4444-1111"));
memList.add(new Member(6, "일지매", "010-5555-1111"));
memList.add(new Member(2, "변학도", "010-6666-1111"));
System.out.println("정렬전...");
for(Member mem : memList) {
System.out.println(mem);
}
System.out.println("--------------------------------------------");
// Member의 num값의 내림차순으로 정렬하는 외부 정렬 기준 클래스를 이용하여 정렬하시오.
// (클래스명 : SortNumDesc)
// 외부 정렬 기준 클래스를 지정해서 정렬하기
Collections.sort(memList, new SortNumDesc());
System.out.println("정렬후...");
for(Member mem : memList) {
System.out.println(mem);
}
}
}
class Member {
private int num;
private String name;
private String tel;
// 생성자, alt+shift+s로 자동 생성.
public Member() {}
public Member(int num, String name, String tel) {
this.num = num;
this.name = name;
this.tel = tel;
}
// getter, setter, alt+shift+s로 자동 생성.
public int getNum() {
return num;
}
public void setNum(int num) {
this.num = num;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getTel() {
return tel;
}
public void setTel(String tel) {
this.tel = tel;
}
@Override
public String toString() {
return "Member [num=" + num + ", name=" + name + ", tel=" + tel + "]";
}
}
// SortNumDesc
class SortNumDesc implements Comparator<Member> {
// compare() 메서드의 매개변수는 서로 인접한 2개의 데이터가 저장된다고 가정하여 처리한다.
// compare() 메서드의 반환값의 의미
// 반환값이 '0'이라면 두 값이 같다. (순서는 바뀌지 않는다.)
// 반환값이 양수일 경우에는 앞, 뒤의 순서를 바꾼다.
// 반환값이 음수일 경우에는 순서를 바꾸지 않는다.
// 예) 오름차순 정렬일 경우 ==> 앞의 값이 크면 양수, 같으면 0, 앞의 값이 작으면 음수를 반환하도록 구현한다.
@Override
public int compare(Member mem1, Member mem2) {
// Integer num1 = mem1.getNum();
// Integer num2 = mem2.getNum();
//
// // 내림차순으로 구현하려 한다.
// if(num1.compareTo(num2) > 0) {
// return -1; // 앞의 수가 크고 뒤의 수가 작으므로 내림차순일 경우 순서를 바꾸면 안 된다.
// }else if(num1.compareTo(num2) < 0) {
// return 1; // 앞의 수가 작고 뒤의 수가 크므로 내림차순일 경우 순서를 바꿔야 한다.
// }else {
// return 0; // 두 값이 같으므로 순서를 바꾸지 않는다.
// }
/////////////////////////////////////////////
if(mem1.getNum() > mem2.getNum()) {
return -1;
}else if(mem1.getNum() < mem2.getNum()) {
return 1;
}else {
return 0;
}
}
}
'대덕인재개발원_자바기반 애플리케이션' 카테고리의 다른 글
230829_컬렉션 프레임워크 6 (1) | 2023.08.29 |
---|---|
230828_컬렉션 프레임워크 5 (1) | 2023.08.28 |
230825_컬렉션 프레임워크 4 (0) | 2023.08.25 |
230824_컬렉션 프레임워크 3 (1) | 2023.08.24 |
230822_컬렉션 프레임워크 1 (0) | 2023.08.22 |