List, Map, Set : 인터페이스
-List: 배열처럼 같은 형태로 생긴 데이터를 여러개 저장 가능(인덱스도 존재)
-Map: 값을 저장할때 인덱스로 저장하는 것이 아니라 키로 저장해서 키와 값을 같이 저장
-Set: 중복된 값을 저장하지 않는것(잘사용안함)
< ArrayListClass안에 들어있는 메서드 >
boolean add(Object obj): 마지막 위치에 객체를 추가 후 성공영부를 반환한다.
void add(int index, Object obj): 지정된 위치에 객체를 추가한다.(인덱스 지정, 지정한 인덱스로 옮김)
Object set(int index, Object obj): 지정된 위치에 객체를 저장 후 기존 객체를 반환한다.(수정하는 메서드)
Object get(int index): 지정된 위치의 객체 반환 (뽑아내기)
int size(): 저장된 객체의 수를 반환한다. = length
Object remove(int index): 지정된 위치의 객체를 제거한다.(인덱스 위치의 값 삭제)
ArrayList sample = new ArrayList(); //제네릭 지정하지 않으면 아무거나 지정 가능
//서로 다른 타입의 값 저장 가능 - 저장할때는 편하지만 값을 꺼낼때 문제(무슨 타입일지 예측 불가)
sample.add("abc"); //문자열 저장 sample.add(100); //int 저장 sample.add(new Scanner(System.in))
타입 : 클래스 byte : Byte short : Short int : Integer long : long float : float double : Double char : Character boolean: Boolean
//<>(제네릭) :값의 타입의 클래스를 적어줌
//제네릭 안에 있는 타입만 지정 가능
//void add(int index, Object obj): 지정된 위치에 객체를 추가한다.(인덱스 지정, 지정한 인덱스로 옮김)
list.add(10);
list.add("abc"); //문자열을 지정해서 컴파일 에러 발생
list.add(new Integer(20)); //자동으로 형변환된 것이 생략되어 있음
System.out.println(list.add(30)); //저장이 잘되면 true가 나옴
System.out.println(list);//[10, 20, 30]
list.add(1,40); //1번 인덱스에 40을 저장하면 20과 30은 인덱스가 한칸씩 뒤로 밀림
// 기존에 저장되있던 범위 내에서만 인덱스 지정 가능(건너뛰면 안됨)
System.out.println(list); //[10, 40, 20, 30]
Integer before = list.set(2, 50);//2번 인덱스의 값을 50으로 바꾸기
System.out.println(before);//기존에 있던 값 : 20
System.out.println(list);//50으로 수정되어 바뀜: [10, 40, 50, 30]
Object get(int index): 지정된 위치의 객체 반환
int get = list.get(2);
System.out.println(get); //50
int size(): 저장된 객체의 수를 반환한다. = length
for (int i = 0; i < list.size(); i++) {
System.out.println(i+" : "+list.get(i)); //출력
list.remove(i); //삭제
}
for문이 ([10, 40, 20, 30] 4개여서) 4번 돌아야 하는데 2번 돔
-> 삭제한 만큼 길이가 줄어들면서 돌기 때문에 2번밖에 돌지 않은것
Object remove(int index): 지정된 위치의 객체를 제거한다.(인덱스 위치의 값 삭제)
값을 제거할 때는 뒤에서부터 제거해야 함 -> 그래야 제대로 삭제됨
for (int i = list.size()-1; i >= 0; i--) {
System.out.println(i+" : "+list.remove(i));
}
System.out.println(list);
/* 답
* 3 : 30
* 2 : 50
* 1 : 40
* 0 : 10
* [] -- 마지막은 값이 하나도 들어가 있지 않음
*/
list에 1~100사이의 랜덤값을 10개 저장해주세요
for (int i = 0; i <10; i++) { list.add((int)(Math.random()*100)+1); } System.out.println(list);
int sum = 0; double avg = 0; for (int i = 0; i < list.size(); i++) { sum += list.get(i); avg = (double)sum /list.size(); } System.out.println("합계 : "+sum+"평균 : "+avg);
int max = list.get(0); int min = list.get(0); for (int i = 0; i < list.size(); i++) { max = list.get(0); //0번부터 비교할 시작점 만듬 min = list.get(0); if(list.get(i)< min) { min = list.get(i); } if(list.get(i)>max) { max = list.get(i); } } System.out.println("최대값 : "+ max+" 최소값 : "+ min);
for (int i = 0; i < list.size() - 1; i++) { min = i; for (int j = i + 1; j < list.size() - 1; j++) { if(list.get(j)<list.get(min)) { min = j; }//최소값을 찾고 } //최소값과 앞의 값을 교환 int temp = list.get(i); list.set(i,list.get(min)); //대입연산자의 왼쪽은 반드시 변수여야함 list.set(min,temp); } System.out.println(list);
ArrayList<ArrayList<Integer>> list2 = new ArrayList<ArrayList<Integer>>();
//배열안에 배열넣고 타입쓰기 = 2차원 배열
list = new ArrayList<Integer>();
list.add(10);//1차원 배열에 값 넣기
list.add(20);
list.add(30);
list2.add(list);//2차원 배열에 1차원 값이 들어감
System.out.println(list2);
list = new ArrayList<Integer>();
list.add(40);
list.add(50);
list2.add(list);//2차원 배열에 값이 들어감
System.out.println(list2);
list.get(0);
list2.get(0).get(0);//ArrayList를 사용한것 = arr[0][0]
for (int i = 0; i < list2.size(); i++) {
ArrayList<Integer> al = list2.get(i);
for (int j = 0; j < al.size(); j++) {
System.out.println(al.get(j));
}
}
학생 3명의 5과목에 대한 0~100점의 랜덤한 점수를 2차원 ArrayList에 저장해주세요
ArrayList<ArrayList<Integer>> scores = new ArrayList<ArrayList<Integer>>();
//2차원 어레이 리스트 만듬
for (int i = 0; i < 3; i++) {
ArrayList<Integer> score = new ArrayList<>();
//학생을 저장할 어레이 리스트
for(int j = 0; j < 5; j++) {
score.add((int)(Math.random()*100)+1);
}
/*
* score.add((int)(Math.random()*100)+1);
* score.add((int)(Math.random()*100)+1);
* score.add((int)(Math.random()*100)+1);
* score.add((int)(Math.random()*100)+1);
* score.add((int)(Math.random()*100)+1);
*/ scores.add(score);
}
System.out.println(scores);
//합계, 평균 구하기
ArrayList<Integer> sum1 = new ArrayList<>(); //합계를 저장할 어레이리스트
ArrayList<Double> avg1 = new ArrayList<>();//평균을 저장할 어레이리스트
for (int i = 0; i < 3; i++) {
ArrayList<Integer> score = scores.get(i);
sum = 0;
for (int j = 0; j < 5; j++) {//학생 한명
sum +=score.get(i);
}
sum1.add(sum);
avg1.add((double)sum / score.size());
}
System.out.println(sum1);
System.out.println(avg1);