반응형
반응형
package try_catch;

public class TryCatch {

	public static void main(String[] args) {
		String data1 = null;
		String data2 = null;
		try {
			data1 = args[0];
			data2 = args[1];
		} catch(ArrayIndexOutOfBoundsException e) {
			System.out.println("실행 매개값의 수가 부족합니다.");
			System.out.println("[실행 방법]");
			System.out.println
                      ("java TryCatchFinallyRuntimeExceptionExample num1 num2");
			
		}
		
		try {
			int value1 = Integer.parseInt(data1);
			int value2 = Integer.parseInt(data2);
			int result = value1 + value2;
			System.out.println(data1 + "+" + data2 + "=" + result);
		} catch(Exception e) {
			System.out.println("에러를 찾아주겠습니다.");
			System.out.println("에러는 : " + e + " 입니다.");
		}
		  finally {
			System.out.println("다시 실행하세요");
		}

	}

}

Try Catch문이란 오류를잡아주는 역할을 해줍니다.

일반적인 문법오류가 아닌 실행시 값이 안 들어갔다던지 등에 대한 오류를 잡아줍니다.

 

일단 Try에서 실행할 문을 넣어줍니다. 

 

Catch에서는 에러를 잡아주는 역할을 합니다.

Catch(에러 종류 에러 종류가 들어갈 변수) 입니다.

Catch(Exception e) 여기에서 Exception이란 모든 에러를 의미합니다.

특정한 에러를 알고 있지 않는 이상 Exception을 e로 받아서 e를 출력해보면 알 수 있죠

 

Finally에서는 에러가 나던 안 나던 무조건 실행시키는 부분입니다.

 

어떤식으로 이용할 수 있냐면 만약 값이 안 들어간 null 에러가 난다면 catch(Null값에 대한 에러)를 주고

안에 내용에서 다시 값을 받아오는 역할이라든가 아니면 다른 처리를 해주는 식으로 사용할 수 있습니다.

반응형
반응형
package src;

import java.util.*;

// Ex) ArrayList, LinkedList, Vector 등 * 내부적으로 Arrays.sort()를 사용

class People implements Comparable<People> {
	

    private String name;
	private int age;
	
    public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public int getAge() {
		return age;
	}

	public void setAge(int age) {
		this.age = age;
	}

    
    public People(String name, int age){
        this.name = name;
        this.age= age;
    }

    @Override
    public int compareTo(People people) {
         if (this.age < people.age) {
             return -1; 
         } else if (this.age == people.age) {
             return 0;
         } else {
             return 1;
         }
     }

	
	
}

 

package src;

class Point implements Comparable<Point> {
	
	
	
//	현재 객체 < 파라미터로 넘어온 객체: 음수 리턴
//	현재 객체 == 파라미터로 넘어온 객체: 0 리턴
//	현재 객체 > 파라미터로 넘어온 객체: 양수 리턴
//	음수 또는 0이면 객체의 자리가 그대로 유지되며, 양수인 경우에는 두 객체의 자리가 바뀐다.
		
    int x, y;

    Point(int x,int y){
    	this.x = x;
    	this.y = y;
    }
    
    public int getX() {
		return x;
	}

	public void setX(int x) {
		this.x = x;
	}

	public int getY() {
		return y;
	}

	public void setY(int y) {
		this.y = y;
	}

	@Override
    public int compareTo(Point p) {
        if(this.x > p.x) {
            return 1; // x에 대해서는 오름차순
        }
        else if(this.x == p.x) { // x좌표가 같으면 
            if(this.y < p.y) { // y에 대해서는 내림차순
                return 1;
            }
        }
        return -1;
    }
}
package src;

import java.util.*;



public class Sort {

