자바 ArrayList

조수경·2021년 10월 7일
0

JAVA

목록 보기
22/26

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

ArrayListlist = new ArrayList();

//<>(제네릭) :값의 타입의 클래스를 적어줌
//제네릭 안에 있는 타입만 지정 가능

//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);

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);

list에서 최소값과 최대값을 구해라

	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);

list를 오름차순으로 정렬해주세요

	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);

2차원

	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과목의 시험을 보고 합계 평균을 구해라

학생 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);
	
	
	
	
	
	
profile
신입 개발자 입니다!!!

0개의 댓글

Powered by GraphCDN, the GraphQL CDN