고급자바

김강산·2022년 7월 25일
0

고급JAVA

목록 보기
4/15

ArrayList

package kr.or.ddit.basic;

import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;
import java.util.List;
import java.util.ListIterator;

public class T01ArrayListTest {
public static void main(String[] args) {
// ArrayList는 기본적인 사용법이 Vector와 같다.
// Default Capacity = 10;
List list1 = new ArrayList();

	// add()메서드를 이용하여 데이터 추가한다.
	list1.add("aaa");
	list1.add("bbb");
	list1.add(111);
	//list1.add(new Integer(111)); 이랑 똑같다
	list1.add('k');
	list1.add(true);
	list1.add(12.34);
	
	//size() => 데이터의 갯수
	System.out.println("size => " + list1.size());
	System.out.println("list => " + list1);
	
	// get으로 데이터 꺼내오기
	System.out.println("1번째 자료 :" + list1.get(0)); //인덱스 값
	
	//데이터 끼워 넣기도 같다.
	list1.add(0, "zzz"); // 인덱스 값의 위치에 끼워넣기
	System.out.println("list1 => " + list1);
	
	//데이터 변경하기(set메서드)
	String temp = (String) list1.set(0, "YYY"); // 인덱스 값 위치에 데이터를 변경
	System.out.println("temp => " + temp);
	System.out.println("list1 => " + list1);
	
	//삭제하기
	list1.remove(0); // 인덱스 값 위치에 데이터를 삭제
	System.out.println("삭제 후 :" + list1);
	
	list1.remove("bbb");
	System.out.println("bbb 삭제 후 : " + list1);
	System.out.println("=======================");
	
	// 숫자를 그냥 넣게되면 인덱스 값으로 인식해서 오류 발생

// list1.remove(111);
// System.out.println("111삭제후 : " + list1);

	// 숫자를 지우기위해선 새로 객체를 생성해주어야 가능
	list1.remove(new Integer(111));
	System.out.println("111삭제후 : " + list1);
	
	// 제너릭을 지정하여 선언할 수 있다.
	List<String> list2 = new ArrayList<String>();
	list2.add("AAA");
	list2.add("BBB");
	list2.add("CCC");
	list2.add("DDD");
	list2.add("EEE");
	
	for(int i=0; i<list2.size(); i++) {
		System.out.println(i + " : " + list2.get(i));
	}
	System.out.println("---------------------------------------------");
	
	// 향상된 for문(foreach 문)
	for(String s : list2) {
		System.out.println(s);
	}
	
	// contains(비교객체); => 리스트에 '비교객체'를 찾아 '비교객체'가
	//											 있으면 true, 엾으면 false 리턴함.
	System.out.println(list2.contains("DDD"));
	System.out.println(list2.contains("ZZZ"));
	
	// indexOf(비교객체); => 리스트에서 '비교객체'를 찾아 '비교객체' 가
	//											 있는 index값을 반환한다. 엾으면 -1 반환함.
	System.out.println("DDD의 index값 : "
			                             + list2.indexOf("DDD"));
	System.out.println("ZZZ의 index값 : "
										 + list2.indexOf("ZZZ"));
	System.out.println("---------------------------------------------------");
	
	// toArray() => 리스트 안의 데이터들을 배열로 반환하여 반환한다.
	//							기본적으로 Object형 배열로 반환한다.
	Object[] strArr = list2.toArray();
	System.out.println("배열의 개수 : " + strArr.length);
	
	// 리스트의 제너릭 타입에 맞는 자료형의 배열로 반환하는 방법
	// 제너릭타입의 0개짜리의 배열을 생성해서 배열변수로 넣어준다.
	// 형식) toArray(new 제너릭타입[0])
	String[] strArr2 = list2.toArray(new String[0]);
	System.out.println("strArr2의 개수 : " + strArr2.length);
	
	// 리스트 삭제처리
	for(int i=0; i<list2.size(); i++) {
			list2.remove(list2.get(i));
	}
	
	System.out.println(list2.size());
	
}

}

class MyArrayList implements List {

@Override
public boolean add(Object e) {
	// TODO Auto-generated method stub
	return false;
}

@Override
public void add(int index, Object element) {
	// TODO Auto-generated method stub
	
}

@Override
public boolean addAll(Collection c) {
	// TODO Auto-generated method stub
	return false;
}

@Override
public boolean addAll(int index, Collection c) {
	// TODO Auto-generated method stub
	return false;
}

@Override
public void clear() {
	// TODO Auto-generated method stub
	
}

@Override
public boolean contains(Object o) {
	// TODO Auto-generated method stub
	return false;
}

@Override
public boolean containsAll(Collection c) {
	// TODO Auto-generated method stub
	return false;
}

@Override
public Object get(int index) {
	// TODO Auto-generated method stub
	return null;
}

@Override
public int indexOf(Object o) {
	// TODO Auto-generated method stub
	return 0;
}

@Override
public boolean isEmpty() {
	// TODO Auto-generated method stub
	return false;
}

@Override
public Iterator iterator() {
	// TODO Auto-generated method stub
	return null;
}

@Override
public int lastIndexOf(Object o) {
	// TODO Auto-generated method stub
	return 0;
}

@Override
public ListIterator listIterator() {
	// TODO Auto-generated method stub
	return null;
}

@Override
public ListIterator listIterator(int index) {
	// TODO Auto-generated method stub
	return null;
}

@Override
public boolean remove(Object o) {
	// TODO Auto-generated method stub
	return false;
}

@Override
public Object remove(int index) {
	// TODO Auto-generated method stub
	return null;
}

@Override
public boolean removeAll(Collection c) {
	// TODO Auto-generated method stub
	return false;
}

@Override
public boolean retainAll(Collection c) {
	// TODO Auto-generated method stub
	return false;
}

@Override
public Object set(int index, Object element) {
	// TODO Auto-generated method stub
	return null;
}

@Override
public int size() {
	// TODO Auto-generated method stub
	return 0;
}

@Override
public List subList(int fromIndex, int toIndex) {
	// TODO Auto-generated method stub
	return null;
}

@Override
public Object[] toArray() {
	// TODO Auto-generated method stub
	return null;
}

@Override
public Object[] toArray(Object[] a) {
	// TODO Auto-generated method stub
	return null;
}

}

