Notice
Recent Posts
Recent Comments
Link
«   2026/03   »
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
Tags
more
Archives
Today
Total
관리 메뉴

brograming

[JAVA] lang 패키지, 컬렉션(ArrayList)_Day10 본문

Kosta

[JAVA] lang 패키지, 컬렉션(ArrayList)_Day10

brograming 2023. 2. 27. 14:52

1. lang 패키지

1) Object

   ㆍ자바의 모든 클래스가 상속받는 대모 클래스   

   ㆍ멤버 변수 없이 메서드로만 구성된 클래스

   ㆍObject클래스가 갖는 메서드는 모든 메서드

 

Object가 갖는 클래스

clone : 메모리 복사. 객체를 복사

equals : 객체가 같은지 다른지 비교. 같으면 true, 다르면 false 반환

hashCode : 참조값 반환

getClass : Class를 반환하는 메서드. Class 클래스 정보객체

toString : 객체 설명 문자열 반환. 클래스명@참조값

wait : (쓰레드 사용 시)

notify : (쓰레드 사용 시)

notifyAll  : (쓰레드 사용 시)

...

 

 

clone, hashCode 예제)

package langtest;

class MyClone implements Cloneable{
	int a;
	int b;
	
	public MyClone() {}
	
	public MyClone(int a, int b) {
		super();
		this.a = a;
		this.b = b;
	}

	//객체 메모리 복사
	@Override
	protected Object clone() throws CloneNotSupportedException {
		// TODO Auto-generated method stub
		return super.clone();
	}

	@Override
	public String toString() {
		return "MyClone [a=" + a + ", b=" + b + "]";
	}
	

}
public class CloneTest {

	public static void main(String[] args) {
		
		//객체 직접 복사
		MyClone m1 = new MyClone(4,5);
		MyClone m2 = new MyClone();
		m2.a = m1.a;
		m2.b = m1.b;
		
		System.out.println(m1 + " / 참조값 : " + m1.hashCode());   // hashCode : 참조값 반환
		System.out.println(m2 + " / 참조값 : " + m2.hashCode());
	
		// clone()으로 객체 복사
		try {
			MyClone m3 = (MyClone)m1.clone();      // MyClone으로 다운캐스팅
			System.out.println(m1 + " / 참조값 : " + m1.hashCode());   
			System.out.println(m3 + " / 참조값 : " + m3.hashCode());
		} catch (CloneNotSupportedException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}          
	}

}
MyClone [a=4, b=5] / 참조값 : 1865127310
MyClone [a=4, b=5] / 참조값 : 1586600255
MyClone [a=4, b=5] / 참조값 : 1865127310
MyClone [a=4, b=5] / 참조값 : 474675244

 

equals 예제)

package langtest;

class Member{
	String id;
	String pwd;
	
	public Member() {}
	public Member(String id, String pwd) {
		this.id = id;
		this.pwd = pwd;
	}
	
	
	@Override             //↓업캐스팅 파라미터로 들어온 객체는 Object로 업캐스팅되어서 들어옴
	public boolean equals(Object obj) {     //equals 재정의
		if(obj instanceof Member) {  // 모든 클래스의 부모는 object이기 때문에 타입비교를 통해서 정확한 객체를 확인해야함
			Member m = (Member)obj;  // 멤버로 다운캐스팅
			if(this.id.equals(m.id) && this.pwd.equals(m.pwd)){
				return true;
			}
		}
		
		return false;
	}
	
	@Override
	public String toString() {
		return "Member [id=" + id + ", pwd=" + pwd + "]";

	
	}

}
public class EqualsTest {

