※Eclipse IDE for Enterprise Java Developers 202006 다운로드
eclips 켜서 - window - preference ->encoding 검색
1.workspace-> text encoding UTF-8 로 변경
2.CSS ,HTML JSP 도 UTF-8
1.Java Collection Framework
Java 컬렉션 프레임워크는 자바의 컬렉션(모음)객체들을 다루기 위해 제공되는 재사용 가능한 클래스 또는 인터페이스를 통칭하는 표현임 . 프레임워크(Framework)라 말하지만, 사실 라이브러리 (Library)처럼 사용
<List 인터페이스 특징>
1) 순서(인덱스)가 존재하는 데이터의 집합이다.
2) 데이터가 중복되어도 저장이 가능하다(순서만 다르면 중복저장 가능함)
<List 인터페이스를 구현하고 있는 클래스>
Stack, Vector, LinkedList, ArrayList
package kr.or.ddit.basic;
import java.util.ArrayList;
import java.util.List;
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'); // character
list1.add(true); // boolean
list1.add(12.34);
// 객체화 되었다 -> rapper class (Integer,character ...)
// size() ==> 데이터의 갯수
System.out.println("size =>" + list1.size());
System.out.println("list1 =>" + list1);
// get 으로 데이터 꺼내오기
System.out.println("1번째 자료 :" + list1.get(0));
// add 데이터를 끼워 넣기도 같다.
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);
// remove 삭제하기도 같다.
list1.remove(0);
System.out.println("삭제후: " + list1);
list1.remove("bbb");
System.out.println("bbb 삭제 후 :" + list1);
// list1.remove(111); 111번째 인덱스를 지우는 것이라고 인식함
list1.remove(new Integer(111));
System.out.println("111 삭제 후 " + list1);
System.out.println("----------------------------------------------------");
// 제너릭을 지정하여 선언할 수 있다. //String타입만 담겠다고 선언한 것
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);
}
System.out.println("----------------------------------------------------");
// contains(비교객체); =>리스트에 '비교객체'를 찾아 '비교객체'가 있으면 true, 없으면 false 리턴함
System.out.println(list2.contains("DDD"));
System.out.println(list2.contains("ZZZ"));
System.out.println("----------------------------------------------------");
// 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개짜리 배열을 생성해서 배열변수로 넣어준다.
// 형식)toArrray(new 제너릭타입[0])
String[] strArr2 = list2.toArray(new String[0]);
System.out.println("strArr2의 개수 : " + strArr2.length);
// 리스트 삭제처리
//ArrayList는 앞에것이 삭제되면 앞으로 계속 댕겨짐
//따라서 다지우고 싶다면 뒤에서 부터 지워야함
for (int i = 0; i < list2.size(); i++) {
list2.remove(list2.get(i));
}
System.out.println(list2.size());
}
}
<List 정렬>
1.List 정렬에 대해
- 정렬과 관련된 interface 는 Comparable 과 Comparator 두가지가 있다.
- 보통 객체 자체에 정렬 기능을 넣기 위해서는 Comparable 을 구현하고
위의 예제처럼 정렬기준을 별도로 구현하고 싶을떄는 Comparator 를 구현하여 사용하면 된다
- Comparable 에서는 compareTo() 메서드를 구현해야 하고,
Comparator 에서는 compare() 메서드를 구현해야 한다.
-정렬은 Collections.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<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);//SORT정렬 기능 //collection은 인터페이스
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<String>{
/*
* compare()메서드의 반환값을 결정하는 방법
* => 이 메서드가 양수를 반환하면 두값의 순서가 바뀐다.(오름차순이 기본임)
*
* -오름차순 정렬일 경우..
* =>앞의 값이 크면 양수, 같으면 0 앞의 값이 작으면 음수를 반환하도록 한다.
*
* -String 객체에는 정렬을 위해서 compareTo()메서드가 구성되어 있는데
* 이 메서드의 반환값은 오름차순에 맞게 반환되도록 구현되어 있다.
* (Wrapper 클래스와 Date,File 클래스에도 구현되어 있다)
*
*/
@Override
public int compare(String str1, String str2) {
return str1.compareTo(str2) * -1;
}
}
package kr.or.ddit.basic;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
public class T04ListSortTest {
public static void main(String[] args) {
List<Member> memList = new ArrayList<Member>();
memList.add(new Member(1,"홍길동","010-1111-1111"));
memList.add(new Member(5,"변학도","010-1111-1111"));
memList.add(new Member(9,"성춘향","010-1111-1111"));
memList.add(new Member(3,"이순신","010-1111-1111"));
memList.add(new Member(6,"강감찬","010-1111-1111"));
memList.add(new Member(2,"일지매","010-1111-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("-------------------------------------------");
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<Member>{
@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<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) {
// TODO Auto-generated method stub
return this.getName().compareTo(mem.getName());
}
}
<Stack & Queue>
Stack => First in Last out
후입선출(LIFO)구조 ex)(웹브라우저 (뒤로가기), eclips 에러 보고)
<stack 명령 >
1) 자료 입력 : push(저장할 값)
2) 자료 출력 : pop() => 자료를 꺼내온 후 꺼내온 자료를 stack에서 삭제한다.
Queue => First in First out
선입선출(FIFO)구조
<Queue의 명령>
1) 자료입력 : offer(저장할 값)
2) 자료출력 : poll() => 자료를 Queue에서 꺼내온 후 꺼내온 자료를 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를 이용하여 사용할 수 있다.
LinkedList<String> stack = new LinkedList<String>();
//List list = new LinkedList(); 도 가능
/*
* 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()); //2번째로 넣은 것
System.out.println("현재 queue의 값 : " + queue); //2개를 꺼내 2개 남음
if (queue.offer("성춘향")) {
System.out.println("신규 등록 자료: 성춘향");
}
System.out.println("현재 queue의 값 :" + queue);
System.out.println("꺼내온 자료 : " + queue.poll()); //가장 먼저 넣은것
}
}
*LinkedList도 list 타입의 컬렉션
'고급JAVA' 카테고리의 다른 글
Hashset (0) | 2022.07.23 |
---|---|
Comparable / Comparator (0) | 2022.07.23 |
Stack & Queue (0) | 2022.07.23 |
ArrayList (0) | 2022.07.23 |
고급자바 D2 (0) | 2022.07.22 |