	public static void main(String[] args) {
		
		// 기본타입 배열 오름차순
		
		int arr[] = {4,23,33,15,17,19};
        Arrays.sort(arr);
        
        for (int i : arr) {
            System.out.print("["+i+"]");
	}
        System.out.println();
        
        // String 배열 오름차순 기본 타입과 동일
        // ----------------------------------------------------------------
        
        String arr2[] = {"apple","orange","banana","pear","peach","melon"};
        Arrays.sort(arr2);
        
        for (String i : arr2) {
            System.out.print("["+i+"]");
        }

        System.out.println();
        
        // 기본타입 배열 내림차순 정렬
        // ----------------------------------------------------------------
        
        Integer arr3[] = {4,23,33,15,17,19};
        Arrays.sort(arr3,Collections.reverseOrder());
        
        for (int i : arr3) {
            System.out.print("["+i+"]");
        }
        
        String arr4[] = {"apple","orange","banana","pear","peach","melon"};
        Arrays.sort(arr4,Collections.reverseOrder());
        System.out.println();
        
        
        // String 배열 내림차순 정렬
        // ----------------------------------------------------------------
        
        for (String i : arr4) {
            System.out.print("["+i+"]");
        }
     
        int arr5[] = {4,23,33,15,17,19};
        // int[] arr5 = {4,23,33,15,17,19};
        // int[] arr5 = new int[] {4,23,33,15,17,19};
        // int arr5[] = new int[] {4,23,33,15,17,19};
        // 다 동일
        
        Arrays.sort(arr5, 0, 4); // 0,1,2,3 요소만 정렬
        System.out.println();
        
        // 배열 일부분만 정렬 
        // ----------------------------------------------------------------
        
        for (int i : arr5) {
            System.out.print("["+i+"]");
        }
        System.out.println();
        
        //  객체 배열 정렬할시에는 comparable 이나 comparator을 사용해야 한다.
        // ----------------------------------------------------------------
        
        People[] arr6 = { new People("상현", 20)
                , new People("철수", 14)
                , new People("경완", 31)
                , new People("대호", 40)
                , new People("지운", 24) 
            };
    		
            Arrays.sort(arr6); //오름차순 정렬        
            
                        
            for (People i : arr6) { //오름차순 출력
                System.out.print("["+ i.getName() + i.getAge() +"]");
            }
    		
            Arrays.sort(arr6,Collections.reverseOrder()); // [철수(14)][상현(20)][지운(24)][경완(31)][대호(40)]
            System.out.println();
    		
            for (People i : arr6) { //내림차순 출력
                System.out.print("["+i.getName() + i.getAge()+"]"); //[대호(40)][경완(31)][지운(24)][상현(20)][철수(14)]
            }
         // ------------------------------------------------- Comparable
          
            System.out.println();
            
            List<Point> pointList = new ArrayList<>();
            pointList.add(new Point(5 , 4));
            pointList.add(new Point(3 , 9));
            pointList.add(new Point(2 , 1));
            
            Collections.sort(pointList);
            
            for (Point i : pointList) {
            	System.out.print(" X : "+ i.getX() + " Y : "+ i.getY());
            	System.out.println();
            }
         
            System.out.println();
         // -------------------------------------------------- Comparator
         // 만약 정렬 대상 클래스의 코드를 직접 수정할 수 없는 경우에는 어떻게 객체의 정렬 기준을 정의할 수 있을까요? 
         // 또는 정렬 하고자 하는 객체에 이미 존재하고 있는 정렬 기준과 다른 정렬 기준으로 정렬을 하고 싶을 때는 어떻게 해야할까요?
         
         // 첫 번째 파라미터로 넘어온 객체 < 두 번째 파라미터로 넘어온 객체: 음수 리턴
         // 첫 번째 파라미터로 넘어온 객체 == 두 번째 파라미터로 넘어온 객체: 0 리턴
         // 첫 번째 파라미터로 넘어온 객체 > 두 번째 파라미터로 넘어온 객체: 양수 리턴
         
            
         Comparator<Point> myComparator = new Comparator<Point>() {
            	  @Override
            	  public int compare(Point p1, Point p2) {
            		  if (p1.x > p2.x) {
            	      return 1; // x에 대해서는 오름차순
            	    }
            	    else if (p1.x == p2.x) {
            	      if (p1.y < p2.y) { // y에 대해서는 내림차순
            	        return 1;
            	      }
            	    }
            	    return -1;
            	  }
            	};

            List<Point> pointList2 = new ArrayList<>();
            pointList2.add(new Point(1, 5));
            pointList2.add(new Point(5, 19));
            pointList2.add(new Point(3, 7));
            Collections.sort(pointList2, myComparator); // myComparator에 선언한대로 정렬
            
            for (Point i : pointList2) {
            	System.out.print(" X : "+ i.getX() + " Y : "+ i.getY());
            	System.out.println();
            }
            
         // 참고 Arrays.sort()와 Collections.sort()의 차이
         // Arrays.sort() 배열 정렬의 경우 vs Collections.sort() List Collection 정렬의 경우

	}
	
}

Arrays.sort(배열)을 이용해 오름차순 정렬을 할 수 있습니다.

Arrays.sort(arr1)

 

또한 String 타입의 배열또한 오름차순 정렬 할 수 있습니다. (알파벳 A부터 시작 정렬)