	public static void main(String[] args) {
		
		Member m1 = new Member("aaa", "111");
		Member m2 = new Member("aaa", "123");
		Member m3 = new Member("aaa", "111");
		Member m4 = m1;
		
		//==으로 객체를 비교하면 참조값 비교
		//equals로 객체를 비교하면 객체의 값을 (멤버변수값) 비고
		//Object 클래스의 equals는 ==으로 객체 비교
		// 위 equals 메서드를 재정의를 했기 때문에 아래의 값이 달라짐.
		System.out.println("m1 == m2 : " + (m1 == m2));              //false
		System.out.println("m1.equals(m2) : " + m1.equals(m2));      //false
		System.out.println("m1 == m3 : " + (m1 == m3));              //false(f3은 new로 또 다른 객체를 생성했기 때문에 참조값 다름) 
		System.out.println("m1.equals(m3) : " + m1.equals(m3));      //true (객체의 내용이 같으냐 다르냐)
		System.out.println("m1 == m4 : " + (m1 == m4));              //true
		System.out.println("m1.equals(m4) : " + m1.equals(m4));      //true
	}

}

 

2) String

   ㆍ문자열 처리 클래스

 

equals : 문자열 비교

 

String 예제 1)

package langtest;

public class StringTest {

	public static void main(String[] args) {
		
		
		//String 생성의 다양한 종류
		String s1 = "asdf";
		String s2 = new String(s1);
		String s3 = new String("345");
		char[] ch = {'h', 'e', '1', '1', 'o'};
		String s4 = new String(ch);
		byte[] b = {'h', 'e', '1', '1', 'o'};   // 아스키 코드 값 저장
		String s5 = new String(b);
	
		
		System.out.println(s1);
		System.out.println(s2);
		System.out.println(s3);
		System.out.println(s4);
		System.out.println(s5);
		
		
				
	}

}

 

String 예제 2)

package langtest;

public class StringMethod {

	public static void main(String[] args) {
		String a = "abcafewc";
		String b = "def,lij,ske,xil";
		
		System.out.println("a : " + a);
		System.out.println("b : " + b);
		System.out.println("a.charAt(1) : " + a.charAt(1)); // 1번째 자리
		System.out.println("a.concat(b) : " + a.concat(b));  // a와 b 결함
		System.out.println("a.indexOf(\"c\") : " + a.indexOf("c"));  // c의 위치
		System.out.println("a.lastIndexOf(\"a\") : " + a.lastIndexOf("a")); // 끝에서 a찾기
		System.out.println("a.length() : " + a.length()); // 문자길이
		System.out.println("a.replace(\"fe\", \"kkk\") : " + a.replace("fe", "kkk"));
		System.out.println("a.toUpperCase() : " + a.toUpperCase());  // 대문자
		System.out.println("a.substring(2, 6) : " + a.substring(2, 6)); // 자르기것을 추출
		String[] arr = b.split(",");  // ","기준으로 문자열 자르기. 배열로 반환
		for(int i = 0; i < arr.length; i++) {
			System.out.println(arr[i]);
		}
		
	}

}
a : abcafewc
b : def,lij,ske,xil
a.charAt(1) : b
a.concat(b) : abcafewcdef,lij,ske,xil
a.indexOf("c") : 2
a.lastIndexOf("a") : 3
a.length() : 8
a.replace("fe", "kkk") : abcakkkwc
a.toUpperCase() : ABCAFEWC
a.substring(2, 6) : cafe
def
lij
ske
xil

 

3) StringBuilder

   ㆍ문자열 처리 클래스

   ㆍString 클래스와 다르게 내부 버퍼를 가지고 있어서 문자열을 결합하거나 조작하는게 빠르다   

 

StringBuilder 예제 )

package langtest;

import java.util.Scanner;

public class StringBuilderTest {

