지구정복

[JAVA] 11/23 | 컬렉션(ArrayList, Set, Map), LIFO와 FIFO 컬렉션, Format클래스, 디렉토리/파일관련 메소드 본문

데이터 엔지니어링 정복/JAVA & JSP

[JAVA] 11/23 | 컬렉션(ArrayList, Set, Map), LIFO와 FIFO 컬렉션, Format클래스, 디렉토리/파일관련 메소드

nooh._.jl 2020. 11. 23. 11:55
728x90
반응형

 

API
    데이터
        임시 - 프로그램 종료되면 삭제
            한 개 데이터 - 변수나 상수
            여러개 데이터 - 객체, 배열 => 자료구조(자료를 저장하는 구조)
                    P722 컬렉션 프레임워크도 객체
        영구 - 영구저장
            로컬 - 파일
            원격 - 데이터베이스
            

Collection
	List
		ArrayList
		Vector
		LikedList
	Set
		HashSet
		TreeSet
	Map
		HashMap
		Hashtable
		TreeMap
		Properties

 

ㅇArrayList

-ArrayList 선언 및 값 저장

package ArrayEx01;

import java.util.ArrayList;

public class Array01 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		ArrayList ali1 = new ArrayList();
		ArrayList ali2 = new ArrayList(100); //저장공간 지정
		
		//object 메서드 이용
		//arraylist에 값 집어넣기
		ali1.add("박문수");
		String str = "이몽룡";
		ali1.add(str); // str이 object로 자동 형변환돼서 저장
        
                //int데이터는 Object가 되기 위해 자동적으로 오타박싱돼서 Integer로 바뀌어서 들어간다.
		ali1.add(1);
		ali1.add(3);
		
		//데이터 개수 출력
		System.out.println(ali1.size());
        
        	//데이터값 확인
		System.out.println(ali1.get(0));
		System.out.println(ali1.get(1));
		
	}

}

 

 

-데이터 안정성

동일 자료형을 넣어야하는 이유는 만약 자료형이 다른 데이터를 ArrayList에 저장하면 불러올 때 자료마다 자료형이 

다르기 때문에 문제가 생긴다.

따라서 ArrayList에 동일한 자료형을 넣어야 한다.

아래 예제에서 int를 불러오려고 하면 오류가 난다.

package ArrayEx01;

import java.util.ArrayList;

public class Array02 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		//데이터 안정성
		//자료구조 내부에 동일형태의 자료를 넣는다.
		
		ArrayList al1 = new ArrayList();
		ArrayList al2 = new ArrayList();
		
		//Object로 형변환돼서 들어간다.
		al1.add("박문수");	//Sting -> Object
		al1.add("이몽룡");	//Sting -> Object
		//al1.add(1); 		//int -> Integer -> Object
		
		//가져올 때는 다시 강제형변환시켜서 불러와야 한다.
		//만약 int 자료형을 불러오려고 하면 오류가 난다. 
		for(int i=0; i<al1.size(); i++) {
			String str = (String)al1.get(i);
			System.out.println(str);
			
		}
	}

}

 

따라서 처음부터 동일자료형을 저장하기 위해서

ArrayList<타입> = new ArrayList<타입>();

을 사용한다.

 

<> 이를 제네릭이라고 한다.

<String> 이 선언된 al2에 int 자료형을 넣으려고 하면 에러가 난다.

이렇게하면 굳이 자동, 강제형변환할 필요가 사라진다.

 

데이터의 안정성이 보장된다.

ArrayList<String> al2 = new ArrayList<String>();

al2.add("이몽룡");
al2.add(1);	//에러

//향상된 for문 사용
for(String str : al2) {
	System.out.println(str);
}

//결과
이몽룡
홍길동

 

-set과 remove()

package ArrayEx01;

import java.util.ArrayList;

public class Array03 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		//문자열 자료만 넣는 arraylist 만들기
		ArrayList<String> al1 = new ArrayList<String>();
		ArrayList<Integer> al2 = new ArrayList<Integer>();
		
		al1.add("이몽룡");
		al1.add("홍길동");
		
		al2.add(1);
		al2.add(2);
		
		for(String str : al1) {
			System.out.println(str);
		}
		
		//ArrayList 값 수정하기 - set 사용
		al1.set(0, "월매");
		
		for(String str : al1) {
			System.out.println(str);
		}
		
		//remove : 해당 인덱스만 지우기
		//removeAll : 전체 지우기
		al1.remove(0);
		for(String str : al1) {
			System.out.println(str);
		}
		
	}

}

 

