1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
 
import java.util.Arrays;
import java.util.LinkedList;
 
public class Z21_InsertionSort {
//    public static void main(String[] args) {
//        int[] arr= {6,4,8,5,7,2,9,3,0,1};
//        
//        for(int i=1;i<arr.length;i++) {
//            //삽입할 위치를 찾아 넣기
//            for(int j=i-1;j>=0;j--) {
//                if(arr[j]>arr[j+1]) { //뒤쪽에서 앞으로
//                    int temp = arr[j+1];
//                    arr[j+1]= arr[j];
//                    arr[j]=temp;
//                }
//            }
//        }
//        
//        for(int i=1;i<arr.length;i++) {
//            //삽입할 위치를 찾아 넣기
//            int num=arr[i];
//            int j;
//            for(j=i-1;j>=0;j--) {
//                if(arr[j]>num) { //뒤쪽에서 앞으로
//
//                    arr[j+1]= arr[j];
//
//                } else {
//                    break; //성능을 높일 수 있다.
//                }
//            }
//            arr[j+1] = num;
//        }
//        System.out.println(Arrays.toString(arr));
//    }
    
    public static void main(String[] args) {
        //Linked List 사용하기
        //Swap(쉬프트)작업을 안하는 것으로 성능을 개선
        
        int[] arr= {6,4,8,5,7,2,9,3,0,1};
        LinkedList<Integer> ll = new LinkedList<Integer>();
        
        for(int i=0;i<arr.length;i++) {
            int idx=0;
            for(idx = 0; idx<ll.size();idx++) { //정렬된 데이터에 삽입할 위치 찾기.
                if(arr[i]<ll.get(idx)) {
                    break//삽입은 밖에서.
                    //0번째에서는 데이터가 없으니 해당 포문을 돌지않아 데이터가 들어가지 않는다.
                }
            }
            ll.add(idx,arr[i]); //ll의 idx번째 자리에 arr[i]를 삽입
        }
        System.out.println(ll);
    }
}
 
cs

'Computer Science > Algorithms' 카테고리의 다른 글

[java] Dijkstra 다익스트라 알고리즘  (0) 2019.02.19
Kruskal 크루스칼 알고리즘  (0) 2019.02.18
DisjointSets  (0) 2019.02.18
Permutation 순열  (0) 2019.01.17
Dijkstra 최단경로 알고리즘  (2) 2019.01.08
멀티 스레드 Multi Thread

멀티 스레드 Multi Thread

프로세스 : 실행중인 프로그램

프로그램 : 만들어졌는데 아직 실행되지 않고 하드디스크에 저장된 상태

 

스레드 : 프로세스를 실행시켜 준다.

main이 쓰레드다. main이 없으면 실행 안됨.

 

 

  • 멀티쓰레드의 장/단점

    • CPU사용률 향상
    • 응답성 향상
    • 자원 공유 -> 효율성 증대
    • Context Switching 비용 발생

 

  • 자바에서는 멀티스레드의 순서가 보장되지 않는다.

 

 

메소드 상태(cycle) - 5가지.

 

 

running 이후 할당된 시간이 끝나면 다시 runnable 상태로 대기줄에 서게된다.

  • new => runnable 로 갈때 꼭! start() 라는 메소드를 호출해줘야 한다.
  • yield()

    running에서 양보하라고 메소드를 호출할 수 있다.

    runnable 대기큐를 체크해서 자기보다 우선순위가 높거나 같은애가 있다면 양보한다.

    우선순위가 높은애가 없으면 양보하지않는다.

 

 

< Thread를 만드는 방법 두가지 >

  1. Runnable 인터페이스 구현

 

  1. thread 클래스 상속

 

 

if ) 어떤 클래스에서 thread를 써야겠다.

-> 아무것도 상속받지 않은 상태라면 implements도 되고, 상속도 됨.

-> 어떤 클래스를 상속하고 있다면 implements만 가능