	public static void main(String[] args) {
		
		//StringBuilder 생성
		StringBuilder sb = new StringBuilder();
		sb.append("aaa");  // 문자열 끝에 추가
		sb.append("bbb");  // 문자열 끝에 추가
		sb.append("ccc");  // 문자열 끝에 추가
		System.out.println(sb.toString()); //String으로 반환
		System.out.println("sb.indexOf(\"ab\") : " + sb.indexOf("ab"));
		sb.insert(2, "kkk");
		System.out.println(sb.toString());
		sb.delete(3,5);
		System.out.println(sb.toString());
	
		Scanner sc = new Scanner(System.in);
		String txt = "";
		StringBuilder sb2 = new StringBuilder();
		while (true) {
			System.out.println("멈추려면 stop입력");
			txt = sc.next();
			if(txt.startsWith("stop")) {  // 입력 문자열중 맨 앞에 stop이면 중단
				break;
			}
			sb2.append(txt + "\n");
		}
		System.out.println(sb2.toString());
	
	}

}

 

4) 랩퍼클래스

   ㆍ기본타입의 값을 클래스타입으로 감싸주는 클래스

 

Object[] arr = new Object[5];

arr[0] = "asdf";

arr[1] = 3.24f; //  기본형인 float를 내부에서 오토박싱기능으로 new Float(3.24f);(참조형)으로 자동적으로 처리됨 

arr[2] = 1; // 기본형인 int를 내부에서 오토박싱기능으로 new Integer(1);(참조형)를 자동적으로 처리됨 

 

랩퍼클래스 예제 )

package langtest;

public class ObjArrTest {

	public static void main(String[] args) {
		// TODO Auto-generated method stub

		Object[] arr = { 1, 3, 45f, "dsfe", new ObjArrTest() };
		for(int i = 0; i < arr.length; i++) {
			System.out.println(arr[i]);
		}
	}

}

 

 

2. 컬렉션

컬렉션_자바 자료구조를 미리 구현해서 제공 api.

 

1) List

   ㆍ값만 저장, 순서 있음

   ㆍVector, ArrayList, LinkedList...

   ㆍArrayList가 제일 중요★

 

   1-1) ArrayList

       - List 인터페이스를 구현하므로, 저장순서가 유지되고 중복을 허용한다.

       - 데이터의 저장공간으로 배열을 사용한다.(배열기반)

       - 길이와 타입(제너릭)의 제약이 없음

 

 

 

ArrayList 예제 1)

package langtest;

import java.util.ArrayList;

public class ArrayList1 {

	public static void main(String[] args) {
		

		//arraylist 생성. 타입, 크기 제약 없다
		ArrayList list = new ArrayList();  // 생성할 때 크기 지정해도 되고 안해도 됨. 보통 지정안함. 타입도 지정 안함
		//add(); 끝에 데이터 추가
		list.add("asdf");                  // String
		list.add(1);                       // int
		list.add(3.45f);                   // float
		list.add(23.45);                   // double
		
		// list.size(): 데이터 개수(방개수x)
		System.out.println("데이터 개수 : " + list.size());  // cnt가 필요없는게 size가 데이터 개수 확인해줌
		for(int i = 0; i < list.size(); i++){
			System.out.println(list.get(i));              // get(i) : i번째 방의 값 반환
		}
	}

}

 

ArrayList 예제 2)

equals를 재정의 해야 contains, indexOf, remove... 등등을 사용할 수 있음

package langtest;

import java.util.ArrayList;

public class ArrayList2 {

