package kr.or.ddit.basic;

import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;

public class ListSortText02 {

	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("---------------------------------------");
		
		Collections.sort(memList);
		System.out.println("정렬 후 ...");
		for(Member mem : memList) {
			System.out.println(mem);
		}
		System.out.println("---------------------------------------");
		
		// 회원 이름을 기준으로 오름차순 정렬하는 외부 정렬 기준 클래스를 이용하여 정렬하시오.
		// 클래스이름은 SortNameAsc로 한다.
		Collections.sort(memList, new SortNameAsc());
		System.out.println("회원의 이름을 기준으로 오름차순 정렬 후...");
		for(Member mem : memList) {
			System.out.println(mem);
		}
		System.out.println("---------------------------------------");
	}
	

}


// 회원번호를 기준으로 오름차순 정렬이 되도록 내부 정렬 기준을 추가해 주기.
// ==> Comparable인터페이스를 구현한다.
class Member implements Comparable<Member>{
	private int num; 		// 회원 번호
	private String name; 	// 회원 이름
	private String tel;		// 전화번호
	
	//생성자
	public Member(int num, String name, String tel) {
		super();
		this.num = num;
		this.name = name;
		this.tel = tel;
	}

	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 + "]";
	}
	
	// 회원번호를 기준으로 오름차순 정렬
	@Override
	public int compareTo(Member mem) {
//		if(this.num > mem.getNum()) {
//			return 1; 	// 양수를 반환하면 두 값의 순서가 바뀐다.
//		}else if(this.num < mem.getNum()) {
//			return -1;
//		}else {
//			return 0;			
//		}
		
		 return this.num - mem.getNum(); // 두 값이 모두 양수일 때 사용 가능
		 
		 // Wrapper 클래스를 이용하는 방법 
//		 return new Integer(this.num).compareTo(mem.getNum());
		
	 	 // Wrapper 클래스를 이요하는 방법 2
//		 return Integer.compare(this.num, mem.getNum());
		  
		
	}
	
	
}

class SortNameAsc implements Comparator<Member>{
	// 회원 이름을 기준으로 오름차순 정렬하는 외부 정렬 기준 클래스를 이용하여 정렬하시오.
	
	
	@Override
	public int compare(Member mem1, Member mem2) {
		// TODO Auto-generated method stub
		return mem1.getName().compareTo(mem2.getName())  ;
	}
	
}

'JAVA 복습 & 정리' 카테고리의 다른 글

[HighJava] ListSort  (0) 2022.12.20
[HighJava] Stacktest  (1) 2022.12.20
[HighJava] Stack,Queue  (0) 2022.12.20
[HighJava] ArrayListTest04  (0) 2022.12.20
[HighJava] ArrayListTest03  (0) 2022.12.20
정렬과 관련된 interface는 Comparable, Comparator 이렇게 두 가지가 있다.
- Comparable은 Collection에 추가되는 데이터 자체에 정렬 기준을 넣고 싶을 때 구현하는 interface이다.
 이것을 내부 정렬 기준이라 한다.
- Comparator는 외부에 별도로 정렬 기준을 구현하고 싶을 때 구현하는 interface이다.
 이것을 외부 정렬 기준이라 한다. // 외부정렬기준은 내가 정의한 기준으로 정렬 가능?
- Comparable에서는 CompareTo()메서드를 재정의하고
  Comparator에서는 compare()메서드를 재정의 해야 한다.
- String클래스, Wrapper클래스, Date클래스, File클래스에는 내부 정렬 기준이 구현되어 있다.
(내부 정렬 기준은 오름 차순으로 처리되도록 구현되어 있다.)
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); //정렬기준 기본값이 오름차순
		
		Collections.shuffle(list); 		// 자료 섞기
		System.out.println("자료 섞기 후: " + list); // 출력할때마다 바뀜
		System.out.println();
		
		// 외부 정렬 기준을 이용해서 정렬하기
		Collections.sort(list, new Desc());
		System.out.println("내림차순 정렬 후 : " + list);
		
	}

}
외부 정렬 기준을 구성하는 class 작성하기 ==> 외부 정렬 기준 클래스라고 한다.
==> Comparator 인터페이스를 구현해서 작성한다.

//이 compare()메서드를 이용하여 정렬하고자하는 기준을 정해준다.
// compare()메서드의 반환값의 의미
// (리턴값)0일 때 ==> 두 값이 같다.
// 양수 일 때 ==> 앞, 뒤의 순서를 바꾼다.
// 음수 일 때 ==> 앞, 뒤의 순서를 바꾸지 않는다.
// 예) 오름차순 정렬일 경우 ==> 앞의 값이 크면 양수, 같으면 0, 앞의값이 작으면 음수가 반환되도록 구현하면
         된다.
