brograming
[JAVA] lang 패키지, 컬렉션(ArrayList)_Day10 본문
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 |