gnu

블로그 이미지
by 군우

TAG CLOUD

  • Total hit
  • Today hit
  • Yesterday hit

'Java/Java Concept'에 해당되는 글 42건

  1. 2018.05.20
    [Java] Eclipse 단축키
  2. 2018.03.14
    [Java] 레이아웃 매니져
  3. 2018.03.14
    [Java] EventHandler 정리
  4. 2018.03.13
    [Java] Swing 컴포넌트와 이벤트핸들링
  5. 2018.03.13
    [Java] I/O Stream
  6. 2018.03.13
    [Java] Thread synchronization 쓰레드 동기화
  7. 2018.03.13
    [Java] Thread
  8. 2018.03.13
    [Java] TreeMap
  9. 2018.03.13
    [Java] TreeSet<E>
  10. 2018.03.12
    [Java] HashSet, hash 알고리즘,

1. Ctrl + Shift + L : 이클립스 전체 단축키를 볼 수 있다.




2. Ctrl + F11 : 최근 실행한 Run 실행




3. Ctrl + D : 줄 삭제




4. Alt + ↑ , Alt + ↓ : 줄 위치 바꿈


   Alt +  ← , Alt +  → : 이전에 했던 Action



5. Ctrl + Shift + O : 사용하지 않는 import 삭제, 필요한 import 추가




6. Ctrl + H : 검색 창을 open




7. Ctrl + F : 찾기/바꾸기 창을 open




8. Ctrl + L : 입력한 라인의 줄로 이동




9. Ctrl + Page Up , Ctrl + Page Down : 코드 편집 창에 여러 개의 창이 띄워져 있을 경우 좌/우 창 이동




10. Ctrl + F6 : 현재 띄워져 있는 파일간 이동




11. Ctrl + F7 : 뷰간 이동 ( 네비게이션 )




12. Ctrl + W : 에디터 창 닫기





13. Ctrl + Shift + W : 열려있는 모든 에디터 창 닫기




14. Alt + Shift + A : 에디터모드, 다량의 데이터 복사 붗여넣기 가능, 드래그하여 영역 지정하여 수정 가능, 다수 커서이용 가능




15. Ctrl + / : 한줄 주석처리 토글


    - JAVA, javascript, properties 파일 등에서 가능


    - HTML, XML 파일에서 불가




16. Ctrl + Shift + / : 블록 주석처리 토글


     Ctrl + / : 블록 주석처리





17. Ctrl + Shift + F, Ctrl + I : 코드 포멧팅 ( 줄 맞춤 )




18. Ctrl + Shift + Delete : 현재 위치에서 라인 끝까지 삭제




19. Ctrl + Alt + ↓ : 한줄 복사 후 붙여넣기 ( 커서가 위치한 라인의 문장 정체를 복사하여 바로 아랫줄에 붙여넣음 )




20. Ctrl + Shift + Space : 메소드의 가로 안에 커서를 놓고 이 키를 누르면 파라메터 타입 힌트




21. Ctrl + K : 블럭으로 지정된 문자열을 찾는다. ( 같은 문서 내 )




22. Ctrl + Shift + K : 역으로 찾고자 하는 문자열을 찾아감




23. Ctrl + Shift + G : 해당 메서드, 객체, 변수가 사용(호출) 된 모든 곳을 찾는다.




24. Ctrl + Alt + G : 해당 문자열이 사용된 모든 곳을 찾는다. ( workspace 내 모든 파일 )




24. F3 : 선언 위치로 이동. 변수의 경우에는 변수가 선언된 위치로, 메소드의 경우에는 메소드의 본문이 있는 곳으로 이동




25. Ctrl + SpaceBar : 자동완성


    - sysout : System.out.println()


    - try : try ~ catch문


    - for : for문


    - do : do~while문


    - while : while문




26. Alt + Shift + J : 파일/메소드 자동 주석 생성




27. Ctrl + Q : 마지막으료 편집한 곳으로 이동




28. Ctrl + E : 다른 편집창으로 이동




29. Ctrl + M : 현재 뷰/편집창을 최대로 키움