class Desc implements Comparator<String>{

	@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;
	}
	
}

'JAVA 복습 & 정리' 카테고리의 다른 글

[HighJava] ListSort02  (0) 2022.12.20
[HighJava] Stacktest  (1) 2022.12.20
[HighJava] Stack,Queue  (0) 2022.12.20
[HighJava] ArrayListTest04  (0) 2022.12.20
[HighJava] ArrayListTest03  (0) 2022.12.20
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();
		
		b.goURL("2. 야후");
		b.history();
		
		b.goURL("3. 구글");
		b.goURL("4. 다음");
		b.history();
		
		System.out.println();
		System.out.println("뒤로가기 후...");
		b.goBack();
		b.history();
		
		System.out.println("뒤로가기 후...");
		b.goBack();
		b.history();
		
		System.out.println("앞으로가기 후...");
		b.goForward();
		b.history();
		System.out.println();
		
		System.out.println("새로운 사이트 접속 후 ...");
		b.goURL("5. 네이트");
		b.history();
	}

}

// 웹 브라우저의 앞으로 가기, 뒤로 가기 기능 구현하기(스택이용)
class Browser{
	private Stack<String> back;		 	// 이전 방문 내역이 저장될 Stack
	private Stack<String> forward; 		// 다음 방문 내역이 저장될 Stack
	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(!"".equals(currentURL)) { // 주어진 URL로 이동하기 전 현재페이지가 있으면...
			back.push(currentURL); // 현재페이지를 back스택에 추가한다.
			
		}
		currentURL = url; 		// 현재 페이지 변경
		forward.clear();  		// forward스택의 전체 데이터 삭제
	}
	
	// 뒤로가기
	public void goBack() {
		//isEmpty()메서드 ==> 컬렉션이 비어 있으면  true, 그렇지 않으면 false
		if(!back.isEmpty()) {
			forward.push(currentURL); 		// 현재 페이지를 forward스택에 추가
			currentURL = back.pop();		// back스택에서 1개의 요소를 꺼내와 현재 페이지로 한다.
		}
	}
	
	// 앞으로 가기
	public void goForward() {
		if(!forward.isEmpty()) {
			back.push(currentURL);   		// 현재 페이지를 back스택에 추가
			currentURL = forward.pop();     // forward스택에서 1개의 요소를 꺼내와 현재페이지로 한다.
		}
	}
	
	// 방문 기록을 확인하기
	public void history() {
		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();
	}
}

'JAVA 복습 & 정리' 카테고리의 다른 글

[HighJava] ListSort02  (0) 2022.12.20
[HighJava] ListSort  (0) 2022.12.20
[HighJava] Stack,Queue  (0) 2022.12.20
[HighJava] ArrayListTest04  (0) 2022.12.20
[HighJava] ArrayListTest03  (0) 2022.12.20
Stack ==> 후입선출(LIFO)의 자료구조
Queue ==> 선입선출(FIFO)의 자료구조

Stack의 명령
1. 자료 입력 : push(입력값)
2. 자료 출력 : pop() ==> 자료를 꺼내온 후 꺼내온 자료를 Stack에서 삭제한다.
                     peek() ==> 삭제없이 자료를 꺼내온다./ 데이터를 꺼내왔을때 내가 출력하고 싶은 데이터인지 확인
package kr.or.ddit.basic;

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

public class stackQueueTest {
	/*
	 	Stack ==> 후입선출(LIFO)의 자료구조
	 	
	 	Queue ==> 선입선출(FIFO)의 자료구조
	 */

	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);
			
			String data = stack.pop();
			System.out.println("꺼내온 값 : " + data);
			System.out.println("꺼내온 값 : " + stack.pop());
			System.out.println("현재 stack 값 : " + stack);
			
			stack.push("성춘향");
			System.out.println("추가 후 stack 값 : " + stack);
			
			System.out.println("꺼내온 값 : " + stack.pop());
			System.out.println("현재 stack 값 : " + stack);
			
			System.out.println("삭제없이 꺼내온 값 : " + stack.peek());
			System.out.println("현재 stack 값 : " + stack);
			
			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);
			
			String temp = queue.poll();
			System.out.println("꺼내온 값 : " + temp);
			System.out.println("꺼내온 값 : " + queue.poll());
			System.out.println("현재 queue 값 : " + queue);
			
			queue.offer("성춘향");
			System.out.println("현재 queue 값 : " + queue);
			
			System.out.println("꺼내온 값 : " + queue.poll());
			System.out.println("현재 queue 값 : " + queue);
			
			System.out.println("삭제없이 꺼내온 값 : "+ queue.peek());
			System.out.println("현재 queue 값 : " + queue);
			
	}

}

'JAVA 복습 & 정리' 카테고리의 다른 글

