** 예제 1204 (Vector) **
package etc;
import java.util.Vector;
public class MySample1204 {
public static void main(String[] args) {
// 벡터
Vector v = new Vector(5);
v.add("1");
v.add("2");
v.add("3");
print(v);
//빈 공간 없애기.(용량과 크기가 같게)
v.trimToSize();
System.out.println("v.trimToSize()...");
print(v);
//벡터 용량 증가
v.ensureCapacity(6);
System.out.println("v.ensureCapacity...");
print(v);
v.setSize(7); //총 7개 중 3개가 이미 값이 있으므로 4개는 null로 채움
System.out.println("v.setSize()...");
print(v); //6개를 다사용해서 2배로늘어난다. -> capacity : 12
//벡터의 data만 삭제됨. 기존 벡터의 size는 유지.
v.clear();
System.out.println("v.clear()...");
print(v);
}
public static void print(Vector v) {
System.out.println(v);
System.out.println("size : " + v.size());
System.out.println("capacity : " + v.capacity());
}
}
** Stack / Queue **
- 스택은 마지막에 저장한 데이터를 가장먼저 꺼내게 되는 LIFO(Last In First Out)
- 큐는 처음에 저장한 데이터를 가장 먼저 꺼내게 되는 FIFO(First In First Out)
- 큐는 인터페이스 -> 큐를 상속받은 LinkedList클래스
Stack 메소드 | 설 명 |
boolea empty() | Stack이 비어 있는지 알려줌 |
Object peek() | Stack 의 맨 위에 저장된 객체 반환 //다음주소값이 null이면 가장 위에있는 객체 |
Object pop() | 맨 위에 저장된 객체를 꺼낸다. |
Object push(Object item) | Stack 에 객체를 저장 |
int search(Object o) | 주어진 객체를 찾아 위치를 반환, 실패시 -1반환(위치는 1부터 시작) |
Queue 메소드 | 설 명 |
boolean add(Object o) | Queue에 추가 (성공하면 true)반환 |
Object remove() | Queue 에서 객체를 꺼내 반환 |
Object element() | 삭제없이 요소를 읽어옴 |
boolean offer(Object o) | 객체를 저장. 성공하면 true |
Object poll() | 객체를 꺼내서 반환 (비어있으면 null반환) |
Object peek() | 삭제없이 욧를 읽어옴 (비어있으면 null반환) |
** LinkedList 생성자와 메소드 **
생성자 또는 메소드 | 설 명 |
LinkedList(); | LinkedList 객체생성 |
boolean add(Object) | 지정된 객체를 LinkedList끝에 추가, 성공 true 실패false |
void add(int index, Object element) | 지정된 위치에 객체 추가 |
boolean addAll(int index, Collection c) | 지정된 위치에 주어진 컬렉션에 포함된 모든 요소를추가, 성공 true 실패false |
boolean contains(Object o) | 지정된 객체가 LinkedList에 포함되었는지 알려줌 |
boolean containsAll(Collection o) | 지정된 컬렉션의 모든 요소가 포함되었는지 알려줌 |
Object get(int index) | 지정된 위치의 객체를 반환 |
boolean isEmpty() | LinkedList가 비어 있는지 알려줌. 비어있으면 true |
boolean remove (Object o) | 지정된 객체 제거, 성공 true 실패false |
int size() | LinkedList에 저장된 객체 수 반환 |
boolean retainAll(Collection c) | 지정된 컬렉션의 모든 요소가 포함되어 있는지 확인 |
Object set(int index, Object element) | 지정된 위치에 객체를 주어진 객체로 바꿈 |
** 예제 MySample1204_2 **
package etc;
import java.util.LinkedList;
import java.util.Queue;
import java.util.Stack;
public class MySample1204_2 {
public static void main(String[] args) {
// Stack / Queue
Stack st = new Stack();
Queue q = new LinkedList(); //Queue인터페이스의 구혀네인 LinkedList사용
st.push("0");
st.push("1");
st.push("2");
q.offer("3");
q.offer("4");
q.offer("5");
System.out.println("Stack()------------");
while(!st.empty()) {
System.out.println(st.pop());
}
System.out.println("Queue()------------");
while(!q.isEmpty()) {
System.out.println(q.poll());
}
}
}
** 예제 MySample1204_3 **
package etc;
import java.util.List;
import java.util.ArrayList;
import java.util.LinkedList;
public class MySample1204_3 {
public static void main(String[] args) {
// ArrayList 와 LinkedList비교 (시간)
ArrayList a = new ArrayList(2000000);
LinkedList t = new LinkedList();
System.out.println("순차적으로 추가...");
System.out.println("ArrayList : " + add1(a));
System.out.println("LinkedList : " + add1(t) + "\n");
System.out.println("중간에 추가...");
System.out.println("ArrayList : " + add2(a));
System.out.println("LinkedList : " + add2(t) + "\n");
System.out.println("중간 삭제...");
System.out.println("ArrayList : " + remove2(a));
System.out.println("LinkedList : " + remove2(t) + "\n");
System.out.println("순차적으로 삭제...");
System.out.println("ArrayList : " + remove1(a));
System.out.println("LinkedList : " + remove1(t) + "\n");
}
//순차적으로 추가
public static long add1(List list) { //모든클래스의 부모인 List로 매개변수 받음
long start = System.currentTimeMillis(); //현재 시간을 밀리세컨드단위
for(int i = 0 ; i < 1000000 ; i++) {
list.add(i + "");
}
long end = System.currentTimeMillis();
return end - start;
}
//중간에 추가
public static long add2(List list) {
long start = System.currentTimeMillis();
for(int i = 0 ; i < 1000 ; i++) {
list.add(500, "X");
}
long end = System.currentTimeMillis();
return end - start;
}
//순차적으로 삭제
public static long remove1(List list) {
long start = System.currentTimeMillis();
for(int i = list.size()-1 ; i >= 0 ; i --) {
list.remove(i);
}
long end = System.currentTimeMillis();
return end - start;
}
//중간 삭제
public static long remove2(List list) {
long start = System.currentTimeMillis();
for(int i = 0 ; i < 10000 ; i++) {
list.remove(i);
}
long end = System.currentTimeMillis();
return end - start;
}
}
결론 : 순차적으로 추가/삭제하는 것은 ArrayList가 LinkedList 보다 빠르다.
결론 : 중간 데이터를 추가/삭제하는 것은 LinkedList가 ArrayList보다 빠르다.
** 예제 MySample1204_4 **
package etc;
import java.io.File;
import java.io.IOException;
public class MySample1204_4 {
public static void main(String[] args) throws IOException {
// File 클래스
//절대경로와 상대경로
File directory = new File("./tmep"); //상대경로 (./temp -> 상대경로의미) | ./ -> 현재디렉토리(.) 아래에있는(/) temp 라는 의미.
//File directory = new File("C:\\project\\JAVA\\MyProject\\temp"); //절대경로(풀경로를 다적어준다.)
directory.mkdir(); //디렉토리 생성
//temp디렉토리에 temp_file.txt 파일 생성
File file = new File(directory, "temp_file.txt"); //아직 파일이 만들어지지 않음.
file.createNewFile();
//생성file 객체가 디렉토리인지 파일인지 확인
if(directory.isDirectory()) {
System.out.println(directory.getName() + "은 디렉토리 입니다.");
}
if(file.isFile()) {
System.out.println(file.getName() + "은 파일입니다.");
System.out.println("파일 경로 : " + file.getPath());
System.out.println("파일 크기 : " + file.length() + "(bytes)");
System.out.println("쓰기 가능 여부 : " + file.canWrite());
System.out.println("읽기 가능 여부 : " + file.canRead());
}
//파일 삭제
if(file.delete()) {
System.out.println(file.getName() + "이 삭제되었습니다.");
}
//디렉토리 삭제
if(directory.delete()){
System.out.println(directory.getName() + "디렉토리가 삭제되었습니다.");
}
}
}
** 예제 MySample1204_5 **
package etc;
import java.io.File;
import java.util.Scanner;
import java.io.IOException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.BufferedReader;
import java.io.BufferedWriter;
public class MySample1204_5 {
public static void main(String[] args) throws IOException {
// // File객체를 이용하여 Scanner생성
// File file = new File("./temp/source_data.txt");
//
// Scanner scn = new Scanner(file);
//
// //파일의 내용을 라인 단위로 출력
// System.out.println(file.getName() + "파일의 데이터 내용.");
//
// while(scn.hasNextLine()) {
// System.out.println(scn.nextLine());
// }
//
// scn.close(); //->파일은 사용하고나면 닫아줘야한다.
// //BufferedReader 이용
// File file = new File("./temp/source_data.txt");
// FileReader reader = new FileReader(file);
// BufferedReader buffReader = new BufferedReader(reader);
//
// //파일 내용을 라인 단위로 출력
// System.out.println(file.getName() + "파일 데이터 내용.");
// String data = null;
//
// while((data = buffReader.readLine()) != null) {
// System.out.println(data.toString());
// }
//
// //입력스트림 종료
// reader.close();
// buffReader.close();
String filePath = "./temp/source_data.txt";
File file = new File(filePath);
if(!file.exists()) { //파일의 존재하는지 확인 후 해당파일이 없는경우 파일생성
file.createNewFile(); //신규생성
}
//BufferedWriter 생성
BufferedWriter writer = new BufferedWriter(new FileWriter(file, true));
//파일에 쓰기
writer.newLine();
writer.write("앗 월요일이다.");
writer.newLine();
writer.write("즐거운 점심시간입니다.");
writer.newLine();
//버퍼 및 스트림 정리
writer.flush(); //버퍼에 남은 데이터를 모두 쓰기
writer.close(); //스트림 종료
}
}
'수업끄적끄적_7MONTH > Java' 카테고리의 다른 글
12/01 수업 (22일차) _ SimpleDateFormat / 컬렉션 프레임웍 (Collections Framework) / (2) | 2023.12.01 |
---|---|
11/30 수업 (21회차) _ java.lang패키지 / String 클래스 / Calendar클래스 (2) | 2023.11.30 |
11/29 수업 (20회차) _ 예외 처리 (0) | 2023.11.29 |
11/28 수업 (19회차) _ 인터페이스 (0) | 2023.11.28 |
11/23 수업 (18회차) _ 다형성 예제 / Vector 클래스 / 추상 클래스 (1) | 2023.11.23 |