Stack, Queue

package kr.or.ddit.basic;

import java.util.LinkedList;

public class T02StackQueueTest {
public static void main(String[] args) {
// Stack => 후입선출(LIFO)구조
// Queue => 선입선출(FIFO)구조

	// Stack과 Queue는 LinkedList를 이용하여 사용할 수 있다.
	//push 나 pop은 LinkedList에만 있어서 LinkedList만 앞에 사용한다
	LinkedList<String> stack = new LinkedList<String>();
	
	/*
	 * 		stack 명령
	 * 		1) 자료 입력 : push(저장할 값)
	 * 		2) 자료 출력 :  pop() => 자료를 꺼내온 후 꺼내온 자료를 stack에서 삭제한다.
	 * 
	 */
	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("===================================");
	System.out.println();
	
	LinkedList<String> queue = new LinkedList<String>();
	/*
	 * 		Queue의 명령
	 * 		1) 자료 입력 : offer(저장할 값)
	 * 		2) 자료 출력: poll() => 자료를 Queue에서 꺼내온 후 꺼내온 자료를 Queue에서 삭제한다.
	 *  
	 */
	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);
	
	if(queue.offer("성춘향")) {
		System.out.println("신규 등록 자료 : 성춘향");
		
	}
	System.out.println("현재 queue의 값 : " + queue);
	System.out.println("꺼내온 자료 : " + queue.poll());
	
}

}

List Sort

package kr.or.ddit.basic;

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

public class T03ListSortTest {
/*
정렬과 관련된 interface는 Comparable과 Comparator 두가지가 있다.

- 보통 객체 자체에 정렬 기능을 넣기 위해서는 Comparable을 구현하고
정렬 기준을 별도로 구현하고 싶은 경우에는 Comparator를 구현하여 사용한다.
*/
public static void main(String[] args) {
List list = new ArrayList();

	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);
	
	Collections.sort(list, new Desc());
	System.out.println("외부정렬자로 정렬 후 : " + list);
}

}

/*

  • 정렬방식을 결정하는 class는 Comparator라는 인터페이스를 구현해야 한다.
  • 이 Comparator인터페이스의 compare()라는 메서드를 재정의 하여 구현하면 된다.
    /
    class Desc implements Comparator {
    /

    compare()메서드의 반환값을 결정하는 방법
    => 이 매서드가 양수를 반환하면 두값의 순서가 바뀐다.(오름차순이 기본임.)
    *
    - 오름차순 정렬일 경우..
    => 앞의 값이 크면 양수, 같으면 0, 앞의 값이 작으면 음수를 반환하도록 한다.
    *
    - String객체에는 정렬을 위해서 compareTo()메서드가 구현되어 있는데
    이 메서드의 반환값은 오름차순에 맞게 반환되도록 구현되어 있다.
    (Wrapper클래스와 Date, File 클래스에도 구현되어 있다.)

    *
    */
    @Override
    public int compare(String str1, String str2) {
    	
    	return str1.compareTo(str2) * -1;
    }
    }

List Sort2

package kr.or.ddit.basic;

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

public class T04LIstSortTest {
public static void main(String[] args) {

	Member mem1 = new Member(1, "홍길동", "010-1111-1111");
	Member mem2 = new Member(1, "홍길동", "010-1111-1111");
	
	System.out.println(mem1.equals(mem2));
	
	List<Member> memList = new ArrayList<Member>();
	
	memList.add(new Member(1, "홍길동", "010-1111-1111"));
	memList.add(new Member(5, "변학도", "010-1111-2222"));
	memList.add(new Member(9, "성춘향", "010-1111-3333"));
	memList.add(new Member(3, "이순신", "010-1111-4444"));
	memList.add(new Member(6, "강감찬", "010-1111-5555"));
	memList.add(new Member(2, "일지매", "010-1111-6666"));
	
	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("-------------------------------------");
	
	Collections.sort(memList, new SortNumDesc());
	System.out.println("번호의 내림차순 정렬 후 :");
	for(Member mem : memList) {
		System.out.println(mem);
	}
	System.out.println("================================");
	
}

}
/*

  • 정렬 기준의 외부 선언을 위해서는 Comparator인터페이스를 구현하면 된다.
  • Member의 번호(num)의 내림차순으로 정렬하기
    */

class SortNumDesc implements Comparator {

@Override
public int compare(Member mem1, Member mem2) {
	

// if(mem1.getNum() > mem2.getNum()) {
// return -1;
// } else if(mem1.getNum() == mem2.getNum()) {
// return 0;
// } else {
// return 1;
// }
// Wrapper클래스에서 제공하는 메서드를 이용하는 방법

	return new Integer(mem1.getNum()).compareTo(mem2.getNum()) * -1;
	
}

}

class Member implements Comparable {

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) {
	return this.getName().compareTo(mem.getName());
}

}

0개의 댓글