-ArrayIndex 전체 예제

package ArrayEx01;

import java.util.ArrayList;
import java.util.List;

public class ArrayListEx01 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		List<String> list = new ArrayList<String>();
		
		list.add("Java");
		list.add("JDBC");
		list.add("Servlet/JSP");
		list.add(2, "Database");
		list.add("iBATIS");
		
		int size = list.size();
		System.out.println("총개체수: "+size);
		System.out.println();
		
		String skill = list.get(2);
		System.out.println("2: "+skill);
		System.out.println();
		
		for(int i=0; i<list.size(); i++) {
			String str = list.get(i);
			System.out.println(i+":"+ str);
		}
		System.out.println();
		
		list.remove(2);
		list.remove(2);
		list.remove("iBATIS");
		
		for(int i=0; i<list.size(); i++) {
			String str = list.get(i);
			System.out.println(i+":"+ str);
		}
	}

}

//결과
총개체수: 5

2: Database

0:Java
1:JDBC
2:Database
3:Servlet/JSP
4:iBATIS

0:Java
1:JDBC

 

-고정된 객체들로 구성된 List 생성하기

Array.asList(T... a) 메소드를 사용한다.

또한 해당 문자열의 인덱스값을 검색할 수 있다.

package ArrayEx01;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

public class Array04 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		List<String> al1 = Arrays.asList("홍길동", "신용권", "김자바");
		
		int index = al1.indexOf("김자바");
		System.out.println(index);
        
        for(String name:al1) {
			System.out.println(name);
		}
	}
}
//결과
2
홍길동
신용권
김자바

 

 

-ArrayList를 이용해서 객체 저장 및 불러오기

Person 클래스 생성

package ArrayEx01;

public class Person {
	private String jumin;
	private String name;
	private int age;
	
	//setter 대용 - 오른쪽클릭 > source > generate constructor
	public Person(String jumin, String name, int age) {
		super();
		this.jumin = jumin;
		this.name = name;
		this.age = age;
	}

	//getter 대용 - 오른쪽클릭 > source > generate toString()
	@Override
	public String toString() {
		return "Person [jumin=" + jumin + ", name=" + name + ", age=" + age + "]";
	}
}

main클래스에서 ArrayList의 제네릭을 Person타입으로 선언

package ArrayEx01;

import java.util.ArrayList;

public class Array05 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Person p1 = new Person("1111", "honggildong", 25);
		Person p2 = new Person("2222", "parkmunsu", 35);
		Person p3 = new Person("3333", "zizi", 45);
		
		ArrayList<Person> al = new ArrayList<Person>();
		al.add(p1);
		al.add(p2);
		al.add(p3);
		
		for(Person p : al) {
			System.out.println(p.toString());
		}
	}

}

--------------------
Person [jumin=1111, name=honggildong, age=25]
Person [jumin=2222, name=parkmunsu, age=35]
Person [jumin=3333, name=zizi, age=45]

 

ㅇset 컬렉션

set컬렉션은 저장 순서가 유지되지 않는다. list 컬렉션은 저장순서가 유지된다.

또한 객체를 중복해서 저장할 수 없다.

 

-HashSet 선언과 데이터 집어넣고 출력하기

HashSet 종복 배제의 원리는 

먼저 HashSet안에 있는 객체들의 HashCode 값을 비교하고 같은게 있다면 equlas()로 객체가 같은지 비교한다.

객체까지 같으면 중복이라 판단하고 저장하지 않는다.

package HashSet01;

import java.util.HashSet;
import java.util.Set;

public class HashSetEx01 {

	public static void main(String[] args) {
		HashSet<String> hs1 = new HashSet<String>();
		//부모인 set타입 객체변수를 자식인 HashSet타입으로 자동형변환시켜서 만든다.
		Set<String> hs2 = new HashSet<String>();
		
		hs1.add("아메리카노");
		hs1.add("에스프레소");
		hs1.add("카푸치노");
		
		System.out.println(hs1.size());
		System.out.println(hs1.toString());
		
		for(String str:hs1) {
			System.out.println(str);
		}
	}

}
//결과
3
[카푸치노, 아메리카노, 에스프레소]
카푸치노
아메리카노
에스프레소

 

