기초JAVA 20강 - ArrayList

Whatever·2021년 10월 7일
0

기초 JAVA

목록 보기
20/26

Collection Framework : 여러 개의 데이터를 다루는 데 표준화된 방식을 자바에서 제공해줌.
Collection Framework에는 3종류가 있음.
List , Map , Set

List - 배열, 타입이 다른 객체들을 저장할 수 있고 처음에 크기를 지정하지 않아도 됨.
크기가 유동적으로 조정됨.
Map - 내가 가지고 있는 key로 값을 저장.
Set - 중복된 값이 저장되지 않음.

[ArrayList] 클래스의 메서드들

boolean add(Object obj) : 마지막 위치에 객체를 추가 후 성공여부를 반환한다.
void add(int index, Object obj) : 지정된 위치에 객체를 추가한다.
-인덱스 지정, 지정한 인덱스에 값을 추가
Object set(int index, Object obj) : 지정된 위치에 객체를 저장 후 기존 객체를 반환한다. -수정하는 메서드
Object get(int index) : 지정된 위치의 객체를 반환한다. -인덱스에 있는 값을 얻을 수 있는 메서드
int size() : 저장된 객체의 수를 반환한다. -저장된 값의 개수
Object remove(int index) : 지정된 위치의 객체를 제거한다. -저장된 값을 제거하기 위한 메서드

ArrayList sample = new ArrayList();//제네릭을 지정하지 않으면 타입 상관없음
//타입에 구애없이 저장은 쉽지만 꺼낼 때 자료의 타입이 예측이 되지 않음.
sample.add("abc");
        sample.add(100);
        sample.add(new Scanner(System.in));

타입 : 클래스
byte : Byte
short : Short
int : Integer
long : Long
float : Float
double : Double
char : Character
boolean : Boolean
클래스와 타입 간 자동형변환 가능

ArrayList<Integer> list = new ArrayList<Integer>(); 

<>:제네릭, <>안에 내가 저장하고싶은 타입의 데이터(클래스명)를 입력
컬렉션에는 기본형타입을 저장할 수 없음, 객체만 저장할 수 있음.
-> 클래스여야하기 때문에 기본형 int타입을 대체하는 클래스 Integer라고 써줌

	list.add(10);
	list.add("abc"); 제네릭 외의 타입을 저장했기 때문
	list.add(new Integer(20)); //클래스와 타입 간에 자동형변환 가능
	System.out.println(list.add(30));//30을 저장한 다음, 
        return되는 값을 성공적으로 저장했을 때 true, 안되면 false
	System.out.println(list);
	
	list.add(1, 40);//1번 인덱스에 40을 넣고 나머지 인덱스를 뒤로 민다.
                ->기존에 저장되어 있던 인덱스 내에서만 저장 가능.
	System.out.println(list);
	
	Integer before = list.set(2, 50);//2번 인덱스의 값을 50으로 바꾼다.
	System.out.println(before);//기존의 값을 반환
	System.out.println(list);//새로들어온 값
    
    
int get = list.get(2);//Integer타입 뿐 아니라 int타입의 변수도 만들 수 있음.

-> 자동형변환이 되기때문. 보통 int타입을 주로 씀.

	System.out.println(get);
	

ArrayList 안에 있는 데이터들을 삭제하고 싶을 때

	for(int i = 0; i < list.size(); i++) {//삭제되면서 size가 줄어듦. -> 2번 돌고 끝남.
		System.out.println(i + " : " + list.get(i));//출력
		
		list.remove(i);//삭제 - 길이가 줄어듦
	

값을 제거할 때는 뒤에서부터 제거해야 한다.

	for(int i = list.size() - 1; i >= 0; i--) {
		System.out.println(i + " : " + list.remove(i));
	}
	System.out.println(list);		
	
	
	//list에 1~100사이의 랜덤값을 10개 저장해주세요.
	for(int i = 0; i < 10; i++) {
		list.add((int)(Math.random() * 100) + 1); //랜덤값 복습, round메서드 복습
	}
	System.out.println(list);
	
	//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 : " + sum + " / avg : " + avg);
	
	//list에서 최소값과 최대값을 구해주세요.
	int min = list.get(0);
	int max = list.get(0);
	
	for(int i = 0; i < list.size(); i++) {
		if(list.get(i) < min) {
			min = list.get(i);
		}
		if(list.get(i) > max) {
			max = list.get(i);
		}
	}
	System.out.println("min : " + min + " / max : " + max);
	
	//list를 오름차순으로 정렬해주세요.
	for(int i = 0; i < list.size(); i++) {
		for(int j = i + 1; j < list.size(); j++) {
			if(list.get(j) < list.get(i)) {
				int temp = 0;
				temp = list.get(j);
				list.set(j,list.get(i));
				list.set(i,temp);
			}
		}
	}
	System.out.println(list);
	
	//선생님답
	for(int i = 0; i < list.size() - 1; i++) {
		min = i;
		for(int j = i + 1; j <list.size(); 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);
	
	
	//2차원
	ArrayList<ArrayList<Integer>> list2 = new ArrayList<ArrayList<Integer>>();
	
	list = new ArrayList<Integer>();
	list.add(10);
	list.add(20);
	list.add(30);
	
	list2.add(list);
	System.out.println(list2); 
	
	list = new ArrayList<Integer>();
	list.add(40);
	list.add(50);
	
	list2.add(list);
	System.out.println(list2);
	
	list.get(0);
	list2.get(0).get(0); //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과목을 봤을 때 2차원으로 각각 저장, 합계, 평균
	//학생 3명의 5과목에 대한 0~100점의 랜덤한 점수를 2차원 ArrayList에 저장해주세요.
	ArrayList<ArrayList<Integer>> scores = new ArrayList<ArrayList<Integer>>();
	
	
	for(int i = 0; i < 3; i++) {
		ArrayList<Integer> score = new ArrayList<Integer>();
		for(int j = 0; j < 5; j++) {
			
		score.add((int)(Math.random() * 101));
		score.add((int)(Math.random() * 101));
		score.add((int)(Math.random() * 101));
		score.add((int)(Math.random() * 101));
		score.add((int)(Math.random() * 101));
		}
		scores.add(score);
		
	}	
	
	System.out.println(scores);

	//합계, 평균구하기
	
	ArrayList<Integer> sums = new ArrayList<Integer>();
	ArrayList<Double> avgs = new ArrayList<Double>();
	for(int i = 0; i < scores.size(); i++) {
		ArrayList<Integer> score = scores.get(i);
		sum = 0;
		 //sum1의 첫번째 학생의 합을 넣기
		 for(int j = 0; j < scores.get(i).size(); j++) {
			 sum += scores.get(i).get(j);
		 }
		 sums.add(sum); 
		 avgs.add((double)sum / score.size());

}
System.out.println(sums);
System.out.println(avgs);

0개의 댓글

관련 채용 정보