(공통) 쓰레드가 해야하는 작업내용이 들어있는 메소드를 만들어놔야한다.

 

 

callback method

 

 

 

<실행결과>

 

캡처

Thread객체 생성시 parameter로 Runnable 타입의 객체를 받을 수 있다.

 

 


  1. main에서 m 생성
  1. 생성자로 들어가서 thread t 생성
  2. t.join (); //Waits for this thread to die
  3. main이 t스레드가 끝날때까지 기다려줌
  1. main thread 실행

    **) main thread가 우선순위가 더 높기때문에 default상태로는 먼저 실행

 

'Computer Science > Languages' 카테고리의 다른 글

[java 예외처리]Try-with-resources  (2) 2019.07.11
java tip  (0) 2019.02.18
[java] 예외처리  (2) 2019.01.24
[java] Collection 활용  (0) 2019.01.17
[java] interface  (0) 2019.01.16

메소드 선언할때는 throw

실제로 사용할떄는 throws


stream

1. 입력용 - InputStream(데이터 읽어오는 스트림)

   출력용 - OutputStrema(데이터 출력하는 스트림)


2. 데이터 전송 단위

 bytue Stream(1 byte에 코드값을 담아 전송하느 스트림); InputStream/OutputStream

 character Stream(2 byte에 코드값을 담아 전송하느 스트림); Reader / Writer


3. 데이터와의 연결 여부

  Node Stream(데이터와 직접 연결되어 있는 스트림)

  Process Stream(Filter Stream) Node Stream으로부터 데이터를 받아 가공하는 스트림


  • 접근지정자

    자식이 범위가 더 커지는건 ok

    좁아지는거 안됨

  • 예외처리

    자식이 더 큰 예외를 throw하면 안됨.


메소드 이름 선언할때는 throws

실제로 발생시킬 때는 throow

'Computer Science > Languages' 카테고리의 다른 글

java tip  (0) 2019.02.18
[java] 쓰레드(Thread)  (0) 2019.01.24
[java] Collection 활용  (0) 2019.01.17
[java] interface  (0) 2019.01.16
[Java] final, static  (0) 2019.01.16
배열

배열

순차적 접근속도 가장 빠름.

비순차적 삽입/삭제

크기 변경 불가

 


 

List

순서가 있으므로, 데이터의 중복 허용.

ArrayList

내부적으로 배열로 구현

배열크기 변경 가능. --> 크기를 미리 모를때 사용

순차적

 

LinkedList

Node로 구현

비순차적 삽입/삭제에 최적

접근성이 떨어진다. (인덱스가 없으므로 처음부터 하나씩 방문해야 함)

 

Set

 

순서가 없다.

주머니에 구슬을 넣는 모양. (중복된 데이터를 넣으면 구분이 불가능하므로 허용하지 않는다.)

중복불가. 중복된 데이터가 삽입 시도 -> 원래 데이터만 살아남고 중복된 데이터 삽입 불허.

HashSet

hasing기법을 사용해 중복 체크 O(1)

데이터가 많을떄 빠르게 검색할수 있는 가장 좋은 자료구조

 

TreeSet

Binary Search Tree로 중복 체크 O(logN)

정렬을 자주 실행해야 하는 경우.

 

Map

키 : 값

"바나나" : 5000

"사과" : 5000

key로 값을 구분할 수 있기 때문에 중복허용

단, key는 중복될 수 없다.

만약 중복 키가 들어오면 --> 덮어쓰기. (기존데이터 지우고) <Set과 비교>

왜? 키는 중복되더라도 새로운 데이터가 있을수 있기 때문.

HashMap

데이터가 많을떄 빠르게 검색할수 있는 가장 좋은 자료구조

 

TreeMap

정렬을 자주 실행해야 하는 경우.

 

'Computer Science > Data Structure' 카테고리의 다른 글

해시테이블 Hashtable  (2) 2019.05.06
Merge Sort 병합정렬  (4) 2019.01.29

순열 흐름도


n P k

재귀함수 종료조건 if( len == k )