만약 여기에 중복된 데이터를 add시키면 아래와 같다.

		hs1.add("아메리카노");
		hs1.add("에스프레소");
		hs1.add("카푸치노");
		hs1.add("모카");
		
		System.out.println(hs1.size());
		System.out.println(hs1.toString());
		
		for(String str:hs1) {
			System.out.println(str);
		}
        
        //결과
        4
[카푸치노, 아메리카노, 모카, 에스프레소]
카푸치노
아메리카노
모카
에스프레소

Iterator를 이용해서 데이터를 가져올 수도 있다.

Iterator 패키지 임포트 시키고

Iterator 인터페이스를 구현한 객체를 만든다. iterator() 메소드를 호출하면 얻을 수 있다.

 

hasNext() : 가져올 객체가 있으면 true, 없으면 false를 리턴한다.

next() : 컬렉션에서 하나의 객체를 가져온다.

remove() : set컬렉션에서 객체를 제거한다.

		System.out.println("\nIterator 패키지사용");
		Iterator<String> i = hs1.iterator();
		while(i.hasNext() ) {
			System.out.println(i.next());
		}
        
        //결과
        Iterator 패키지사용
카푸치노
아메리카노
모카
에스프레소

 

-HashSet 예제

package HashSet01;

import java.util.HashSet;
import java.util.Iterator;
import java.util.Set;

public class HashSetExample1 {

	public static void main(String[] args) {
		Set<String> set = new HashSet<String>();
		
		set.add("java");
		set.add("jdbc");
		set.add("servlet/jsp");
		set.add("java");	//java는 한 번만 저장된다.
		set.add("ibatis");
		
		int size = set.size();
		System.out.println("총 개체수: "+size);
		
		//반복자 얻기
		Iterator<String> iterator = set.iterator();
		while(iterator.hasNext()) {
			String element = iterator.next();
			System.out.println("\t"+element);
		}
		
		//객체 삭제하기
		set.remove("jdbc");
		set.remove("ibatis");
		
		System.out.println("총 개체수: "+set.size());
		
		iterator = set.iterator();
		while(iterator.hasNext()) {
			String element = iterator.next();
			System.out.println("\t"+element);
		}
		
		//모든 객체 제거하고 비움
		set.clear();
		if(set.isEmpty()) {System.out.println("비어있음");}
	}

}
ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ
	java
	servlet/jsp
	ibatis
	jdbc
총 개체수: 2
	java
	servlet/jsp
비어있음

 

 

-객체는 다르지만 값이 같은 객체를 제거하는 방법

Member 필드 선언

package HashSet01;

public class Member {
	public String name;
	public int age;
	
	public Member(String name, int age) {
		super();
		this.name = name;
		this.age = age;
	}

}

main클래스

package HashSet01;

import java.util.HashSet;

public class HashSetEx02 {

	public static void main(String[] args) {
		//내용은 같으나 객체가 다른 멤버
		Member m1 = new Member("hong", 25);
		Member m2 = new Member("hong", 25);
		
		HashSet<Member> hs = new HashSet<Member>();
		hs.add(m1);
		hs.add(m2);
		
		System.out.println(hs.size());
	}

}
ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ
2

 

이제 Member 클래스에 equals()와 hashCode() 메서드를 오버라이드해서

같은 값인데 객체가 다를 경우에도 저장하지 않는 경우를 만들어보자.

Member클래스에 아래와 같이 오버라이드 해준다.

package HashSet01;

public class Member {
	public String name;
	public int age;
	
	public Member(String name, int age) {
		super();
		this.name = name;
		this.age = age;
	}
	
	@Override
	public boolean equals(Object obj) {
		if(obj instanceof Member) {
			Member me = (Member)obj;
			return me.name.equals(name) && (me.age==age);
		} else {
			return false;
		}
	}
	
	@Override
	public int hashCode() {
		return name.hashCode() + age;
	}
}
package HashSet01;

import java.util.HashSet;

public class HashSetEx02 {

	public static void main(String[] args) {
		//내용은 같으나 객체가 다른 멤버
		Member m1 = new Member("hong", 25);
		Member m2 = new Member("hong", 25);
		
		HashSet<Member> hs = new HashSet<Member>();
		hs.add(m1);
		hs.add(m2);
		
		System.out.println(hs.size());
	}

}
ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ
1

하나만 저장되었음을 알 수 있다.

 

 

-문제: ArrayList, HashSet과 Random클래스를 이용해서 중복되지 않는 6개의 로또번호를 5개 출력하기