	public static void main(String[] args) {
		
		// <타입> : 제너릭. 타입한정자
		ArrayList<String> list = new ArrayList<>();  // <String> 문자열만 담겠다
		list.add("aaa");                             // 마지막 데이터로 추가
		list.add(0,"bbb");                           // 지정한 인텍스에 데이터 끼워넣기
		list.add("ccc");
		list.add("ddd");
		list.set(2, "abcd");                         // 인덱스 위치의 값을 지우고 추가. "ccc"를 지우고 "abcd"들어감
		int i = 0;
		System.out.println("전체 데이터");
		for(i = 0; i < list.size(); i++) {
			System.out.println(list.get(i));         // 방번호로 데이터 추출
		}
		
		System.out.println("ddd 찾고 삭제");
		if(list.contains("ddd")) {                   // contains() : 값이 있으면 true, 없으면 false 반환
			int idx = list.indexOf("ddd");           // indexOf() : 값의 위치 반환. 없으면 -1 반환
		System.out.println("ddd는 " + idx + "방에 있음");
		list.remove(idx);                            // remove(방번호) : 방번호 데이터 한개 삭제
		}
		
		System.out.println("aaa  삭제");
		list.remove("aaa");                          // remove(삭제할데이터) : 데이터 찾아서 삭제. 없으면 삭제 안되고 false 반환
		
		System.out.println("삭제 후 전체 데이터");
		for(i = 0; i < list.size(); i++) {
			System.out.println(list.get(i));
		}
		
		//비었나 확인
		if(list.isEmpty()) {                         // isEmpty() : 리스트 비었으면 true, 아니면 false 반환    
			System.out.println("비었음");
		} else {
			System.out.println("데이터 있음");
		}
		
		
		System.out.println("데이터 전체 삭제");
		list.clear();                                // 전체 삭제
		if(list.isEmpty()) {
			System.out.println("비었음");
		} else {
			System.out.println("데이터 있음");
		}
		

	}

}

 

ArrayList 예제 3)

String클래스는 equals()가 재정의 되어있어서 따로 재정의 할 필요가 없다.

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
package arraylist;
 
import java.util.ArrayList;
import java.util.Scanner;
 
public class ArrayListTest1 {
 
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        ArrayList<String> list = new ArrayList<>();
 
        list.add("aaa");
        list.add("bbb");
        list.add("ccc");
 
        for (int i = 0; i < list.size(); i++) { // list.size() : 데이터 개수
            System.out.println(list.get(i));
        }
        
        //list 전체 데이터
        ArrayList<String> list2 = new ArrayList<>();
        Scanner sc = new Scanner(System.in);
        
        while(true) {
            System.out.println("문자열 입력. 멈주려면 /stop입력");
            String txt = sc.next();
            if(txt.startsWith("/stop")) {
                break;                                          //while문 끝냄
            }
            list2.add(txt);
        }
 
        //list2 전체 데이터
        for(int i = 0; i < list2.size(); i++) {
            System.out.println(list2.get(i));
        }
        
        //검색. equals()로 비교
        //검색 할 단어 입력받음
        //입력받은 단어와 각 list에 들어있는 단어와 비교
        //if(단어.equals(list2.get(i));
        
        System.out.println("검색할 단어를 입력하세요");
        String txt = sc.next();
        int i;
        for(i = 0; i < list2.size(); i++) {
            if(txt.equals(list2.get(i))) {
                System.out.println(i + "번째 방에 있음");
                break;
            } 
        }
        if(i == list2.size()) {
            System.out.println("못찾았음");
        }
        
        
        //객체의 equals()가 재정의되었다면 indextOf()로 검색가능
        int idx = list2.indexOf(txt);                     // indexOf() : 객체의 equals()메서드로 동일한 객체를 찾아서 위치 반환
        if(idx < 0) {
            System.out.println("못찾았음"); 
        } else {
            System.out.println(idx + "번째 방에 있음");
        }
        
        
    }
 
}
cs

 

 

 

 

 

 

 

2) Map

   ㆍ빠른 검색 지원

   ㆍ키와 값을 쌍으로 저장

   ㆍ값의 순서가 없다.

   ㆍ방번호로 접근하지 않고 키값으로 검색

   ㆍ키는 중복 안됨

 

   1-1)HashMap

       - put(키, 값)

       - get(키)

 

 
 

 

'Kosta' 카테고리의 다른 글

[Oracle]1 ~ 3장_Day14  (0) 2023.03.06
[JAVA] 예외처리, 입출력 스트림_Day12  (0) 2023.03.02
[JAVA] 컬렉션(Map)_Day11  (0) 2023.02.28
[JAVA] 반복자_Day11  (0) 2023.02.28
[JAVA] 추상클래스, 인터페이스_Day10  (0) 2023.02.27