일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 스레드그룸
- 리눅스세팅
- Daemon()
- interrupt()
- include액션태그
- StringWriter
- sleep()메소드
- ObjectInputStream
- 동기화
- String char[] 형변환
- isinterrupted()
- 아이디중복
- include지시자
- Linux셋팅
- interrupted()
- char[] String 형변환
- 상관서브쿼리
- include 지시자
- first-of-child
- first-child
- StringReader
- MemoryStream
- ThreadGroup()
- 상관 서브 쿼리
- 표현 언어
- Linux세팅
- ID중복
- 리눅스셋팅
- 메모리스트림
- InputDialog
- Today
- Total
다연이네
[days22] 컬렉션 클래스<List> - ArrayList와 Vector +열거자와 반복자 본문
ArrayList
마치 배열처럼 사용하는 클래스
순서가 존재하고, 중복을 허용
데이터를 맨 뒤에 추가, 삭제하는 경우 성능이 좋다
[문제]
한 학생의 이,국,영,수,총,등 처리하는 2차원 또는 3차원 배열 수업 예제를
ArrayList 컬렉션 클래스 사용해서 30명의 학생의 성적 처리하세요.
ㄱ. class Student {} 클래스 선언
ㄴ. 팀원들 학생 추가
ㄷ. 학생 검색 기능 추가
ㄹ. 학생 수정
ㅁ. 학생 삭제
ㅂ. 모든 학생 정보 출력 ( iterator 반복자 사용 )
ㅅ. 학생 정렬 ( 번호순 또는 이름순 또는 성적순 )
ㅁ. 입력받은 학생수 출력
package review;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.Iterator;
import java.util.List;
public class Review01 {
public static void main(String[] args) {
ArrayList list = new ArrayList(30);
list.add(new Student(1, "스폰지밥", 67,34, 56, 157, 4, 52.33));
list.add(new Student(2, "뚱이", 27,34, 56, 117, 5, 39.00));
list.add(new Student(3, "징징이", 67,74, 56, 197, 1, 65.66));
list.add(new Student(4, "집게사장", 30,20, 55, 105, 6, 35.00));
list.add(new Student(5, "플랑크톤", 65,75, 55, 195, 2, 65.00));
list.add(new Student(6, "다람이", 50,60, 70, 180, 4, 60.00));
//입력받은 학생수 출력
System.out.printf("> 학생수 %d명\n", list.size());
//모든 학생 정보 출력
printStudentList(list);
//학생 검색 기능 추가
System.out.println("> 검색할 학생명 ? ");
String searchName = "황지혜"; //임의로 값 줬음
ArrayList searchList = new ArrayList();
for (int i = 0; i <list.size(); i++) {
Student temp = (Student)list.get(i);
if(temp.getName() == searchName) {
searchList.add(temp);
System.out.println(temp);
}
}
if(searchList.isEmpty()) System.out.println("학생이 없습니다");
//학생 수정
list.set(1, new Student(2, "황지혜", 100,34, 56, 117, 1, 39.00));
//학생 삭제
list.remove(4);
printStudentList(list);
//Collections.sort(list); //오류, 기준을 잡아야 함
//Comparator 사용하기-1
Comparator c = new StudentComparator();
Collections.sort(list, c);
//list.sort(c); 위와 동일한 코딩
printStudentList(list);
System.out.println("----------------");
//Comparable 사용하기-2
Collections.sort(list);
printStudentList(list);
}
private static void printStudentList(List list) {
Iterator ir = list.iterator();
while (ir.hasNext()) {
Student s = (Student) ir.next();
System.out.println(s);
}
}
}
class StudentComparator implements Comparator{
@Override
public int compare(Object o1, Object o2) {
Student s1= (Student)o1;
Student s2= (Student)o2;
return s1.getTot()-s2.getTot(); //오름차순
}
}
class Student implements Comparable{
private int no;
private String name;
private int kor, eng, mat, tot, rank;
private double avg;
public int getNo() {
return no;
}
public void setNo(int no) {
this.no = no;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getKor() {
return kor;
}
public void setKor(int kor) {
this.kor = kor;
}
public int getEng() {
return eng;
}
public void setEng(int eng) {
this.eng = eng;
}
public int getMat() {
return mat;
}
public void setMat(int mat) {
this.mat = mat;
}
public int getTot() {
return tot;
}
public void setTot(int tot) {
this.tot = tot;
}
public int getRank() {
return rank;
}
public void setRank(int rank) {
this.rank = rank;
}
public double getAvg() {
return avg;
}
public void setAvg(double avg) {
this.avg = avg;
}
public Student() {
super();
}
public Student(int no, String name, int kor, int eng, int mat, int tot, int rank, double avg) {
super();
this.no = no;
this.name = name;
this.kor = kor;
this.eng = eng;
this.mat = mat;
this.tot = tot;
this.rank = rank;
this.avg = avg;
}
@Override
public String toString() {
return String.format("[%d] %s\t%d\t%d\t%d\t%d\t%f\t%d", no, name, kor, eng, mat, tot, avg, rank);
}
@Override
public int compareTo(Object o) {
Student s = (Student)o;
return this.getTot() - s.getTot();
}
}
[문제] ArrayList list 객체에 임의의 정수( 1~100 ) 까지의 정수를 6개 입력하고 내림차순으로 정렬해서 출력하세요.
ArrayList<Integer> list = new ArrayList<>();
Random rnd = new Random(); //얘 안에 넣는거 무조건 안된다. 담배3사러가는데 3번 따로 가는 것
for (int i = 0; i <6; i++) {
int data = rnd.nextInt(100)+1;
list.add(data);
}
System.out.println(list);
Collections.sort(list, new arrays());
System.out.println(list);
[문제] 게임횟수 입력받아서 로또 번호 발생 및 출력하고, 그 값을 복사해 다른 Array에 담기
ArrayList<HashSet<Integer>> lottosList = null;//초기화는 게임횟수 물어보고 받는다
//하나 발생한 hashset로또를 집어 넣을 어레이리스트
HashSet<Integer> lotto =null;//lottosList에 값을 넣기 위해 clear()안하려고 여기서 null
Random rnd = new Random();
try ( Scanner scanner = new Scanner(System.in);){
System.out.print("> 게임 횟수를 입력하세요 ? ");
int n = scanner.nextInt();
lottosList =new ArrayList<>(n); //여기서 초기화 값 받기
for (int i = 0; i <n; i++) {
lotto = new HashSet<Integer>(6);
System.out.printf("%d 게임 : ", i+1);
while ( lotto.size() != 6 ) {
lotto.add( rnd.nextInt(45)+1 );
}
System.out.println( lotto );
lottosList.add(lotto); //여기서 발생한 hashset로또 lottosList로 가져오기
//lotto.clear();
}
} catch (Exception e) {
e.printStackTrace();
}
//다른컬렉션 값이 다른 컬렉션 안으로 들어갈 수 있다는 점 기억하기
//lottosList 출력하기
System.out.println("lottosList 출력하기");
Iterator<HashSet<Integer>> ir = lottosList.iterator();
while (ir.hasNext()) {
HashSet<java.lang.Integer> set = ir.next();
System.out.println(set);
}
}
Vector
ArrayList와 동일하나, 동기화 허용
xxxElement() 메소드 존재
package review;
import java.util.Enumeration;
import java.util.Vector;
public class Ex02 {
public static void main(String[] args) {
Vector<BoardVO> list = new Vector<>();
//데이터 삽입
list.addElement(new BoardVO("배다연", "2조~", "2조 content"));
list.addElement(new BoardVO("김동준", "2조~", "2조 content"));
list.addElement(new BoardVO("간장이", "2조~", "2조 content"));
System.out.println(list.capacity()); //총공간
System.out.println(list.size()); //채워진공간
list.trimToSize();
System.out.println(list.size()); //빈공간 삭제
System.out.println(list.firstElement()); //첫번째 요소를 얻어오는메소드
System.out.println(list.get(0)); //위 코딩과 동일
//데이터 특정 위치에 추가
list.insertElementAt(new BoardVO("카라멜", "1조~", "1조 content"), 1);
System.out.println(list);
//***열거자 (iterator : 반복자, 차이점은 fail-fast)
Enumeration<BoardVO> en = list.elements();
while (en.hasMoreElements()) {
BoardVO boardVO = (BoardVO) en.nextElement();
System.out.println(boardVO);
}
}
}
//게시판 클래스
class BoardVO{ //보통 BoardDTO나 BoardVO라고 작성
private String writer, subject, content;
public BoardVO() {
super();
}
public BoardVO(String writer, String subject, String content) {
super();
this.writer = writer;
this.subject = subject;
this.content = content;
}
@Override
public String toString() {
return String.format("%s \t %s \t %s ", writer, subject, content);
}
public String getWriter() {
return writer;
}
public void setWriter(String writer) {
this.writer = writer;
}
public String getSubject() {
return subject;
}
public void setSubject(String subject) {
this.subject = subject;
}
public String getContent() {
return content;
}
public void setContent(String content) {
this.content = content;
}
}
열거자와 반복자
//열거자, Enumeration
Enumeration<BoardVO> en = list.elements();
while (en.hasMoreElements()) {
BoardVO boardVO = en.nextElement();
System.out.println(boardVO);
}
//반복자, Iterator
Iterator<Student> ir = list.iterator();
while (ir.hasNext()) {
Student s = ir.next();
System.out.println(s);
}
열거자와 반복자의 차이 : fail-fast
반복자 : 어떤 컬렉션 객체에서 반복자를 가져와 순차적으로 1개씩 접근해 출력하는 작업 1)2)3)
=> 도중에 그 컬렉션 클래스에 접근해 5번째 값을 삭제/삽입 등 수정해버리면 ? 바로 오류 (예외) 발생
열거자 : 중간에 추가 수정 삭제가 일어나더라도 그 작업을 끝까지 함 1)2)3)~10)
=> 제대로 된 것은 아니지만 상관없이 작업 끝냄
fail-fast = 중간에 수정이 발생하면 오류 띄우는 것
'Java' 카테고리의 다른 글
[days22] 컬렉션 클래스<List> - Stack과 Queue (0) | 2020.10.21 |
---|---|
[days22] 컬렉션 클래스<List> - LinkedList (0) | 2020.10.21 |
[days21] 컬렉션 프레임워크 (0) | 2020.10.19 |
[days21] JDK 1.8 java.time (0) | 2020.10.19 |
[days20] 형식화(format) 클래스 (0) | 2020.10.18 |