1) 내 코드

package HashSet01;

import java.util.ArrayList;
import java.util.HashSet;
import java.util.Random;

public class LottoEx {

	public static void main(String[] args) {
		HashSet<Integer> lotto = new HashSet<Integer>();
		ArrayList<Integer> arr = new ArrayList<Integer>(5);
		Random random = new Random();
		int x = 0;
		
		while(x != 5) {
			while(lotto.size() != 6) {
				lotto.add(random.nextInt(45)+1);
			}
			arr.addAll(lotto);
			for(Integer i : arr) {
				System.out.print(i+" ");
			}
			System.out.println();
			lotto.clear();
			arr.clear();
			x += 1;
		}
	}

}
ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ
2 4 24 41 42 27 
18 3 20 39 13 15 
33 17 22 23 29 30 
35 6 40 8 41 44 
16 32 38 9 10 28 

 

 

 

 

ㅇ Map 컬렉션

키와 값으로 구성된 Entry 객체를 저장하는 구조이다.

여기서 키와 값은 모두 객체이다. 키는 중복 저장될 수 없지만 값은 중복 저장될 수 있다.

만약 기존에 저장된 키와 동일한 키로 값을 저장하면 기존의 값은 사라지고 새로운 값이 대치된다.

 

Map 컬렉션에는 HashMap, Hashtable, LinkedHashMap, Properties, TreeMap 등이 있다.

밑줄 친 것이 많이 사용된다.

 

ㅇHashMap 

-HashMap 선언 및 데이터 저장, 출력

 

package HashMapEx;

import java.util.Collection;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Set;

public class HashMapEx01 {

	public static void main(String[] args) {
		HashMap<String, String> hm = new HashMap<String, String>();
		
		hm.put("a", "park");
		hm.put("b", "lee");
		hm.put("c", "hong");
		
		System.out.println(hm.size());
		//전체 키와 데이터 가져오기
		System.out.println(hm.toString());
		
		//키값을 이용해서 데이터 가져오기
		System.out.println(hm.get("a"));
		System.out.println(hm.get("b"));
		
		
		System.out.println("\nㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ");
		//key 전체를 가져온 뒤 데이터 가져오기
		Set<String> keys = hm.keySet();
		System.out.println(keys.toString());
		
		for(String key : keys) {
			System.out.println(key+":"+hm.get(key));
		}
		
		System.out.println("\nㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ");
		//Iterator로 전체 데이터 가져오기
		Iterator<String> keyit = keys.iterator();
		while(keyit.hasNext()) {
			String k = keyit.next();
			String v = hm.get(k);
			System.out.println(k+":"+v);
		}
		
		
		System.out.println("\nㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ");
		//키 필요없고 데이터만 가져오기
		Collection<String> values = hm.values();
		for(String value:values) {
			System.out.println(value);
		}
		
		System.out.println("\nㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ");
		//키를 이용해서 데이터 삭제하기
		hm.remove("a");
		System.out.println(hm.toString());
		
	}

}


ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ
3
{a=park, b=lee, c=hong}
park
lee

ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ
[a, b, c]
a:park
b:lee
c:hong

ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ
a:park
b:lee
c:hong

ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ
park
lee
hong

ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ
{b=lee, c=hong}

 

-HashMap 예제

package HashMapEx;

import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Set;

public class HashMapExample1 {

	public static void main(String[] args) {
		Map<String, Integer> map = new HashMap<String, Integer>();
		
		map.put("신용권", 85);
		map.put("홍길동", 90);
		map.put("동장군", 80);
		map.put("홍길동", 95);	//2번째 키 값과 같기때문에 마지막걸로 대치
		System.out.println("총 Entry수: "+map.size()+"\n");
		
		//객체를 하나씩 처리
		Set<Map.Entry<String, Integer>> entrySet = map.entrySet();
		Iterator<Map.Entry<String, Integer>> entryIterator = entrySet.iterator();
		
		while(entryIterator.hasNext()) {
			Map.Entry<String, Integer> entry = entryIterator.next();
			String key = entry.getKey();
			Integer value = entry.getValue();
			System.out.println("\t" + key + ":" + value);
		}
		System.out.println();

	}

}

ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ
총 Entry수: 3

	홍길동:95
	신용권:85
	동장군:80

 

 

-사용자 정의 객체 사용하기

Student 클래스 - 사용자 정의 객체

package HashMapEx;

public class Student {
	public int sno;
	public String name;
	
