728x90
★ 컬렉션(Collection)
- JCF, Java Collection Framework
- (향상된) 배열
- 기존의 순수 배열 > 성능, 사용법 등 개량 > 클래스
- 길이 가변 > 방의 개수를 마음대로 늘리거나 줄이는게 가능
- 컬렉션 종류
- 1. List 계열
- ArrayList
- LinkedList
- Queue
- stack
- vector
- 2. Set 계열
- HashSet
- TreeSet
- 3. Map 계열
- HashMap
- TreeMap
- Properties
- HashTable
★ ArrayList 클래스
- 순수 배열하고 구조가 가장 유사함.
- 사용 빈도가 가장 높음
- 첨자(index)를 사용해서 요소(element)에 접근
- 양식
- ArrayList<Integer> ns2 = new ArrayList<Integer>();
ex1) ArrayList 사용법
//ArratList 사용법
//1. 생성하기
ArrayList<String> list = new ArrayList<String>(); //문자열 배열 리스트
//2. 요소 추가하기
//- boolean add(T value)
//- 배열의 맨 마지막에 추가하기 > Append Mode
list.add("바나나");
list.add("딸기");
list.add("귤");
list.add("포도");
list.add("파인애플");
//3. 요소의 개수
System.out.println(list.size()); //5
//4. 요소 읽기
//- T get(int index)
System.out.println(list.get(0));
System.out.println(list.get(4));
//System.out.println(list.get(5)); //IndexOutOfBoundsException Error
System.out.println(list.get(list.size() - 1)); //마지막 방 요소
//5. 요소의 수정
//- list[0] = 10; 대입 or 수정
//- T set(int index, T newValue)
System.out.println(list);
String temp = list.set(0, "망고");
System.out.println(temp);
System.out.println(list);
//System.out.println(list.get(0));
//6. 요소의 삭제
//- 순수 배열은 방을 삭제 불가능
//- 컬렉션 방을 삭제 가능
//- T remove(int index)
//- 레프트 시프트가 발생한다!!!!!!!!! > 삭제된 방 이후의 모든 요소는 방번호가 -1 감소
System.out.println();
System.out.println(list);
System.out.println("삭제 전 3번째방 : " + list.get(3));
list.remove(2);
System.out.println("삭제 후 3번째방 : " + list.get(3));
System.out.println(list.size());
System.out.println(list);
System.out.println();
//7. 탐색
//- 루프
for(int i =0; i<list.size(); i++) {
System.out.printf("list.get(%d) = %s\n", i, list.get(i));
}
System.out.println();
//for(변수 : 배열) { }
for(String name : list) {
System.out.println(name);
}
System.out.println();
//8. 요소의 검색
//- int indexOf(T value)
//- int lastIndexOf(T value)
//- boolean contains(T value)
System.out.println(list.indexOf("사과"));
System.out.println(list.indexOf("딸기"));
System.out.println(list.lastIndexOf("딸기"));
System.out.println(list.contains("사과"));
System.out.println(list.contains("딸기"));
System.out.println();
//9. 초기화
//- 모든 요소 삭제 > 모든방.remove()
//- void clear()
list.clear();
System.out.println(list.size()); //0
System.out.println(list);
//10. 빈배열 확인
//- boolean isEmpty()
list.add("코코아");
System.out.println(list.isEmpty());
System.out.println(list.size() == 0);
//11. 요소 추가
//- 중간에 삽입
//- void add(int index, T value)
//- ***** 우측 시프트 발생 > 삽입한 위치 이후의 모든 요소의 방번호 + 1
list.add("바나나");
list.add("딸기");
list.add("귤");
list.add("포도");
list.add("파인애플");
System.out.println();
System.out.println(list);
list.add(2, "수박");
System.out.println(list);
}
ex2) ArrayList 종류
private static void m3() {
//정수 배열
int[] ns1 = new int[3];
ArrayList<Integer> ns2 = new ArrayList<Integer>();
//실수 배열
double[] fs1 = new double[3];
ArrayList<Double> fs2 = new ArrayList<Double>();
//논리 배열
boolean[] bs1 = new boolean[3];
ArrayList<Boolean> bs2 = new ArrayList<Boolean>();
//문자열 배열
String[] txt1 = new String[3];
ArrayList<String> txt2 = new ArrayList<String>();
//참조형(클래스) 배열
Calendar[] cs1 = new Calendar[3];
ArrayList<Calendar> cs2 = new ArrayList<Calendar>();
ArrayList<Integer> list = new ArrayList<Integer>();
//- add(value) : Append
//- add(index, value) : Insert
for(int i=0; i<10; i++) {
list.add((int)(Math.random()*100));
}
System.out.println(list);
for(int i=0; i<list.size(); i++) {
ex3) ArrayList 응용 예제
- 요구사항 : 선생님 3명, 학생 30명에 해당하는 난수를 사용한 배열 만들기
- 조건
- 온라인 교육] 회원
- 1. 선생님
- 2. 학생
- 부모역할
- 1. 클래스
- 2. 추상클래스
- 3. 인터페이스
- 소스코드
public static void main(String[] args) {
String[] name1 = { "김","이","박","최","정","연","조","정","유","양"};
String[] name2 = { "수","경","동","재","진","아","지","태","재","우","소","기","연","효","정","우","현","채","수","원","민","대","환"};
String[] subject = {"국어", "영어", "수학"};
String temp = "ABCDEFGHIJKLMNOPQRSTUWXYZabcdefghijklnopqrstuwxyz";
//1. 길이 고정 vs 가변
//2. 사용법
//선생님 배열 > 고정 > 순수 배열
Teacher[] tlist = new Teacher[3];
for(int i=0; i<tlist.length; i++) {
String name = "";
String id = "";
String pw = "1111";
name = generateName(name1, name2);
id = generateId(temp, id);
tlist[i] = new Teacher(name, id, pw, subject[i]);
}
//학생 배열 > 들락날락 > 컬렉션
ArrayList<Student> slist = new ArrayList<Student>();
for(int i=0; i<30; i++) {
String name = "";
String id = "";
String pw = "1111";
name = generateName(name1, name2);
id = generateId(temp, id);
slist.add(new Student(name,id,pw));
}
for(int i=0; i<slist.size(); i++) {
//slist[i].setkor()
slist.get(i).setKor((int)(Math.random()*41) +60);
slist.get(i).setEng((int)(Math.random()*41) +60);
slist.get(i).setMath((int)(Math.random()*41) +60);
}
//최종 결과
for(Teacher t : tlist) {
System.out.println(t);
}
System.out.println();
for(Student s : slist) {
System.out.println(s);
}
}
public static String generateId(String temp, String id) {
int max = (int)(Math.random()*6)+5;
for(int j=0; j<max; j++) {
id += temp.charAt((int)(Math.random() * temp.length()));
}
return id;
}
//드래그 마우스 오른쪽 refecter - extract method
public static String generateName(String[] name1, String[] name2) {
return name1[(int)(Math.random() * name1.length)]
+ name2[(int)(Math.random() * name2.length)]
+ name2[(int)(Math.random() * name2.length)];
}
}
interface User {
void login();
void logout();
void info();
}
abstract class AbstractUser implements User{
private String name;
private String id;
private String pw;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getPw() {
return pw;
}
public void setPw(String pw) {
this.pw = pw;
}
}
class Teacher extends AbstractUser {
// private String name;
// private String id;
// private String pw;
private String subject;
public Teacher(String name, String id, String pw, String subject) {
//this.name = name;
//this.id = id;
//this.pw = pw;
setName(name);
setId(id);
setPw(pw);
this.subject = subject;
}
//디버깅용
@Override
public String toString() {
return "Teacher [name=" + getName() + ", id=" + getId() + ", pw=" + getPw() + ", subject=" + subject + "]";
}
@Override
public void login() {
System.out.printf("%s(%s) 선생님이 로그인했습니다.\n", getName(), getId());
}
@Override
public void logout() {
System.out.printf("%s(%s) 선생님이 로그아웃했습니다.\n", getName(), getId());
}
@Override
public void info() {
System.out.println("[교사정보]");
System.out.println("이름 : " + getName());
System.out.println("아이디 : " + getId());
System.out.println("담당과목: " + this.subject);
}
public void test() {
System.out.println("시험을 출제합니다.");
}
public void check() {
System.out.println("학생 성적을 점검합니다.");
}
}
class Student extends AbstractUser{
// private String name;
// private String id;
// private String pw;
private int kor;
private int eng;
private int math;
public Student(String name, String id, String pw) {
// this.name = name;
// this.id = id;
// this.pw = pw;
setName(name);
setId(id);
setPw(pw);
}
public void setKor(int kor) {
this.kor = kor;
}
public void setEng(int eng) {
this.eng = eng;
}
public void setMath(int math) {
this.math = math;
}
@Override
public String toString() {
return "Student [name=" + getName() + ", id=" + getId() + ", pw=" + getPw() + ", kor=" + kor + ", eng=" + eng + ", math="
+ math + "]";
}
@Override
public void login() {
System.out.printf("%s(%s) 학생이 로그인했습니다.\n", getName(), getId());
}
@Override
public void logout() {
System.out.printf("%s(%s) 학생이 로그아웃했습니다.\n", getName(), getId());
}
@Override
public void info() {
System.out.println("[학생 정보]");
System.out.println("이름 : " + getName());
System.out.println("아이디 : " + getId());
}
public void score() {
System.out.printf("[%s 성적]\n", getName());
System.out.println("국어 : " + this.kor);
System.out.println("영어 : " + this.eng);
System.out.println("수학 : " + this.math);
}
}
728x90
'자바' 카테고리의 다른 글
JAVA STEP 34. 컬렉션(Queue&Stack) (0) | 2023.02.23 |
---|---|
JAVA STEP 33. ArrayList 직접 구현하기 (0) | 2023.02.23 |
JAVA STEP 31. abstract&Object&Generic (0) | 2023.02.22 |
JAVA STEP 30. Interface (0) | 2023.02.21 |
JAVA STEP 29. CASTING (0) | 2023.02.21 |