[HighJava] ListSort  (0) 2022.12.20
[HighJava] Stacktest  (1) 2022.12.20
[HighJava] ArrayListTest04  (0) 2022.12.20
[HighJava] ArrayListTest03  (0) 2022.12.20
[HighJava] ArrayListTest02  (0) 2022.12.20
문제) 5명의 별명을 입력 받아 ArrayList에 저장하고 이들 중 별명의 길이가 제일 긴 별명을 출력하시오. (단, 별명             의 길이가 같은것이 중복 될 수 있다.)
package kr.or.ddit.basic;

import java.util.ArrayList;
import java.util.Scanner;

/*
	문제) 5명의 별명을 입력 받아 ArrayList에 저장하고 이들 중
	         별명의 길이가 제일 긴 별명을 출력하시오.
	     (단, 별명의 길이가 같은것이 중복 될 수 있다.)    
*/

public class ArrayListTest04 {

	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		ArrayList<String> nicknamelist = new ArrayList<String>();
		
		System.out.println("별명을 5번 입력하세요 >> ");
		for(int i = 1; i <= 5; i++) {
			System.out.println( i + "번째 별명을 입력해주세요.");
			String nickname = sc.next();
			nicknamelist.add(nickname);
		}
		
		// 제일 긴 별명의 길이를 저장할 변수를 선언하고 첫번째 별명의 길이로 초기화한다.
		int maxLength = nicknamelist.get(0).length();
		
		for(int i =1; i<nicknamelist.size(); i++) {
			if(maxLength < nicknamelist.get(i).length()) {
				maxLength = nicknamelist.get(i).length();
			}
		}
		System.out.println("제일 긴 별명들 ...");
		for(int i = 0; i<nicknamelist.size(); i++) {
			if(maxLength == nicknamelist.get(i).length()) {
				System.out.println(nicknamelist.get(i));
			}
		}
	}

}

'JAVA 복습 & 정리' 카테고리의 다른 글

[HighJava] Stacktest  (1) 2022.12.20
[HighJava] Stack,Queue  (0) 2022.12.20
[HighJava] ArrayListTest03  (0) 2022.12.20
[HighJava] ArrayListTest02  (0) 2022.12.20
[HighJava] ArrayListTest01  (0) 2022.12.20
문제) 5명의 별명을 입력 받아 ArrayList에 저장하고 이들 중 별명의 길이가 제일 긴 별명을 출력하시오. (단, 별명            의 길이는 모두 다르게 입력한다.)
package kr.or.ddit.basic;

import java.util.ArrayList;
import java.util.Scanner;

/*
 	문제) 5명의 별명을 입력 받아 ArrayList에 저장하고 이들 중
 	         별명의 길이가 제일 긴 별명을 출력하시오.
 	     (단, 별명의 길이는 모두 다르게 입력한다.)    
 */

public class ArrayListTest03 {

	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		ArrayList<String> nicknamelist = new ArrayList<String>();
		
		for(int i = 1; i <= 5; i++) {
			System.out.println( i + "번째 별명을 입력해주세요.");
			String nickname = sc.next();
			nicknamelist.add(nickname);
		}
		
		// 제일 긴 별명이 저장될 변수를 선언하고 이 변수에는 List의 첫번째 별명을 초기화한다.
		String maxNickname = nicknamelist.get(0);
		
		for(int i=1; i<nicknamelist.size(); i++) {
			if(maxNickname.length() < nicknamelist.get(i).length()) {
				maxNickname = nicknamelist.get(i);
			}
		}
		System.out.println("제일 긴 별명: "+ maxNickname);
	}

}

'JAVA 복습 & 정리' 카테고리의 다른 글

[HighJava] Stack,Queue  (0) 2022.12.20
[HighJava] ArrayListTest04  (0) 2022.12.20
[HighJava] ArrayListTest02  (0) 2022.12.20
[HighJava] ArrayListTest01  (0) 2022.12.20
[HighJava] VectorTest  (0) 2022.12.20
문제) 5명의 사람 이름을 입력 받아 ArrayList에 저장한 후에 이들 중 '김'씨 성을 가진 사람의 이름을 출력하시오            (단, 입력은 Scanner객체를 이용한다.)
package kr.or.ddit.basic;

import java.util.ArrayList;
import java.util.Scanner;
/*
  	문제) 5명의 사람 이름을 입력 받아 ArrayList에 저장한 후에 
  		 이들 중 '김'씨 성을 가진 사람의 이름을 출력하시오
  		 (단, 입력은 Scanner객체를 이용한다.)
 */
