쌍용교육(JAVA)/JAVA
쌍용교육 -JAVA 수업 13일차 ArrayList리스트
구 승
2024. 4. 11. 22:40
package kr.s27.collection;
import java.util.ArrayList;
class A{
@Override
//toString을 재정의 해주지않으면 결과값에는 참조값이 나오기 때문에 재정의가 필요하다.
public String toString() {
return "A";
}
}
class B{}
public class ArrayListMain01 {
public static void main(String[] args) {
ArrayList list = new ArrayList();
//ArrayList에 객체 저장하기 (int,String 등등 여러개를 저장하면 일효율이 떨어진다. 하나만 사용해야좋음)
list.add(new A());
list.add(new B());
list.add("홍길동");
list.add(10);//자동으로 int -> Integer 가 입력된다. 이를 auto boxing 이라고 한다.
//저장된 요소의 목록
System.out.println(list);
//요소의 갯수를 반환 .size()
System.out.println(list.size());
}
}
[A, kr.s27.collection.B@6f2b958e, 홍길동, 10]
4
package kr.s27.collection;
import java.util.ArrayList;
public class ArrayListMain02 {
public static void main(String[] args) {
/*
* list 구조의 특징
* 저장된 순서 유지, 중복 저장 허용
*/
ArrayList list = new ArrayList();
list.add("홍길동"); //String -> Object
list.add("장영실"); //String -> Object
list.add("박문수"); //String -> Object
list.add("김유신"); //String -> Object
//저장된 요소의 목록
System.out.println(list);
System.out.println("----------------");
//반복문을 이용해서 저장된 요소 출력
for(int i =0; i<list.size(); i++) {
//String name = list.get(i); //에러나는이유: 위에서 String에서 Object로 형변환 했기 때문에 명시적 형변환을 해줘야된다.
String name = (String)list.get(i);//명시적 형변환
System.out.println(name);
}
}
}
[홍길동, 장영실, 박문수, 김유신]
----------------
홍길동
장영실
박문수
김유신
package kr.s27.collection;
import java.util.ArrayList;
public class ArrayListMain03 {
public static void main(String[] args) {
/*
* 제네릭 표현 : 객체를 생성할 때 객처에 저장할 수 있는 요소의 타입을 지정
*/
ArrayList<String> list = new ArrayList<String>(); //<String>만 쓰겠다 라는 제네릭 표현
list.add("장영실");//String -> Object -> 제네릭을 쓰면 Object 로 저장 X 기존 String 으로 유지
list.add("홍길동");//String -> Object-> 제네릭을 쓰면 Object 로 저장 X 기존 String 으로 유지
//list.add(1000);//Integer -> Object 문법적인 문제는 없음 // 제네릭 표현을 쓰니까 문법적으로 문제가 생긴다.
//String 으로 한정했기 때문에 Integer 데이터는 저장불가
list.add("김유신"); //String -> Object-> 제네릭을 쓰면 Object 로 저장 X 기존 String 으로 유지
//반복문을 이용한 요소의 출력
for(int i = 0; i<list.size(); i++) {
String name = (String)list.get(i); //1000이 String 이 되어도 컴파일 에러는 없음. 대신 실행시 타입에러 발생
//(에러내용: Integer 가 String 으로 형변환이 불가능하다) 이러한 문제를 사전에 "제네릭 표현"을 써서 방지한다.
System.out.println(name);
}
System.out.println("-------------------");
//확장for문을 이용한 요소의 출력
for(String name : list) {
System.out.println(name);
}
}
}
장영실
홍길동
김유신
-------------------
장영실
홍길동
김유신
package kr.s27.collection;
import java.util.ArrayList;
public class ArrayListMain04 {
public static void main(String[] args) {
ArrayList<String> list = new ArrayList<String>();
list.add("홍길동");
list.add("김유신");
list.add("박문수");
list.add("장영실");
list.add("홍길동"); //ArrayList는 중복가능
//반복문을 이용한 요소의 출력
for (int i = 0; i<list.size(); i++) {
System.out.println(i + " : " + list.get(i));
}
System.out.println("-------------------------------");
//************요소의 삭제*************
//인덱스
//list.remove(2);
//요소
list.remove("홍길동"); //중복된 데이터가 있을 떄 동시 삭제를 할 수 없고 앞에서부터 삭제함.-->모든 홍길동을 제거X 가장 앞에있는 홍길동 하나만 제거
//반복문을 이용한 요소의 출력
for (int i = 0; i<list.size(); i++) {
System.out.println(i + " : " + list.get(i));
}
System.out.println("-------------------------------");
ArrayList<Integer> list2 = new ArrayList<Integer>();
list2.add(40);
list2.add(1);
list2.add(2);
list2.add(3);
list2.add(40);
//반복문을 이용한 요소의 출력
for (int i = 0; i<list2.size(); i++) {
System.out.println(i + " : " + list2.get(i));
}
System.out.println("-------------------------------");
//요소의 삭제
//list2.remove(2);//인덱스
list2.remove(Integer.valueOf(40)); //요소, int -> Integer로 변경됨
//반복문을 이용한 요소의 출력
for (int i = 0; i<list2.size(); i++) {
System.out.println(i + " : " + list2.get(i));
}
System.out.println("-------------------------------");
//요소의 변경
list2.set(1, 30); //(인덱스,데이터) <인덱스 1의 값이 30으로 바뀐다.>
//반복문을 이용한 요소의 출력
for (int i = 0; i<list2.size(); i++) {
System.out.println(i + " : " + list2.get(i));
}
System.out.println("-------------------------------");
}
}
0 : 홍길동
1 : 김유신
2 : 박문수
3 : 장영실
4 : 홍길동
-------------------------------
0 : 김유신
1 : 박문수
2 : 장영실
3 : 홍길동
-------------------------------
0 : 40
1 : 1
2 : 2
3 : 3
4 : 40
-------------------------------
0 : 1
1 : 2
2 : 3
3 : 40
-------------------------------
0 : 1
1 : 30
2 : 3
3 : 40
-------------------------------
package kr.s27.collection;
import java.util.ArrayList;
public class ArrayListMain05 {
public static void main(String[] args) {
ArrayList<Integer> list = new ArrayList<Integer> () ;
list.add(10);
list.add(20);
list.add(15);
list.add(16);
//저장된 요소의 목록
System.out.println(list);
System.out.println("----------------");
//짝수 삭제
/*
for(int i = 0; i<list.size(); i++) {
if(list.get(i)%2==0) {
list.remove(i);
//10이 지워지면서 20이 인덱스 0이 되었는데 이미 반복문은 0이 끝나고 1로 넘어갔기 때문에 인덱스 1에서 0이된 20은 삭제가 되지못함.
//순서를 앞에서부터 뒤 순서가 아닌 뒤에서부터 앞으로하면 인덱스 변동이 생기더라도 가능함.
}
}
*/
//마지막 인덱스부터 시작해서 조건 체크하면 건너뛰는 데이터가 발생하지 않고 모든 요소의 조건 체크 가능
for(int i = list.size()-1; i >= 0 ; i--) {
if(list.get(i)%2 ==0) {
list.remove(i);
}
}
System.out.println(list);//[20,15] remove할 때 마다 인덱스 변동이 생겨서
}
}
[10, 20, 15, 16]
----------------
[15]
package kr.s27.collection;
import java.util.ArrayList;
import java.util.Collections;
public class ArrayListMain06 {
public static void main(String[] args) {
ArrayList<String> list = new ArrayList<String>();
list.add("머루");
list.add("사과");
list.add("앵두");
list.add("자두");
list.add("사과");
//인덱스 탐색
int index1 = list.indexOf("사과"); //사과라는 문자의 인덱스 위치를 탐색하는 함수. 중복값일경우 첫번째
System.out.println("첫번째 사과 : "+ index1);
int index2 = list.lastIndexOf("사과"); //사과라는 문자의 인덱스 위치를 뒤에서부터 탐색하는 함수
System.out.println("마지막 사과 : "+index2);
int index3 = list.indexOf("망고");//리스트에 없는 값은 -1로 반환한다.
System.out.println("망고 : " + index3);
//검색기능: ArrayList에 머루가 저장되어 있으면 true를 반환 없으면 false를 반환
boolean f1 = list.contains("머루");
System.out.println("머루 : "+ f1);
boolean f2 = list.contains("망고");
System.out.println("망고 : " + f2);
//요소의 목록 출력
System.out.println(list);
System.out.println("-----------------------");
//정렬(사전에 명시된 순서대로)
Collections.sort(list);
System.out.println(list);
//역순으로 정렬
Collections.reverse(list);
System.out.println(list);
System.out.println("-----------------------");
ArrayList<Integer> list2 = new ArrayList<Integer>();
list2.add(10);
list2.add(100);
list2.add(15);
list2.add(2);
list2.add(40);
System.out.println(list2);
//정렬(오름차순 정렬)
Collections.sort(list2);
System.out.println(list2);
}
}
첫번째 사과 : 1
마지막 사과 : 4
망고 : -1
머루 : true
망고 : false
[머루, 사과, 앵두, 자두, 사과]
-----------------------
[머루, 사과, 사과, 앵두, 자두]
[자두, 앵두, 사과, 사과, 머루]
-----------------------
[10, 100, 15, 2, 40]
[2, 10, 15, 40, 100]
package kr.s27.collection;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.Random;
public class ArrayListMain07 {
/*
* [실습]
* 로또 프로그램 제작
* 1~45까지 중복되지 않는 6개의 숫자를 구해서 ArrayList에 저장하고 출력하시오.
* 출력할 때는 오름차순 정렬하여 출력하시오.
* 난수 생성:Math.random(), Random클래스의 nextInt()메서드 사용
*/
public static void main(String[] args) {
ArrayList<Integer> list = new ArrayList<Integer> () ;
Random ra = new Random();
while(list.size() < 6) {
//난수 발생(1~45)
int num = ra.nextInt(45)+1;
//중복값 체크(포함이 되어있지 않다면을 만들어야됨)
if(!list.contains(num)) {//if(list.contains(num)==false) {도 가능
list.add(num);
}
}
//오름차순 정렬
Collections.sort(list);
System.out.println(list);
}
}
[6, 13, 14, 16, 29, 39]
package kr.s27.collection;
import java.util.ArrayList;
public class ArrayListMain08 {
public static void main(String[] args) {
//2차원 배열 형태를 ArrayList로 구현하기 <>안에는 String Integer 말고 객체도 넣어서 사용가능.
ArrayList<CartItem> list = new ArrayList<CartItem>();
list.add(new CartItem("A1001",2,2000));
list.add(new CartItem("B1001",1,7000));
list.add(new CartItem("C1001",3,2500));
//list는 배열과 다르게 더 추가할 수 있지만 배열은 미리 정해두면 더이상 추가 삭제가 불가능하다는 단점이있다.
System.out.printf("%s %8s %8s%n","상품코드","수량","가격");
System.out.println("===================================");
for(CartItem item:list) {
System.out.printf("%s %,8d %,8d%n",item.getCode(),item.getNum(),item.getPrice());
}
System.out.println("=====================================");
//요소의 삭제
list.remove(1);
for(CartItem item:list) {
System.out.printf("%s %,8d %,8d%n",item.getCode(),item.getNum(),item.getPrice());
}
}
}
상품코드 수량 가격
===================================
A1001 2 2,000
B1001 1 7,000
C1001 3 2,500
=====================================
A1001 2 2,000
C1001 3 2,500
package kr.s27.collection;
public class CartItem {
private String code; //상품코드
private int num; //수량
private int price; //단가
public CartItem() {} //인자가 없는것도 넣어주는 편이 좋다.
public CartItem(String code, int num, int price) {
this.code = code;
this.num = num;
this.price = price;
}
public String getCode() {
return code;
}
public void setCode(String code) {
this.code = code;
}
public int getNum() {
return num;
}
public void setNum(int num) {
this.num = num;
}
public int getPrice() {
return price;
}
public void setPrice(int price) {
this.price = price;
}
}