30. Ctrl + Shift + C : 해당 line을 주석처리 ( HTML, XML 모두 가능 )




31. Ctrl + Shift + R : 파일 찾기




32. Ctrl + N : 프로젝트 생성 / 새로운 파일




33. F11 : 디버그 시작




34. Ctrl + Shift +X : 대문자로 변환 시킴


Ctrl + Shift + Y : 소문자로 변환 시킴




35. Ctrl + Shift + B : 현재 커서 라인에 브레이크 포인트 설정


[출처] [Eclipse] 유용한 이클립스 단축키|작성자 묵금








* xml 파일




Ctrl + Shift + /  => 주석 처리




Ctrl + Shift + \  => 주석 해제




Ctrl + Shift + F : 줄 정렬


'Java > Java Concept' 카테고리의 다른 글

[Java] 레이아웃 매니져  (0) 2018.03.14
[Java] EventHandler 정리  (0) 2018.03.14
[Java] Swing 컴포넌트와 이벤트핸들링  (0) 2018.03.13
[Java] I/O Stream  (0) 2018.03.13
[Java] Thread synchronization 쓰레드 동기화  (0) 2018.03.13
AND

배치관리자도 직접 만들 수 있다.

배치관리자 레이아웃 매니져


FlowLayout 배치관리자

 - 왼쪽에서 오른쪽으로 배치한다.

 - 중앙으로 정렬해가며 배치한다.

 - 한 줄에 모든 컴포넌트를 배치할 수 없을때는 다음 줄에 배치한다.


JPanel 컴포넌트

 - 컨테이너 클래스를 상속해서 JFrame 처럼 다른 컴퓨턴트를 얹을 수 있고,

배치 관리자의 지정도 가능하다. 

- jpanel은 눈에 보이는 성격의 컴포넌트가 아니다.


보더 레이아웃.

그리드 레이아웃.



getPreferredSize ()   

추천할만한 크기를 반환하는함수. 

플로우레이아웃도 이 메소드를 사용한다. 


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
package swing25;
 
import javax.swing.*;
import java.awt.*;
 
public class FlowLayoutManager {
 
    public static void main(String[] args)
    {
        JFrame frm = new JFrame("FlowLayout Test");
        frm.setBounds(120120400200);
        frm.setLayout(new FlowLayout());
        
        frm.add(new JButton("Hi"));
        frm.add(new JButton("Swing"));
        frm.add(new JButton("button"));
        
        frm.add(new LargeButton("Hi"));
        frm.add(new LargeButton("Swing"));
        frm.add(new LargeButton("button"));
        
        frm.setVisible(true);
    }
}
 
class LargeButton extends JButton 
{
    LargeButton(String str)
    {
        super(str); //상위생성자로 str넘겨주는 부분
    }
    
    public Dimension getPreferredSize()
    {
        Dimension largeBtmSz = new Dimension(
                super.getPreferredSize().width+30,
                super.getPreferredSize().height+15
                );
        return largeBtmSz;
    }
}
cs


'Java > Java Concept' 카테고리의 다른 글

[Java] Eclipse 단축키  (0) 2018.05.20
[Java] EventHandler 정리  (0) 2018.03.14
[Java] Swing 컴포넌트와 이벤트핸들링  (0) 2018.03.13
[Java] I/O Stream  (0) 2018.03.13
[Java] Thread synchronization 쓰레드 동기화  (0) 2018.03.13
AND
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
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
package swingTest1;
 
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
 
public class EventHandler {
 
    public static void main(String[] args){
        
        JFrame f1 = new MyJFrame("Title");            
    
        f1.setVisible(true); // 매개변수 ?
 
    }
}
 
class MouseEventHandler implements MouseListener
{
 
    @Override
    public void mouseClicked(MouseEvent e) {
        // TODO Auto-generated method stub
        JButton button1 = (JButton)e.getComponent();
        button1.setText("Clicked1");
        System.out.println("Clicked Button" + e.getComponent());
        System.out.println("눌렸다 풀림");
    }
 
    @Override
    public void mouseEntered(MouseEvent e) {
        // TODO Auto-generated method stub
        
    }
 