public class ArrayListTest02 {

	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		
		ArrayList<String> namelist = new ArrayList<String>();

		
		System.out.println("이름을 입력하세요");
		for(int i=1; i<=5; i++) {
			System.out.print(i + "번째 사람 이름 : ");
			String name = sc.next();
			namelist.add(name);
		}
		System.out.println("성이 '김'씨인 사람 : ");
		for(int i = 0; i < namelist.size(); i++) {
//			if(namelist.get(i).indexOf("김") == 0) {
//				System.out.println(namelist.get(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));
			}
		}
		
		
		
	}

}

'JAVA 복습 & 정리' 카테고리의 다른 글

[HighJava] Stack,Queue  (0) 2022.12.20
[HighJava] ArrayListTest04  (0) 2022.12.20
[HighJava] ArrayListTest03  (0) 2022.12.20
[HighJava] ArrayListTest01  (0) 2022.12.20
[HighJava] VectorTest  (0) 2022.12.20
package kr.or.ddit.basic;

import java.util.ArrayList;

public class ArrayListTest01 {

	public static void main(String[] args) {
		//ArrayList는 기본적으로 사용법이 Vector와 같다.
		
		ArrayList list1 = new ArrayList();
		
		// add()메서드를 이용해서 추가한다.
		list1.add("AAA");
		list1.add("BBB");
		list1.add(123);
		list1.add('k');
		list1.add(false);
		list1.add(123.45);
		
		System.out.println("list1 => " + list1);
		System.out.println("size => " + list1.size());
		
		// get()메서드로 데이터를 꺼내온다.
		System.out.println("1번째 자료 : " + list1.get(1));
		
		// 데이터 끼워넣기도 같다.
		list1.add(3, "ZZZ");
		System.out.println("list1 => " + list1);
		
		// 데이터 변경하기
		String temp = (String) list1.set(3, "YYYY");
		System.out.println("list1 => " + list1);
		System.out.println("temp => " + temp);
		
		// 삭제도 같다.
		list1.remove(3);
		System.out.println("list1 => " + list1);
		
		list1.remove("BBB");
		System.out.println("list1 => " + list1);
		System.out.println("------------------------------------");
		
		// 제네릭을 사용할 수 있다.
		ArrayList<String> list2 = new ArrayList<String>();
		list2.add("aaaaa");
		list2.add("bbbbb");
		list2.add("ccccc");
		list2.add("ddddd");
		list2.add("eeeee");
		list2.add("ccccc");
		list2.add("fffff");
		
		for(int i = 0; i<list2.size(); i++) {
			System.out.println(i + " ==> " + list2.get(i));
		}
		System.out.println("--------------------------");
		
		for(String s : list2) {
			System.out.println(s);
		}
		System.out.println("--------------------------------");
		
		// contains(비교데이터)
		// ==> List에 '비교데이터'가 있으면 true, 없으면 false를 반환한다.
		System.out.println("zzzzz값 : " + list2.contains("zzzzz") ); //list2에 zzzzz가 있으면 true, 없으면 false
		System.out.println("ccccc값 : " + list2.contains("ccccc") ); 
		System.out.println("----------------------------");
		
		// indexOf(비교데이터) 
		// lastIndexOf(비교데이터)
		// ==> List에 '비교데이터'가 있으면 '비교데이터'가 있는 index값을 반환하고, 없으면 -1을 반환한다.
		// ==> indexOf()는 앞에서부터 검색하고 lastIndexOf()는 뒤에서부터 검색한다.
		System.out.println("ccccc의 위치값1 : " + list2.indexOf("ccccc"));
		System.out.println("ccccc의 위치값2 : " + list2.lastIndexOf("ccccc"));
		System.out.println("----------------------");
		
		// toArray() ==> List안의 데이터를 배열로 변환해서 반환한다.
		// 			 ==> 기본적으로 Object형 배열로 변환한다.
		// toArray(new 제네릭타입[0]) ==> 제네릭 타입의 배열로 반환한다.
		
		Object[] strArr = list2.toArray();
		// String[] strArr2 = (String[]) list2.toArray(); // 이런식의 형변환은 사용 불가
		
		System.out.println("배열의 개수 : " + strArr.length);
		for(int i = 0; i<strArr.length; i++) {
			System.out.println(i + "번째 자료 : " +strArr[i]);
		}
		System.out.println("-------------------------------------");
		
		String[] strArr2 = list2.toArray(new String[0]);
		for(String str : list2) {
			System.out.println(str);
		}
		
	}

}

'JAVA 복습 & 정리' 카테고리의 다른 글

[HighJava] Stack,Queue  (0) 2022.12.20
[HighJava] ArrayListTest04  (0) 2022.12.20
[HighJava] ArrayListTest03  (0) 2022.12.20
[HighJava] ArrayListTest02  (0) 2022.12.20
[HighJava] VectorTest  (0) 2022.12.20

+ Recent posts