	public Student(int sno, String name) {
		super();
		this.sno = sno;
		this.name = name;
	}
	
	@Override
	public boolean equals(Object obj) {
		if(obj instanceof Student) {
			Student student = (Student) obj;
			return (sno==student.sno) && (name.equals(student.name)); 
		} else {
			return false;
		}
	}
	
	@Override
	public int hashCode() {
		return sno + name.hashCode();
	}
	
}

main클래스

package HashMapEx;

import java.util.HashMap;
import java.util.Map;

public class HashMapExample2 {

	public static void main(String[] args) {
		Map<Student, Integer> map = new HashMap<Student, Integer>();
		
		map.put(new Student(1, "홍길동"), 95);
		map.put(new Student(1, "홍길동"), 95);
		
		System.out.println("총 Entry 수: " + map.size());
	}
}

ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ
총 Entry 수: 1

 

 

ㅇProperties

Hashtable은 키와 값을 다양한 타입으로 지정이 가능한데 Properties는 키와 값을 String 타입으로 제한한다.

Properties는 보통 애플리케이션의 옵션 정보, 데이터베이스 연결 정보 그리고 국제화 정보가 저장된 프로퍼티 파일을

읽을 때 주로 사용한다.

프로퍼티 파일은 키와 값이 = 기호로 연결되어 있는 텍스트 파일이다.

package HashMapEx;

import java.util.Enumeration;
import java.util.Properties;

public class PropertiesEx01 {

	public static void main(String[] args) {
		Properties props = new Properties();
		props.setProperty("timeout", "30");
		props.setProperty("language", "kr");
		props.setProperty("size", "10");
		
		System.out.println(props.toString());
		System.out.println(props.getProperty("size"));
		System.out.println(props.getProperty("language"));
		
		
		System.out.println("\n---Enumeration---");
		//Enumeration(이뉴머레이션) Iterator와 비슷
		Enumeration e = props.propertyNames();
		while(e.hasMoreElements()) {
			System.out.println((String)e.nextElement());
		}
	}

}

ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ
{size=10, language=kr, timeout=30}
10
kr

Enumeration
size
timeout
language

 

-시스템 프로퍼티 읽기

 

package HashMapEx;

import java.util.Properties;
import java.util.Set;

public class PropertiesEx02 {

	public static void main(String[] args) {
		//시스템 프로퍼티를 p에 저장한다.
		Properties p = System.getProperties();
		
		//시스템프로퍼티의 키값만 set타입 keys에 저장한다.
		Set keys = p.keySet();
		
		for(Object obj: keys) {
			String key = (String)obj;
			System.out.println(key + " : " + System.getProperty(key));
		}

	}
}

ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ
sun.desktop : windows
awt.toolkit : sun.awt.windows.WToolkit
java.specification.version : 11
sun.cpu.isalist : amd64
sun.jnu.encoding : MS949
java.class.path : 
java.vm.vendor : Oracle Corporation
sun.arch.data.model : 64
user.variant : 
java.vendor.url : https://openjdk.java.net/
user.timezone : 
os.name : Windows 10
java.vm.specification.version : 11
sun.java.launcher : SUN_STANDARD
user.country : KR
sun.boot.library.path : C:\Program Files\Java\jdk-11.0.9\bin
sun.java.command : HashMap/HashMapEx.PropertiesEx02
jdk.debug : release
sun.cpu.endian : little
user.home : C:\Users\J
user.language : ko
java.specification.vendor : Oracle Corporation
jdk.module.path : C:\SelfStudyJava\HashMap\bin
java.version.date : 2020-10-20
java.home : C:\Program Files\Java\jdk-11.0.9
file.separator : \
java.vm.compressedOopsMode : Zero based
line.separator : 