    @Override
    public void mouseExited(MouseEvent e) {
        // TODO Auto-generated method stub
        
    }
 
    @Override
    public void mousePressed(MouseEvent e) {
        // TODO Auto-generated method stub
        
    }
 
    @Override
    public void mouseReleased(MouseEvent e) {
        // TODO Auto-generated method stub
        
    }
    
}
 
class MyJFrame extends JFrame implements MouseListener
{
    MyJFrame(String title){
        setTitle(title);
        setSize(450220);
        setLocation(400200); // 합친게 setBounds
        //f1.setBounds(400, 200, 450, 220);
        setLayout(new FlowLayout()); // 이거 무슨 의미.
        // FlowLayout에 레이아웃제어를 
        addMouseListener(this);   // jframe에 마우스
    // Lisner를 등록하는 과정     //this를 쓸 생각을 못햇음.
        
        JButton btn1 = new JButton("My Button");
        MouseListener m1 = new MouseEventHandler();
        btn1.addMouseListener(m1);
        this.add(btn1);
    
        
    }
 
    @Override
    public void mouseClicked(MouseEvent e) {
        // TODO Auto-generated method stub
        System.out.println("jframe 눌려졌다가 풀림");
    }
 
    @Override
    public void mouseEntered(MouseEvent e) {
        // TODO Auto-generated method stub
        
    }
 
    @Override
    public void mouseExited(MouseEvent e) {
        // TODO Auto-generated method stub
        
    }
 
    @Override
    public void mousePressed(MouseEvent e) {
        // TODO Auto-generated method stub
        
    }
 
    @Override
    public void mouseReleased(MouseEvent e) {
        // TODO Auto-generated method stub
        
    }
}
cs


메인에서 하는  일을 최소화하여, 클래스를 나누어

class MyJFrame extends JFrame implements MouseListener

class MouseEventHandler implements MouseListener

 객체화시켰음. 


'Java > Java Concept' 카테고리의 다른 글

[Java] Eclipse 단축키  (0) 2018.05.20
[Java] 레이아웃 매니져  (0) 2018.03.14
[Java] Swing 컴포넌트와 이벤트핸들링  (0) 2018.03.13
[Java] I/O Stream  (0) 2018.03.13
[Java] Thread synchronization 쓰레드 동기화  (0) 2018.03.13
AND
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
package swing25;
 
import java.awt.*;
import javax.swing.*;
 
class FirstSwing
{    
    public static void main(String[] args)
    {
        JFrame frm=new JFrame("First Swing");
        frm.setBounds(120120400100);
        frm.setLayout(new FlowLayout());
        
        JButton btn1=new JButton("My Button");
        JButton btn2=new JButton("Your Button");
        JButton btn3=new JButton("Our Button");
        
        frm.add(btn1);        
        frm.add(btn2);        
        frm.add(btn3);
        frm.setVisible(true);
    }
}
cs

1. jframe 등록,  

2. jframe 인스턴스를 이용한 크기 위치 설정

3. botton 지정을위한 jframe 내의  레이아웃  설정.

4. 버튼 객체 인스턴스 추가

5. 버튼 인스턴스 등록 add()  // 만들고 등록해야함.

5. setVisible  // jFrame 을 보이게하는 것 해야함.


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
package swing25;
 
import java.awt.*;
import java.awt.event.*;
 
class FirstAWTExitEvent
{    
    public static void main(String[] args)
    {
        Frame frm=new Frame("First Swing");
        frm.setBounds(120120400100);
        frm.setLayout(new FlowLayout());
        
        WindowListener listen=new WindowAdapter()
        {
            public void windowClosing(WindowEvent ev)
            {
                System.out.println("close");
        System.exit(0);    // 프로그램의 종료를 명령하는 메소드 
            }
        };
        
        frm.addWindowListener(listen);
        
        Button btn1=new Button("My Button");
        Button btn2=new Button("Your Button");
        Button btn3=new Button("Our Button");
        
        frm.add(btn1);        
        frm.add(btn2);        
        frm.add(btn3);
        frm.setVisible(true);
    }
}
cs