Arrays.sort(arr2)

 

Arrays.sort(배열,Collections.reverseOrder())을 이용해 내림차순 정리할 수 있습니다.

Arrays.sort(arr3,Collections.reverseOrder())

 

또한 String 타입의 배열또한 내림차순 정렬을 할 수 있습니다. (알파벳 Z부터 시작 정렬)

Arrays.sort(arr4,Collections.reverseOrder())

 

Arrays.sort(arr5, 인덱스, 인덱스끝)를 이용해 범위를 정해서 정렬할 수 있습니다. (인덱스 ~ 인덱스끝 -1 까지)

Arrays.sort(arr5, 0, 4)

 

객체도 정렬할 수 있는데 class People implements Comparable<People> {.... 와 같이 

Comparable 또는Comparator를 사용해야 합니다.

Arrays.sort(배열)정렬이 가능한데 여기서 arr6해당하는 배열은 People이라는 객체를 의미합니다.

별반 다른 거 없어 보이는데 위에랑 People 클래스를 정의한 곳에 보면 CompareTo라는 것을 오버라이드했습니다.

객체 같은 특별한 거라든가 내가 원하는대로 커스터마이징 하고 싶은 경우에는 오버라이드해서 적용시켜야합니다.

 

public int compareTo(People people) {
         if (this.age < people.age) {
             return -1; 
         } else if (this.age == people.age) {
             return 0;
         } else {
             return 1;
         }
     }

compareTo라는 함수를 알아봐야하는데 어떤 함수냐면 말 그대로 비교하는 함수입니다.

현재 객체 < 인자로 넘어온 객체(여기선people) : return 음수 
현재 객체 == 인자로 넘어온 객체(여기선people) : return 0
현재 객체 > 인자로 넘어온 객체(여기선people) : return 양수 입니다.

그런데 이렇게 return만 있으면 뭐 어떻게 작성해야할지도 모르잖아요 더 자세히 알아보면

음수 또는 0이면 객체의 자리가 그대로 유지되며, 양수인 경우에는 두 객체의 자리가 바뀝니다.

 

this.age < people.age을 보면 현재 객체의 나이와 인자값 people의 나이를 비교해서

people의 나이가 더 크면-1 즉 그대로 유지됩니다.

같을 경우도 0을 반환함으로써 자리가 그대로 유지 됩니다.

그렇지 않은 경우는 1을 반환합니다. 두 객체의 자리가 바뀌죠 

이 맥락으로 봤을 때 이렇게 만든 사람의 의도는 나이를 비교해서 오름차순으로 정리하는 걸 알 수 있습니다.

예시를 들어서 people 객체의 이름은 무시하고 age가 6 4 이면 6하고 4을 비교하죠? 그러면 6 < 4 이기 때문에

1을 반환합니다. 그러면 자리가 바뀌어서 4 6이 되죠 오름차순으로 정렬 되었죠?

 

Arrays.sort(배열,Collections.reverseOrder()) 을 이용해 내림차순 정렬을 할 수 있습니다.

Arrays.sort(arr6,Collections.reverseOrder())

 

List<Point> pointList = new ArrayList<Point>() 같이 Point객체를 받는 ArrayList여도 똑같이 정렬이 가능합니다.

Collections.sort(ArrayList객체명)

Collections.sort(pointList) 하지만 조금 다른 점이 있는데 Arrays를 사용 안 하고 Collections를 써야합니다.

(ArrayList때문에) 또한 Point객체를 이용하는 경우 Point클래스에 CompareTo를 구현해야합니다.

 

 

 

Comparator<Point> myComparator = new Comparator<Point>() {
            	  @Override
            	  public int compare(Point p1, Point p2) {
            		  if (p1.x > p2.x) {
            	      return 1; // x에 대해서는 오름차순
            	    }
            	    else if (p1.x == p2.x) {
            	      if (p1.y < p2.y) { // y에 대해서는 내림차순
            	        return 1;
            	      }
            	    }
            	    return -1;
            	  }
            	};

또 다른 객체 비교하는 클래스가 있는데 그게 Comparator입니다.

사용 방법Comparator<클래스명> 객체명 = new Comparator<클래스명>()

Comparator<Point> myComparator = new Comparator<Point>()

그 후 Comparable이 CompareTo를 구현한 거처럼 compare(인자값1, 인자값2)으로 오버라이드 해야합니다.

구현 방법은 위에 설명한 것과 동일합니다.

 

Collections.sort(배열명, Comparator클래스를 이용해 만든 객체명)으로

배열에 내가 정의한 compare메소드가 들어있는 객체를 적용시키는 것입니다.

Collections.sort(pointList2, myComparator)

 

그러면 Comparable과 Comparator는 무슨 차이가 있나요? 그걸 알아봅시다.
1번 Comparable을 사용하고자 한다면 compareTo 메소드를 오버라이드해야합니다.

그리고 Comparable은 인터페이스입니다. 그리고 자기 자신과 인자값 한개를 비교하죠


2번은 Comparator의 경우 클래스이며 compare 메소드를 오버라이드를 해야합니다 그리고 

두개의 매개변수를 받아서 그 두개를 비교하죠

 

결과적으로 이런 차이만 있을 뿐 객체를 비교하기 위해 있다는 건 동일합니다.

 

 

 

반응형
반응형
public void hashTest() {
    HashMap<String, String> map = new HashMap<>();
    map.put("key1", "value1");
    map.put("key2", "value2");
    map.put("key3", "value3");

    /** 모든 키 가져오기 **/
    Set<String> keys = map.keySet();
    System.out.println("Keys: " + keys);
    // Keys: [key1, key2, key3]

    /** 모든 값 가져오기 **/
    Collection<String> values = map.values();
    System.out.println("Values: " + values);
    // Values: [value1, value2, value3]

    /** 모든 키, 값 가져오기 **/
    for (Map.Entry<String, String> entry : map.entrySet()) {
      System.out.println("Key: " + entry.getKey() + ", Value: " + entry.getValue());
      // Key: key1, Value: value1
      // Key: key2, Value: value2
      // Key: key3, Value: value3
    }

}

 

HashMap의경우 키와 값을 저장합니다. 키로 접근해서 값을 찾습니다. 그래서 키는 중복 저장이 불가능합니다.

 

  • map.put("키","값")
    • 키와 값을 추가합니다.
  • map.get("키")
    • 키를 통해 값을 가져옵니다.
  • map.remove("키")
    • 키와 값을 제거합니다.
  • entrySet()
    • 모든 키-값 쌍을 포함하는 집합(Set)을 반환한다, Set<Map.Entry<K,V>>형태로 반환하기 때문에 Set에서 for문으로 하나씩 꺼내서 키와 값을 출력할 수 있다.

 

반응형
반응형
package collection_fram;

public class Board {
	String subject;
	String content;
	String writer;
	
	public Board(String subject , String content, String writer) {
		this.subject = subject;
		this.content = content;
		this.writer = writer;
	}
}
package collection_fram;

import java.util.*;

public class Set_example {

	public static void main(String[] args) {
		
		// 저장 순서가 유지되지 않으며 객체를 중복해서 저장할 수 없다.
		// 인덱스를 매개값을 갖는 메소드가 없다.
		
		Set<String> set = new HashSet<String>();
		
		set.add("Java");
		set.add("JDBC"); // 값 추가
		
		System.out.println(set.size()); // 객체 수
		
		Iterator<String> iterator = set.iterator(); // <String> 을 받는 반복자 생성
		while(iterator.hasNext()) { // hasNext() 가져올 객체값이 있으면 True (0번인 JAVA있으니 True)
			String element = iterator.next(); // 컬렉션에서 하나의 객체를 가져옴 (0번을 가르킨 것을 가져옴)
			System.out.println("\t" + element);
		}
		
		
		set.remove("JDBC");
		

		
		iterator = set.iterator(); // 위에서 반복자가 끝까지 돌았기 때문에 다시 쓸라면 초기화 시켜야함
		while(iterator.hasNext()) { // hasNext() 가져올 객체값이 있으면 True 
			String element = iterator.next(); // 컬렉션에서 하나의 객체를 가져옴 넣은 순서대로?
			System.out.println("\t" + element);
		}
		
		Set<Board> set2 = new HashSet<Board>();
		
		set2.add(new Board("제목1","내용1","글쓴이1"));
		set2.add(new Board("제목2","내용2","글쓴이2"));


		Scanner Scanf = new Scanner(System.in);
 		for (int i = 0 ; i < 3; i++) {
 			String title = Scanf.nextLine();
 			String inner = Scanf.nextLine();
 			String author =Scanf.nextLine();
 			Board temp = new Board(title,inner,author);
 			set2.add(temp);
 		}


		Iterator<Board> iterator2 = set2.iterator(); // <String> 을 받는 반복자 생성
		while(iterator2.hasNext()) { // hasNext() 가져올 객체값이 있으면 True 
			Board element = iterator2.next(); // 컬렉션에서 하나의 객체를 가져옴 넣은 순서대로?
			System.out.println("\t" + element); // collection_fram.Board@7637f22
			System.out.println(element.subject);
			System.out.println(element.content);
			System.out.println(element.writer);
		}
		
		
		iterator2 = set2.iterator(); // 위에서 반복자가 끝까지 돌았기 때문에 다시 쓸라면 초기화 시켜야함
		while(iterator2.hasNext()) { // hasNext() 가져올 객체값이 있으면 True 
			Board element = iterator2.next(); // 컬렉션에서 하나의 객체를 가져옴 넣은 순서대로?
			System.out.println("\t" + element);
			System.out.println(element.subject);
			System.out.println(element.content);
			System.out.println(element.writer);
		
	}


	}
}

 

 

HashSet저장순서가 유지되지 않고 객체를 중복해서 저장할 수 없습니다.

 

Set<자료형> 객체 new HashSet<자료형>();
Set<String> set = new HashSet<String>();

 


set.add(내용)으로 값을 추가할 수 있습니다.
set.size()으로 set의 갯수를 알 수 있습니다.
set.remove(내용)으로 값을 없앨 수 있습니다.

 

 

Iterator란 반복자로 배열같은 것이 있으면 순서대로 반복해서 0 ~ 마지막까지 가는 느낌입니다.

get(인덱스)로 접근할 수 없으니 이와같은 상황에 이용해야 합니다.

 

Iterator<자료형> 객체명 반복자에 이용할 컬렉션프레임.iterator();

Iterator<String> iteartor = set.iterator();

iteartor = set2.iterator(); 처럼 초기화 시켜서 다시 사용할 수 있다.

 

hasNext()의 경우 가져올 객체의 값이 있으면 True를 반환합니다.

인덱스란 개념이 없지만 첫번째 추가한java를 가르키는 것이 아닌 그 앞에 아무것도 없는 부분을 가르킵니다.

hasNext로 다음 값을 가르키며 가져올 객체의 값이 있는지 확인하는 것입니다.
get(인덱스)가 아닌 next()로 값을 가져올 수 있습니다.






반응형
반응형
package collection_fram;

public class Board {
	String subject;
	String content;
	String writer;
	
	public Board(String subject , String content, String writer) {
		this.subject = subject;
		this.content = content;
		this.writer = writer;
	}
}
package collection_fram;

import java.util.*;

public class LinkedList_example {

	public static void main(String[] args) {


		List<String> list = new LinkedList<String>();
		list.add(0,String.valueOf(1));
		list.add(String.valueOf(2)); // toString의 경우 null 문자열 처리 불가
		list.add(String.valueOf(3));
		System.out.println(list);// [1, 2, ,3]
		list.remove(1); // 2 제거 [1 , 3]
		list.add("2"); //  맨 끝에 2 추가 [1, 3 ,2]
		list.add("1"); // [1, 3, 2, 1]
		System.out.println(list); 
		list.remove("1"); // [3, 2, 1] 가장 적은 인덱스에 것 먼저 제거
		System.out.println(list);
		
		
		List<Board> list2 = new LinkedList<Board>(); 
		list2.add(new Board("제목1","내용1","글쓴이1"));
		list2.add(1,new Board("제목2","내용2","글쓴이2"));
		list2.add(new Board("제목3","내용3","글쓴이3"));
		list2.size(); // 1
		list2.remove(1);
		Board board = list2.get(1); // collection_fram.Board@26f0a63f
		System.out.println(board.subject); // 제목3
		System.out.println(board.content); // 내용3
		System.out.println(board.writer); // 글쓴이3
		


 		for (int i = 0 ; i < 3; i++) {
 			String title = Scanf.nextLine();
 			String inner = Scanf.nextLine();
 			String author =Scanf.nextLine();
 			Board temp = new Board(title,inner,author);
 			list2.add(temp);
 		}

	}

}

 

Linked List (연결리스트)의 특징은 배열과 다르게 인덱스 값이 아닙니다. 

여러 유형이 있지만 위에 사진 처럼 Data값과 다음 주소를 가르키고 있는 NEXT로 이루어져있는 걸로 생각 해봅시다.

Linked List의 특징인덱스로 값을 한번에 찾아갈 수 없습니다. 왜냐하면 인덱스를 이용 안 하거든요

찾아가려면 Head에 연결된 부분에서 Data값을 확인 후 아니면 Next 이런식으로 끝까지 가야합니다.

그럼 이런거에 장점이 뭐냐 싶은데 장점은 ArrayList나 Vector의 경우 값을 중간에 추가시키려면

전부를 다 밀어야합니다. 예를 들어 100개 인덱스까지 저장되어있는 건데 인덱스 2에 추가시키려면

2에서 99번까지 하나씩 밀어야 합니다.

하지만 Linked List는 NEXT의 주소를 추가하려는 거에 위에 사진처럼 가르키게하면 됩니다.

 

List <자료형> 객체명 = new LinkedList<자료형>();
List <String> list = new LinkedList<String>();

List <Board> list = new LinkedList<Board>();

 

list.add("내용"); 으로 추가 시킬 수 있습니다. 또한

list.add(인덱스,"내용")으로 해당 인덱스에 추가시킬 수 있습니다.

list.get(인덱스)로 해당 인덱스의 값을 반환 받을 수 있습니다.

list.size()로 해당 ArrayList의 사이즈를 알 수 있습니다.

list.remove(인덱스)로 해당 인덱스 값을 삭제 할 수 있습니다.

 

또한 Board라는 클래스를 이용한 객체를 자료형에 선언도 가능합니다.

이럴경우 get으로 접근 할때 board.subject로 접근하던가 아니면 값을 return해주는 getter있으면 됩니다.

 

값을 입력받아 넣을 때는 각각에 해당되는 생성자의 매개변수를 미리 입력받아 넣고 그걸 생성자로 선언해

add를 통해 차곡차곡 쌓으면 됩니다.

 

반응형
반응형
package collection_fram;

public class Board {
	String subject;
	String content;
	String writer;
	
	public Board(String subject , String content, String writer) {
		this.subject = subject;
		this.content = content;
		this.writer = writer;
	}
}
package collection_fram;

import java.util.*;

public class Vector_example {

	public static void main(String[] args) {
		
		// ArrayList랑 비슷하지만 Vector는 동기화된 메소드로 구성되어
		// 멀티 스레드가 동시에 이 메소드를 실행할 수 없다		
		
		List<Board> list = new Vector<Board>();
		list.add(new Board("제목1","내용1","글쓴이1"));
		list.add(new Board("제목2","내용2","글쓴이2")); 
		list.add(0,new Board("제목3","내용3","글쓴이3"));
		list.remove(1); // 1번 인덱스 제거
		System.out.println(list.size());
		Board board = list.get(0);
		System.out.println(list.get(0)); // collection_fram.Board@4361bd48
		System.out.println(board.subject); // 제목1
		System.out.println(board.content); // 내용1
		System.out.println(board.writer); // 글쓴이1
		System.out.println(list.get(1).subject);
		
		Scanner Scanf = new Scanner(System.in);
		
 		for (int i = 0 ; i < 3; i++) {
 			String title = Scanf.nextLine();
 			String inner = Scanf.nextLine();
 			String author =Scanf.nextLine();
 			Board temp = new Board(title,inner,author);
 			list.add(temp);
 		}		
	}

}

Vector배열과 유사하고 ArrayList와도 유사합니다.

둘다 최적의 스토리지 사용을 유지하기 위해 동적으로 증가 및 축소 되지만 크기 조정 방식은 다릅니다. 

ArrayList는 요소 수가 용량을 초과하면 현재 배열 크기의 50 %를 증가시키는 반면 

벡터는 100 % 증가하여 본질적으로 현재 배열 크기를 두 배로 늘립니다.

또한 Vector는 동기화되어서 멀티스레드가 동시에 실행하지 않아 ArrayList에 비해 느립니다.

 

List<자료형> 객체명 = new Vector<자료형>();

List<Board> list = new Vector<Board>();

 

list. add("내용"); 으로 추가 시킬 수 있습니다. 또한

list.add(인덱스,"내용")으로 해당 인덱스에 추가시킬 수 있습니다.

list.get(인덱스)로 해당 인덱스의 값을 반환 받을 수 있습니다.

list.size()로 해당 ArrayList의 사이즈를 알 수 있습니다.

list.remove(인덱스)로 해당 인덱스 값을 삭제 할 수 있습니다.

 

또한 Board라는 클래스를 이용한 객체를 자료형에 선언도 가능합니다.

이럴경우 get으로 접근 할때 board.subject로 접근하던가 아니면 값을 return해주는 getter있으면 됩니다.

 

값을 입력받아 넣을 때는 각각에 해당되는 생성자의 매개변수를 미리 입력받아 넣고 그걸 생성자로 선언해

add를 통해 차곡차곡 쌓으면 됩니다.

반응형
반응형
package collection_fram;

public class Board {
	String subject;
	String content;
	String writer;
	
	public Board(String subject , String content, String writer) {
		this.subject = subject;
		this.content = content;
		this.writer = writer;
	}
}
package collection_fram;

import java.util.*;

public class ArrayList_example {

	public static void main(String[] args) {
		// List 인터페이스의 클래스
		// 객체 삽입하거나 제거되었을 때 하나씩 밀려나는 특징 LinkedList에 비해 안 좋음
		// 채우는 순서는 정해져있음 0 부터 ~ 차근차근
		// 제거하거나 추가하는 경우 인덱스가 하나씩 밀린다
		// 그냥 배열하고 다른 점은 크기가 동적으로


		
		List<String> list = new ArrayList<String>(); // (40) 숫자 지정가능
		// List list = new ArrayList(); 일 경우 객체를 다 받지만 형변환 속도문제가 생김
		list.add("홍길동"); //맨 끝에 객체 추가
		list.add(1,"신용권2"); // 지정 인덱스에 삽입
		list.add(1,"신용권"); // 지정 인덱스에 삽입
		String str = list.get(1); // 인덱스 1값 반환
		System.out.println(str); // 신용권
		list.size(); // 객체 수
		list.remove(0); // 인덱스로 삭제
		list.remove("신용권"); // 객체명으로 삭제
		
		

		
		List<Board> list2 = new ArrayList<Board>(); 
		list2.add(new Board("제목1","내용1","글쓴이1"));
		list2.add(1,new Board("제목2","내용2","글쓴이2"));
		list2.add(new Board("제목3","내용3","글쓴이3"));
		list2.size(); // 1
		list2.remove(1);
		Board board = list2.get(1); // collection_fram.Board@26f0a63f
		System.out.println(board.subject); // 제목3
		System.out.println(board.content); // 내용3
		System.out.println(board.writer); // 글쓴이3
		
		Scanner Scanf = new Scanner (System.in);

 		for (int i = 0 ; i < 3; i++) {
 			String title = Scanf.nextLine();
 			String inner = Scanf.nextLine();
 			String author =Scanf.nextLine();
 			Board temp = new Board(title,inner,author);
 			list2.add(temp);
 		}

	}

}

컬렉션 프레임워크다수의 데이터를 쉽고 효과적으로 처리할 수 있는 표준화된 방법을 제공하는 클래스 집합입니다.

즉, 데이터를 저장하는 자료구조와 데이터 처리하는 알고리즘을 구현해 놓은 것입니다.

 

오늘은 그중 ArrayList에 대해서 알아보려고 합니다.

 

List 인터페이스에서 상속 받는 걸로 삽입되거나 삭제 될 때 하나씩 밀려나가는 특징이 있습니다.

채우는 순서가 정해져있습니다. (0번 인덱스 ~ ...)

배열과 아주 유사한데 다른 점은 크기를 동적으로 지정할 수 있습니다.

삽입과 삭제가 빈번한 데이터인 경우에는 부적합 합니다.

 

List<배열 자료형> list객체명 = new ArrayList<배열 자료형> (크기);

List<String> list = new ArrayList<String>(); 로 처음에 선언이 가능합니다. (동적으로 크기 변화)

List<String> list = new ArrayList<String>(40);처럼 크기를 정해줄 수 있습니다.

 

list. add("내용"); 으로 추가 시킬 수 있습니다. 또한

list.add(인덱스,"내용")으로 해당 인덱스에 추가시킬 수 있습니다.

list.get(인덱스)로 해당 인덱스의 값을 반환 받을 수 있습니다.

list.size()로 해당 ArrayList의 사이즈를 알 수 있습니다.

list.remove(인덱스)로 해당 인덱스 값을 삭제 할 수 있습니다.

 

또한 Board라는 클래스를 이용한 객체를 자료형에 선언도 가능합니다.

이럴경우 get으로 접근 할때 board.subject로 접근하던가 아니면 값을 return해주는 getter있으면 됩니다.

 

값을 입력받아 넣을 때는 각각에 해당되는 생성자의 매개변수를 미리 입력받아 넣고 그걸 생성자로 선언해

add를 통해 차곡차곡 쌓으면 됩니다.

 

 

반응형

'[Java] > [Java]' 카테고리의 다른 글

[Java] 자바 컬렉션프레임워크 LinkedList  (0) 2021.07.06
[Java] 자바 컬렉션프레임워크 Vector  (0) 2021.07.06
[Java] 자바 날짜 메소드  (0) 2021.07.03
[Java] 자바 Math 메소드  (0) 2021.07.03
[Java] 자바 토큰(Token)  (0) 2021.07.03
반응형
package date_method;

import java.text.SimpleDateFormat;
import java.util.*;

public class DateMethod {

	public static void main(String[] args) {
		Date now = new Date();
		String strNow1 = now.toString();
		System.out.println(strNow1);

		SimpleDateFormat sdf = new SimpleDateFormat
               ("yyyy년 MM월 dd일 HH시 mm분 ss초");
		String strNow2 = sdf.format(now);
		System.out.println(strNow2);

	}

}

Date클래스는 요일 / 월 / 일 / 시각 / KST(Korean Standard Time) / 년도 을 출력합니다.

 

SimpleDateForamt을 이용해 어떤 형식으로 보여지게 할지 형식을 변경할 수도 있습니다.

 

저는 새벽에 알바하면서 작업중입니다... 흑흑

 

https://github.com/SungJLee/My_Java_World.git

 

SungJLee/My_Java_World

Contribute to SungJLee/My_Java_World development by creating an account on GitHub.

github.com

 

반응형
반응형

 

package math_methods;

public class MathMethods {

	public static void main(String[] args) {
		System.out.println("절댓값");
		int v1 = Math.abs(-5);
		double v2 = Math.abs(-3.14);
		System.out.println("v1 = " + v1);
		System.out.println("v2 = " + v2);
		System.out.println();
		
		System.out.println("올림");
		double v3 = Math.ceil(5.3);
		double v4 = Math.ceil(-5.3);
		System.out.println("v3 = " + v3);
		System.out.println("v4 = " + v4);
		System.out.println();
		
		System.out.println("버림");
		double v5 = Math.floor(5.3);
		double v6 = Math.floor(-5.3);
		System.out.println("v5 = " + v5);
		System.out.println("v6 = " + v6);
		System.out.println();
		
		System.out.println("최댓값");
		int v7 = Math.max(5,  9);
		double v8 = Math.max(5.3, 2.5);
		System.out.println("v7 = " + v7);
		System.out.println("v8 = " + v8);
		System.out.println();
		
		System.out.println("최솟값");
		int v9 = Math.min(5, 9);
		double v10 = Math.min(5.3, 2.5);
		System.out.println("v9 = " + v9);
		System.out.println("v10 = " + v10);
		System.out.println();
		
		System.out.println("랜덤");
		// double v11 = Math.random(); // 0 ~ 1까지 랜덤
		int v11 = (int)(Math.random()*6) + 1;
		System.out.println("v11 = " + v11);
		System.out.println();
		
		System.out.println("가까운 정수");
		double v12 = Math.rint(5.3);
		double v13 = Math.rint(5.7);
		System.out.println("v12 = " + v12);
		System.out.println("v13 = " + v13);
		System.out.println();
		
		System.out.println("반올림");
		long v14 = Math.round(5.3);
		long v15 = Math.round(5.7);
		System.out.println("v14 = " + v14);
		System.out.println("v15 = " + v15);
		System.out.println();
		
		System.out.println("반올림 가공(소수점 두번째자리 반올림)");
		double value = 12.3456;
		double temp1 = value * 100; // 1번째 자리면 * 10
		System.out.println("temp1 = " + temp1);
		long temp2 = Math.round(temp1);
		System.out.println("temp2 = " + temp2);
		double v16 = temp2 / 100.0;
		System.out.println("v16 = " + v16);

	}

}

Maht.abs()

     절대값처리를 해줍니다.

 

Maht.ceil()

     소수점 올림처리를 해줍니다.

 

Maht.floor()

     소수점 버림처리를 해줍니다.

 

Maht.math()

     두 수중 최대값을 구해줍니다.

 

Maht.min()

     두 수중 최솟값을 구해줍니다.

 

Math.random()

     0 ~ 1까지 랜덤으로 나옵니다.

     *6은 6 나올 숫자가 6가지인거고 +1은 1부터 시작한다는 의미로 1 ~ 6까지 숫자가 랜덤으로 나옵니다.

 

Maht.rint()

     소수점까지 있을 때 가까운 정수를 구해줍니다.

 

Maht.round()

     반올림 처리를 해줍니다.

 

https://github.com/SungJLee/My_Java_World.git

 

SungJLee/My_Java_World

Contribute to SungJLee/My_Java_World development by creating an account on GitHub.

github.com

 

반응형