java.specification.name : Java Platform API Specification
java.vm.specification.vendor : Oracle Corporation
java.awt.graphicsenv : sun.awt.Win32GraphicsEnvironment
jdk.module.main.class : HashMapEx.PropertiesEx02
jdk.module.main : HashMap
user.script : 
sun.management.compiler : HotSpot 64-Bit Tiered Compilers
java.runtime.version : 11.0.9+7-LTS
user.name : J
path.separator : ;
os.version : 10.0
java.runtime.name : Java(TM) SE Runtime Environment
file.encoding : MS949
java.vm.name : Java HotSpot(TM) 64-Bit Server VM
java.vendor.version : 18.9
java.vendor.url.bug : https://bugreport.java.com/bugreport/
java.io.tmpdir : C:\Users\J\AppData\Local\Temp\
java.version : 11.0.9
user.dir : C:\SelfStudyJava\HashMap
os.arch : amd64
java.vm.specification.name : Java Virtual Machine Specification
java.awt.printerjob : sun.awt.windows.WPrinterJob
sun.os.patch.level : 
java.library.path : C:\Program Files\Java\jdk-11.0.9\bin;C:\Windows\Sun\Java\bin;C:\Windows\system32;C:\Windows;C:\oracle\WINDOWS.X64_193000_db_home\bin;C:\Users\J\Desktop\WINDOWS.X64_193000_db_home\bin;C:\Program Files\Common Files\Oracle\Java\javapath;C:\Windows\system32;C:\Windows;C:\Windows\System32\Wbem;C:\Windows\System32\WindowsPowerShell\v1.0\;C:\Windows\System32\OpenSSH\;C:\Program Files\nodejs\;C:\Program Files\Git\cmd;C:\Program Files\Java\jdk-11.0.9\bin;C:\Users\J\AppData\Local\Microsoft\WindowsApps;C:\Users\J\AppData\Local\atom\bin;C:\Users\J\AppData\Roaming\npm;;C:\Users\J\AppData\Local\Programs\Microsoft VS Code\bin;.
java.vendor : Oracle Corporation
java.vm.info : mixed mode
java.vm.version : 11.0.9+7-LTS
sun.io.unicode.encoding : UnicodeLittle
java.class.version : 55.0

 

 

 

ㅇLIFO 와 FIFO 컬렉션

후입선출(LIFO)은 나중에 넣은 객체가 먼저 빠져나가는 자료구조를 말한다.

선입선출(FIFO)은 먼저 넣은 객체가 먼저 빠져나가는 자료구조를 말한다.

 

스택으로 만들어진 것들은 다음과 같다.

수식계산, 수식괄호검사, undo/redo(^z), 브라우저의 뒤로 앞으로

 

큐로 만들어진 것들은 다음과 같다.

인쇄기능, 버퍼

 

push는 데이터 넣기, pop은 데이터 빼기 메소드이다.

-Stack

package Stack;

import java.util.Stack;

public class StackEx01 {

	public static void main(String[] args) {
		Stack<String> stack = new Stack<String>();
		
		stack.push("park");
		stack.push("hong");
		stack.push("lee");
		
		System.out.println(stack.toString());
		System.out.println(stack.size());
		
		System.out.println(stack.pop());
		System.out.println(stack.toString());
		System.out.println(stack.size());

	}

}
ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ
[park, hong, lee]
3
lee
[park, hong]
2

 

 

-스택 사용자 정의 객체 예제

Coin 클래스

package Stack;

public class Coin {
	private int value;

	public Coin(int value) {
		super();
		this.value = value;
	}

	public int getValue() {
		return value;
	}
}

main클래스

package Stack;

import java.util.Stack;

public class StackExample {

	public static void main(String[] args) {
		Stack<Coin> coinBox = new Stack<Coin>();
		
		//동전을 넣는다.
		coinBox.push(new Coin(100));
		coinBox.push(new Coin(50));
		coinBox.push(new Coin(500));
		coinBox.push(new Coin(10));
		
		while(!coinBox.isEmpty()) {
			Coin coin = coinBox.pop();
			System.out.println("꺼낸 동전 : " + coin.getValue() + "원");
		}
	}
}
ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ
꺼낸 동전 : 10원
꺼낸 동전 : 500원
꺼낸 동전 : 50원
꺼낸 동전 : 100원

 

-Queue

Message클래스

package Stack;

public class Message {
	public String command;
	public String to;
	public Message(String command, String to) {
		super();
		this.command = command;
		this.to = to;
	}
}

main클래스

package Stack;

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

public class QueueExample {

	public static void main(String[] args) {
		Queue<Message> mq = new LinkedList<Message>();
		
		//객체 저장
		mq.offer(new Message("sendMail", "hong"));
		mq.offer(new Message("sendSMS", "sin"));
		mq.offer(new Message("sendKakaotalk", "lee"));
		
		while(!mq.isEmpty()) {
			//mq에서 한 개의 메세지 꺼내기
			Message m = mq.poll();
			switch(m.command) {
			case "sendMail":
				System.out.println(m.to + "님에게 메일을 보냅니다.");
				break;
			case "sendSMS":
				System.out.println(m.to + "님에게 sms 보냅니다.");
				break;
			case "sendKakaotalk":
				System.out.println(m.to + "님에게 카카오톡을 보냅니다.");
				break;
			}
		}
	}
}

ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ
hong님에게 메일을 보냅니다.
sin님에게 sms 보냅니다.
lee님에게 카카오톡을 보냅니다.

 

 

 