종료 버튼을 눌렀을 때의 이벤트 핸들링

import java.awt.event.*;

        WindowListener listen=new WindowAdapter()
        {
            public void windowClosing(WindowEvent ev)
            {
                System.out.println("close");
        System.exit(0);    // 프로그램의 종료를 명령하는 메소드 
            }
        };

1. 윈도우 리스너 객체생성 WindowListener l1 = new WindowAdapter() 

2. {} 어나니머스 클래스


f1.setLayout(new FlowLayout());  프레임위에 올라간 button 들을 관리감독한다

FlowLayout 은 인스턴스이지만,  배치관리자라고 한다.

FlowLayout이라는 배치관리자





'Java > Java Concept' 카테고리의 다른 글

[Java] 레이아웃 매니져  (0) 2018.03.14
[Java] EventHandler 정리  (0) 2018.03.14
[Java] I/O Stream  (0) 2018.03.13
[Java] Thread synchronization 쓰레드 동기화  (0) 2018.03.13
[Java] Thread  (0) 2018.03.13
AND

일단 넘어가야겠다.


'Java > Java Concept' 카테고리의 다른 글

[Java] EventHandler 정리  (0) 2018.03.14
[Java] Swing 컴포넌트와 이벤트핸들링  (0) 2018.03.13
[Java] Thread synchronization 쓰레드 동기화  (0) 2018.03.13
[Java] Thread  (0) 2018.03.13
[Java] TreeMap  (0) 2018.03.13
AND

public synchronized void increment() { num++}


이런 메소드가 있을 때


t1, t2라는 쓰레드 인스턴스가 동시에 접근을 한다면

t1 이 접근중 일때 t2는 접근할 수 없다.


동시에 접근했을 때 문제가 생기는 메소드는 synchronized 하면

문제가 생기지 않지만


실행되고 빠져나갈때 필요로하는 리소스들이 아주많이 필요하다.

그로인해 엄청난 성능의 감소를 동반한다.  

그로인해 이런 동기화를 사용하는게 좋지 않다.

####

그래서  내가 원하는 문장만 동기화 할 수있는 동기화 블록이라는게 있다.

동기화 블록이 더 섬세한 방법이다. 

