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;
}
}
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());
}
}
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);
}
}
/*
@Override
public int compare(String str1, String str2) {
return str1.compareTo(str2) * -1;
}
}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("================================");
}
}
/*
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());
}
}