자바

JAVA STEP 32. 컬렉션(ArrayList)

2023. 2. 23. 14:23
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
'자바' 카테고리의 다른 글
  • JAVA STEP 34. 컬렉션(Queue&Stack)
  • JAVA STEP 33. ArrayList 직접 구현하기
  • JAVA STEP 31. abstract&Object&Generic
  • JAVA STEP 30. Interface
IT의 큰손
IT의 큰손
IT계의 큰손이 되고 싶은 개린이의 Log 일지
IT의 큰손
Developer Story House
IT의 큰손
전체
오늘
어제
  • 분류 전체보기 (457)
    • 정보처리기사 필기 (18)
    • 정보처리기사 실기 (12)
    • 정보처리기사 통합 QUIZ (12)
    • 빅데이터 (11)
    • 안드로이드 (11)
    • 웹페이지 (108)
    • 자바 (49)
    • SQLD (3)
    • 백준 알고리즘 (76)
    • 데이터베이스 (41)
    • 깃허브 (2)
    • Library (14)
    • Server (31)
    • 크롤링&스크래핑 (3)
    • Spring (23)
    • Vue.js (13)
    • React (27)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

  • Developer Stroy House

인기 글

태그

  • JavaScript
  • 정보처리기사필기
  • it
  • React
  • DBA
  • 알고리즘
  • 자바
  • 웹개발자
  • 프론트엔드
  • jsp
  • 웹개발
  • 정보보안전문가
  • 개발자
  • html
  • jquery
  • 앱개발자
  • 웹페이지
  • ajax
  • 백준
  • IT자격증공부
  • IT개발자
  • css
  • IT자격증
  • 백엔드
  • 코딩테스트
  • 데이터베이스
  • DB
  • 개발블로그
  • 정보처리기사
  • java

최근 댓글

최근 글

Designed By hELLO
IT의 큰손
JAVA STEP 32. 컬렉션(ArrayList)
상단으로

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.