public int aad(){  

synchronized(this) {  opCnt++}

여기서 this는  add가 있는 인스턴스를 의미한다.



####

synchronized 기반 동기화 메소드의 정확한 이해


synchronized 로 선언된 메소드는 모두 자물쇠가 걸렸다 생각하면 된다.

열쇠를 가져야 들어갈 수 있다.

모든 인스턴스는 열쇠가 있다, 그 인스턴스가 호출하기위한 메소드


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
package thread23;
 
public class SyncObjectKey {
    public static void main(String[] args)
    {
        NumSum ns = new NumSum();
        
        InfoThread th1 = new InfoThread(ns);
        InfoThread th2 = new InfoThread(ns);
        
        th1.start();
        th2.start();
    }
}
 
class InfoThread extends Thread
{    
    NumSum NS;
    int num;
    InfoThread(NumSum NS)
    {
        this.NS = NS;
    }
    public void run()
    {
        NS.doAdd1();
        NS.doAdd2();
        
        NS.showNum();
    }
}
 
class NumSum
{
    int num;
    public void doAdd1(){synchronized (this){ num +=1;} }
    public void doAdd2(){synchronized (this){ num +=1; }}
    public void showNum(){
        synchronized (this){ System.out.println("num ="+ num);}
    }
}
cs


wait, notify, notifyall

public final void wait() throws InterruptedException

 - 위의 함수를 호출한 쓰레드는 notify 또는 notifyAll 메소드가 호출될 때까지

블로킹 상태에 놓이게 된다.

public final void notify()

 - wait 함수의 호출을 통해서 블로킹 상태에 놓여있는 쓰레드를 하나를 깨운다

public final void notifyAll()

 - wait 함수의 호출을 통해서 블로킹 상태에 놓여있는 모든 쓰레드를 깨운다.


####

synchronized 키워드의 대체

ReentrantLock   


'Java > Java Concept' 카테고리의 다른 글

[Java] Swing 컴포넌트와 이벤트핸들링  (0) 2018.03.13
[Java] I/O Stream  (0) 2018.03.13
[Java] Thread  (0) 2018.03.13
[Java] TreeMap  (0) 2018.03.13
[Java] TreeSet<E>  (0) 2018.03.13
AND

쓰레드와 동기화


실행중인 프로그램을 프로세스라고 함.

운영체제 입장에서 가상머신은 하나의 프로그램이므로 

가상머신도 프로세스이다.


자바가상 머신위에서도 동작하는 프로그램도 프로세스라고 얘기한다.

프로세스는 os관점에서 프로그램의 흐름을 이루는 하나의 독립적인 흐름을 의미한다.



프로세스는 쓰레드를 담는 그릇이고  실제 역할을 담당하는 것은 쓰레드다.

프로세스 실행과 동시에 만들어진다. 그 쓰레드가 메인 쓰레드이다.


쓰레드는 모든 일의 기본 단위이다. main 메소드를 호출하는 것도 프로세스 생성시

함께 생성되는 main 쓰레드를 통해서 이뤄진다.


쓰레드간의 힙을 공유한다.

메소드영역도 공유한다.

하지만 스택은 공유 할 수 없다.

각 실행별 스택이 독립적으로 존재 해야한다 .

쓰레드가 별도의 실행흐름을 갖기 때문에 스택을 별도로 가질 수 밖에 없다.


쓰레드 클래스

쓰레드를 생성하기위해서 쓰레드가 할일을 정의해놓은 클래스를 말한다.

run이라는 메소드를 오버라이딩하는데 이게 쓰레드의 MAIN메소드이다.

1. 쓰레드를 상속하는 클래스를 정의하고

2. 그 안에서 run이라는 메소드 정의해야한다.

3. 쓰레드 호출하는 인스턴스를 만든다.

4. 인스턴스를 이용해서 s.start()메소드로 실행한다.


run이라는 메소드도 main처럼 쓰레드의 생성과동시에 호출된다.

start를 런의 실행뿐만 아니라 쓰레드의 물리적생성 등등의 생성을 함께

명령하는 것이다.


프로세스안의 모든 쓰레드가 종료가되어야지 프로세스도 함께 종료가됩니다.  

쓰레드는 run메소드의 실행이 완료가되면 종료가 된다.


쓰레드클래스를 인스턴스화해서 런메소드를 호출하는데, 

인스턴스가 쓰레드라고하기도 하는데, 사실 쓰레드의 인스턴스이고

실행흐름을 위한 모든것을 쓰레드라고 할 수 있다. 

하지만 인스턴스도 편의상 쓰레드라고 한다.


쓰레드를 사용하는  두 클래스이다.

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
package thread23;
 
import java.util.concurrent.SynchronousQueue;
 
public class ThreadUnderstand
{
    public static void main(String[] args)
    {
        ThreadInfo th1= new ThreadInfo("th1");
        ThreadInfo th2= new ThreadInfo("th2###",600);
        
        th1.start();
        th2.start();
    }
}
 
class ThreadInfo extends Thread    
{    //쓰레드 정보를 모아놓은 쓰레드 상속하는 클래스
    String str;
    int num=100;
    
    ThreadInfo(String str)
    {
        this.str = str;
    }
    ThreadInfo(String str, int num)
    {
        this.str = str;
    }
    
    public void run()    //쓰레드 실행시 
    {
        System.out.println("RUN RUN");
        for(int a = 0; a<10;a++)
        {
            System.out.println(str);
            try
            {
                sleep(num);
            }
            catch(InterruptedException e)
            {
                System.out.println("err   @@");
                e.printStackTrace();
            }
        }
    }
}
cs


'Java > Java Concept' 카테고리의 다른 글

[Java] I/O Stream  (0) 2018.03.13
[Java] Thread synchronization 쓰레드 동기화  (0) 2018.03.13
[Java] TreeMap  (0) 2018.03.13
[Java] TreeSet<E>  (0) 2018.03.13
[Java] HashSet, hash 알고리즘,  (0) 2018.03.12
AND

TreeMap<K,V> 클래스는


KEY 값과  VALUE 값으로 이루어져 있다.

 

키값은 중복을 허용하지 않는다.


tM.put(1,"a")


키값을 보유하고 있는   NavigableSet<Integer> t1 = tM.navigableKeySet();

을 사용한다.


내림차수로 바꿔출력하려면

itr = navi.descendingIterator(); 를 사용한다.


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
package framework22;
 
import java.util.Iterator;
import java.util.NavigableSet;
import java.util.TreeMap;
 
public class IntroTreeMap {
    public static void main(String[] args)
    {
        TreeMap<Integer , String> tMap = new TreeMap<Integer, String>();
        
        tMap.put(1"a");
        tMap.put(3"c");
        tMap.put(2"b");
        
        NavigableSet<Integer> navi= tMap.navigableKeySet(); //키정렬
        // 키값을 보유하고 있음.
        System.out.println(" 오름차순");
        Iterator<Integer> itr = navi.iterator();
        while(itr.hasNext())
            //System.out.println(itr.next());// 이렇게하면 index부분
            System.out.println(tMap.get(itr.next()));
        
        System.out.println("descendingItrator");
        itr = navi.descendingIterator();  // 내림차순으로 바꾸는 부분
        while(itr.hasNext())
            System.out.println(tMap.get(itr.next()));
        //tMap.get(itr.next()));  //인덱스의 값, 
        // itr.next() //             인덱스 .
    }
}
 
cs


1
2
3
4
5
6
7
8
9
//출력화면
 오름차순
a
b
c
descendingItrator
c
b
a
cs


'Java > Java Concept' 카테고리의 다른 글

[Java] Thread synchronization 쓰레드 동기화  (0) 2018.03.13
[Java] Thread  (0) 2018.03.13
[Java] TreeSet<E>  (0) 2018.03.13
[Java] HashSet, hash 알고리즘,  (0) 2018.03.12
[Java] LinkedList  (0) 2018.03.12
AND

TreeSet<E>  클래스

 - 트리라는 자료구조를 기반으로 데이터를 저장한다

 - 데이터를 정렬된 순서로 저장함

 - HashSet<E> 와 마찬가지로 데이터 중복저장 않는다

 - 정렬의 기준은 프로그래머가 직접 정의한다.



값을 참조할때는 iterater로 참조함으로  저장의 순서는 상관이 없다


기준은 compareTo에서 오버라이딩해야함


iterator메소드는 오름차순을 보장한다.



1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
package framework22;
 
import java.util.Iterator;
import java.util.TreeSet;
 
public class SortTreeSet {
    public static void main(String[] args){
        TreeSet<Integer> tr = new TreeSet<Integer>();
        
        tr.add(3);
        tr.add(2);
        tr.add(1);
        tr.add(5);
        tr.add(1);
        
        Iterator<Integer> itr = tr.iterator();
        while (itr.hasNext())
        {
            System.out.println(itr.next());
        }
    }
}
cs


출력 할때는  

Iterator<Integer> itr = tr.iterator();  을 사용한다.

아이터레터는 처음부터  접근한다.


1
2
3
4
5
//출력화면
1
2
3
5
cs



//

오름차순 내림차순 정렬을 하는데, 항상 같은자료형 하나만있는 것이 아니다

그래서 그 정렬의 기준을 프로그래머가 직접해줘야하는데 

새로 만든 클래스는 name 스트링 값과 age나이인 인트값을 가지고 있는 

Person  클래스를 만들었다.

Person 클래스는 Comparable<Person> 을 implements하고 있고

compareTo 메소드를 오버라이딩하여 비교의 설정을 직접하고 있다.

또 메인에서 대상을 넣을때 tr.add()를 사용하는데 그 매개변수는

new Person("a",3);  새로운 인스턴스의 생성자를 통해 생성하고 있다.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
package framework22;
 
import java.util.Iterator;
import java.util.TreeSet;
 
public class PracTreeSet {
    public static void main(String[] args)
    {
        TreeSet<Person> tr = new TreeSet<Person>();
        // 여기도 틀림 Integer 클래스형이 아니고  Person형 으로 바꿔야함.
        /*        // 만드는게 이렇게 만드는게 아니고 ,
        Person p1 = new Person("kim", 30);
        Person p2 = new Person("gk", 26);
        */
        
        tr.add(new Person("Lee"22));
        tr.add(new Person("Kim"26));
        tr.add(new Person("jung"21));
        
        Iterator<Person> itr = tr.iterator();
        while(itr.hasNext())
            System.out.println(itr.next());
    }
}
cs


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
package framework22;
import java.util.HashSet;
import java.util.Iterator;
 
public class Person implements Comparable<Person> {
    String name;
    int age;
    
    public Person(String name, int age)
    {
        this.name = name;
        this.age = age;
    }
    public String toString()
    {
        return name+"("+age+"세)";
    }
    public int hashCode()
    {
        return age%3;
    }
    public boolean equals(Object obj)
    {
        Person per = (Person)obj;
        if(per.name == name){
            if(per.age ==age){    return true;    }
            else {return false; }
        }
        else{    return false;    }
    }
    @Override
    public int compareTo(Person p) {
        // TODO Auto-generated method stub
        if(age > p.age){
            return 1;
        }
        else if(age< p.age){
            return -1;
        }
        else{
            return 0;    
        }        
    }
}
cs


//출력화면

1
2
3
jung(21세)
Lee(22세)
Kim(26세)
cs


'Java > Java Concept' 카테고리의 다른 글

[Java] Thread  (0) 2018.03.13
[Java] TreeMap  (0) 2018.03.13
[Java] HashSet, hash 알고리즘,  (0) 2018.03.12
[Java] LinkedList  (0) 2018.03.12
[Java] framework Arraylist  (0) 2018.03.12
AND

hashCode 와 equals 오버라이딩을 통해서 

데이터가 입력되는 두개의 값이 둘다 같아야 중복 허용하는

해쉬알고리즘 


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
package framework22;
 
import java.util.HashSet;
import java.util.Iterator;
 
public class HashTest1 {
    public static void main(String[] args)
    {
        HashSet<Person> hSet = new HashSet<Person>();
        hSet.add(new Person("김김김"10));
        hSet.add(new Person("김김김"10));
        hSet.add(new Person("김이"13));
        hSet.add(new Person("김이"12));
        hSet.add(new Person("김"12));
        
        
        System.out.println("저장된 데이터 수: "+ hSet.size());
        
        Iterator<Person> itr = hSet.iterator();
        while(itr.hasNext())
            System.out.println(itr.next());
    }
}
cs


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
package framework22;
import java.util.HashSet;
import java.util.Iterator;
 
public class Person {
    String name;
    int age;
    
    public Person(String name, int age)
    {
        this.name = name;
        this.age = age;
    }
    public String toString()
    {
        return name+"("+age+"세)";
    }
    public int hashCode()
    {
        return age%3;
    }
    public boolean equals(Object obj)
    {
        Person per = (Person)obj;
        if(per.name == name){
            if(per.age ==age){    return true;    }
            else {return false; }
        }
        else{    return false;    }
    }
}
cs


1
2
3
4
5
6
//출력값
저장된 데이터 수: 4
김이(12세)
김(12세)
김김김(10세)
김이(13세)
cs


'Java > Java Concept' 카테고리의 다른 글

[Java] TreeMap  (0) 2018.03.13
[Java] TreeSet<E>  (0) 2018.03.13
[Java] LinkedList  (0) 2018.03.12
[Java] framework Arraylist  (0) 2018.03.12
[Java] 제네릭클래스의 와일드카드 이용하기.  (0) 2018.03.12
AND

ARTICLE CATEGORY

분류 전체보기 (197)
C (0)
HTML (7)
C# (88)
Python (27)
IT (0)
Android (2)
Java (65)
Java Concept (42)
Java Training (23)
Study (5)
JavaScript (1)
JSP (2)

RECENT ARTICLE

RECENT COMMENT

CALENDAR

«   2025/04   »
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

ARCHIVE

LINK