ㅇFomat 클래스

정수 세 자리마다 쉼표를 넣고 싶다면 어떻게 해야 하는가

이렇게 문자열의 포맷을 지정할 수 있는것이 형식 클래스이다.

숫자형식클래스(DecimalFormat)

날짜형식클래스(SimpleDateFormat)

문자열형식클래스(MessageFormat) 등이 있다.

 

-숫자형식클래스(DecimalFormat)

package FormatEx;

import java.text.DecimalFormat;

public class FormatEx01 {

	public static void main(String[] args) {
		double num = 1234567.89;
		
		//정수자리는 9개이고, 소수점 첫 번째 자리에서 반올림하기
		DecimalFormat df = new DecimalFormat("000000000.0");
		System.out.println(df.format(num));
	}

}



001234567.9

 

 

-날짜형식클래스(SimpleDateFormat)

package FormatEx;

import java.text.SimpleDateFormat;
import java.util.Date;

public class simpleDateFormatExample {

	public static void main(String[] args) {
		Date now = new Date();
		
		SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
		System.out.println(sdf.format(now));
		
		sdf = new SimpleDateFormat("yyyy년 MM월 dd일");
		System.out.println(sdf.format(now));
		
		sdf = new SimpleDateFormat("yyyy.MM.dd a HH:mm:ss");
		System.out.println(sdf.format(now));
		
		sdf = new SimpleDateFormat("오늘은 E요일");
		System.out.println(sdf.format(now));

	}

}




2020-11-26
2020년 11월 26일
2020.11.26 오후 12:59:51
오늘은 목요일

 

-문자열형식클래스(MessageFormat)

package FormatEx;

import java.text.MessageFormat;

public class MessageFormatExample {

	public static void main(String[] args) {
		String id = "java";
		String name = "sin";
		String tel = "010";
		
		String text = "회원 ID: {0} \n회원 이름: {1} \n회원 전화: {2}";
		String result1 = MessageFormat.format(text, id, name, tel);
		System.out.println(result1);

	}

}




회원 ID: java 
회원 이름: sin 
회원 전화: 010

 

 

앞으로 배울내용

데이터
	임시데이터
		변수로써 할당
	영구데이터
		로컬 - 파일
			디렉터리(특수목적의 파일)와 파일의 개념
			java.io 패키지 사용
		원격 - 데이터베이스(네트워크)

 

ㅇ NIO기반 입출력 및 네트워크

ㅇ 디렉터리/파일 선언

package FileEx;

import java.io.File;

public class FileEx01 {

	public static void main(String[] args) {
		//java.io.File
		//파일이나 디렉터리(없으면 - 생성/ 있으면 - 관리
		
		//디렉터리 - 절대경로
		//window는 \, unixs는 / 사용한다.
		File f1 = new File("c:\\SelfStudyJava");
		File f2 = new File("c:\\SelfStudyJava\\text.txt");
		
		//상대경로
		File f3 = new File(".\java");
		

	}

}

 

ㅇ메서드

- exist() : 디렉터리/파일 존재유무

- mkdir() : 디렉터리 생성

- createNewFile() : 파일생성

- getName() : 디렉터리/파일명

- getParent() : 상위 폴더

- getPath() : 파일경로

- isHidden() : 숨김파일인지 아닌지

 

-파일과 디렉터리 생성하고 메서드 사용하기

 

package FileEx;

import java.io.File;
import java.io.IOException;
import java.util.Date;

public class FileEx02 {