즉 고른 숫자의 길이가 K일때 함수 종료.


흐름도에서 밑으로 레벨이 한단계 깊어질 수록 len이 +1 된다.

k = 1이면 len=1까지 (1레벨)만 진행되고,

k = 4일때 (즉 , 4 P 4 ) 일때 가장 깊은 레벨까지 재귀함수가 실행된다.


종료 조건 안의 배열 print는 len==k 길이 만큼 된다.

크기가 4인 배열의 함수에 숫자가 들어있어도 len(=k)만큼만 출력된다.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
#include <iostream>
#include <memory.h>
int n = 2//n개를 골라라
int m = 4//인덱스범위
int arr[4];
int idx[4]={0,1,2,3};
 
void permutation(int len){
    if(len == n){
        for(int i=0 ;i<len;i++){
            printf("%d ", idx[i]);
        }
        printf("\n");
        return;
    }
    
    for(int i=len;i<m;i++){
        swap(i,len);
        permutation(len+1); //len을 증가시키기 위함
        swap(i,len);
    }
    
    
}
 
int main(int argc, const char * argv[]) {
    
    permutation(0);
 
    return 0;
}
 
cs


'Computer Science > Algorithms' 카테고리의 다른 글

[java] Dijkstra 다익스트라 알고리즘  (0) 2019.02.19
Kruskal 크루스칼 알고리즘  (0) 2019.02.18
DisjointSets  (0) 2019.02.18
[java] Insertion Sort 삽입정렬  (0) 2019.01.28
Dijkstra 최단경로 알고리즘  (2) 2019.01.08
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
jpackage com.util;
 
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
 
public class CollectionTest {
    public static void main(String[] args) {
        List fruits = new ArrayList<>();
//        fruits.add("apple");
//        fruits.add("orange");
//        fruits.add("banana");
        
        //1.addAll
        Collections.addAll(fruits, "apple","orange","banana");
        
        //2. sort
        Collections.sort(fruits);
        System.out.println(fruits.toString());
        
        //3. search
        Collections.sort(fruits);
        System.out.println(Collections.binarySearch(fruits, "banana"));
        System.out.println(Collections.binarySearch(fruits, "grape"));
    
        //4. copy
        List list = new ArrayList();
        Collections.addAll(list, "one","two","three","four");
        Collections.copy(list, fruits);
        System.out.println(list.toString());
        
        //5. fill
        Collections.fill(list, "filled with dummy data");
        System.out.println(list.toString());
    }    
}
 
cs


'Computer Science > Languages' 카테고리의 다른 글

[java] 쓰레드(Thread)  (0) 2019.01.24
[java] 예외처리  (2) 2019.01.24
[java] interface  (0) 2019.01.16
[Java] final, static  (0) 2019.01.16
JAVA 입출력  (2) 2019.01.08

Design Pattern(설계패턴)

Singleton pattern

어플리케이션 전체에서 객체 한개만 생성해서 사용하는 패턴

객체 한개를 공유해서 사용

두개 만들면 데이터의 동기화가 어려운 경우

 

SingletohObject.java

 

SingletohObjectUser.java

 

 

interface

interface

인터페이스는 상수와 구현되지 않은 메소드로만 구성된다.

추상 아닌것도 필요한데요? ---> 추상클래스 이용 !! interface X

인터페이스 상속 implements

다중상속을 지원하기 위함.

인터페이스 안의 필드는 기본으로 static, final

인터페이스 안의 메소드는 public abstract

 

자식클래스에서는 implements로 상속하고, 부모가 가지고 있던 메소드를 반드시 완성시켜야 한다.

 

 

 

'Computer Science > Languages' 카테고리의 다른 글

[java] 쓰레드(Thread)  (0) 2019.01.24
[java] 예외처리  (2) 2019.01.24
[java] Collection 활용  (0) 2019.01.17
[Java] final, static  (0) 2019.01.16
JAVA 입출력  (2) 2019.01.08

+ Recent posts