	public static void main(String[] args) {
		File f1 = new File("c:\\SelfStudyJava\\test.txt");
		
		//파일 존재 여부 확인
		if(f1.exists()) {
			System.out.println("있음");
		} else {
			System.out.println("없음");
		}
		
		//디렉터리 생성
		File f2 = new File("c:\\SelfStudyJava\\dir1");
		//디렉토리 생성
		if(f2.mkdir()) {
			System.out.println("디렉토리 생성완료");
		}
		
		//파일 생성
		File f3 = new File("c:\\SelfStudyJava\\test2.txt");
		try {
			if(f3.createNewFile()) {
				System.out.println("파일 생성완료");
			}
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		
		System.out.println(f3.getName());
		System.out.println(f3.getParent());
		System.out.println(f3.getPath());
		
		System.out.println("\n-------");
		//canExecute : 실행가능여부 / canRead : 읽기가능여부 / canWrite : 쓰기가능여부
		//리턴값 boolean
		//isHidden : 히든 값인지 / isAbsoulute : 절대경로인지
		
		if(f3.isHidden()) {
			System.out.println("숨김파일입니다.");
		} else {
			System.out.println("일반파일입니다.");
		}
		
		//파일탐색기 파일속성 - 숨김한뒤 다시 실행
		File f4 = new File("c:\\SelfStudyJava\\test3.txt");
		try {
			if(f4.createNewFile()) {
				System.out.println("파일 생성완료");
			}
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		if(f4.isHidden()) {
			System.out.println("숨김파일입니다.");
		} else {
			System.out.println("일반파일입니다.");
		}
		
		System.out.println("\n-------");
		//length() : 파일의 크기
		//lastModified() : 마지막 수정일자
		
		//디렉토리에서 몇 개 파일 압축해서 f5만들기
		File f5 = new File("c:\\SelfStudyJava\\java_test.zip");
		long fileSize = f5.length();
		System.out.println(fileSize + " byte");
		System.out.println(fileSize/1024. + " kbyte");
		
		long fileMod = f5.lastModified();
		Date date = new Date(fileMod);
		System.out.println(date);
	}
}





있음
test2.txt
c:\SelfStudyJava
c:\SelfStudyJava\test2.txt

-------
일반파일입니다.

-------
숨김파일입니다.

-------
25645 byte
25.0439453125 kbyte
Thu Nov 26 14:40:18 KST 2020


-디렉터리를 통해서 파일이나 디렉터리 목록 가져오기

package FileEx;

import java.io.File;

public class FileEx03 {

	public static void main(String[] args) {
		// 디렉토리 - 파일/디렉토리의 목록 가져오기
		
		//list() : String[]  이름만 가져오기
		//listFiles : File[] 파일 객체로 만들어서 가져온다.
		System.out.println("---list()---");
		File f = new File("c://");
		String[] lists = f.list();
		for(String list : lists) {
			System.out.println(list);
		}
		
		System.out.println("\n---listFile()---");
		File[] filelists = f.listFiles();
		for(File filelist : filelists) {
			System.out.println(filelist.getName());
		}
	}
}


---list()---
!$KKKTe
$Recycle.Bin
$Windows.~WS
ADE
Bitnami
Boot
coding
Documents and Settings
ESD
hiberfil.sys
html
OneDriveTemp
oracle
pagefile.sys
PerfLogs
Program Files
Program Files (x86)
ProgramData
Recovery
Reflect_Install.log
Riot Games
SelfStudyJava
swapfile.sys
System Volume Information
Temp
Users
Windows
XecureSSL
미래에셋대우

---listFile()---
!$KKKTe
$Recycle.Bin
$Windows.~WS
ADE
Bitnami
Boot
coding
Documents and Settings
ESD
hiberfil.sys
html
OneDriveTemp
oracle
pagefile.sys
PerfLogs
Program Files
Program Files (x86)
ProgramData
Recovery
Reflect_Install.log
Riot Games
SelfStudyJava
swapfile.sys
System Volume Information
Temp
Users
Windows
XecureSSL
미래에셋대우


 

 

-문제: 파일과 디렉토리를 구분해서 리스트 출력하기(디렉토리는 []를 치고 파일은 그냥 출력)

package FileEx;

import java.io.File;

public class FileEx04 {

	public static void main(String[] args) {
		File f = new File("c:\\SelfStudyJava");
		File[] fileLists = f.listFiles();
		
		for(File fileList : fileLists) {
			if(fileList.isDirectory()) {
				System.out.println("[" + fileList.getName() + "]");
			} else if(fileList.isFile()) {
				System.out.println(fileList.getName());
			}
		}
	}
}




[.metadata]
[ArrayListEx01]
[chap01]
[DataEx01]
[dir1]
[EnumEx01]
[ExceptionEx01]
[FileEx]
[FormatEx]
[HashMap]
[HashSetEx01]
java_test.zip
test.txt
test2.txt
test3.txt
728x90
반응형
Comments