Java 13일차 (컬렉션3)
2022. 11. 29. 09:06ㆍ코딩배움일지/JAVA
** for - each
모든 컬렉션, 배열에서 사용 가능
for ( 변수 : 배열레퍼런스(데이터집합) ) {
....반복작업문.....
}
배열의 항목 수 만큼 실행부분을 반복하는데 반복이 이루어질 때마다 배열의 항목을 순서대로 꺼내어 변수에 자동으로 대입해 준다. (변수와 배열의 데이터타입은 같아야 한다)
** 오직 배열의 값을 가져다 사용할 수 만 있고(read) 수정할 수 는 없다(write)
for - each 문을 사용하게 되면 index를 사용할 수 없는데, index가 필요한 경우에는 일반 반복을 사용
CRUD
모든 프로그램의 핵심
데이터 처리 방식
Create (생성/등록/추가)
Read (읽기/조회)
Update (변경/수정)
Delete (삭제/제거)
import java.util.ArrayList;
public class StringList {
public static void main(String[] args) {
String[] strArray = new String[3];
strArray[0] = "Java";
strArray[1] = "JSP";
strArray[2] = "Servlet";
// 일반 반복
System.out.println("<<<<<<<<<<<<<<<일반반복>>>>>>>>>>>>>>>");
for (int i = 0; i < strArray.length; i++) {
System.out.println(strArray[i]);
}
// foreach
System.out.println("<<<<<<<<<<<<<<<foreach>>>>>>>>>>>>>>>");
for (String str : strArray) {
System.out.println(str);
}
ArrayList<String> strList = new ArrayList<>();
/*
List 값 추가 (Create) -> add(값), add(index, 값)
*/
strList.add("Java");
strList.add("JSP");
strList.add("Servlet");
strList.add(1, "C++"); // 1번 인덱스에 요소 추가
// add는 값을 바꾸는 메소드가 아니라 값을 추가하는 메소드
// 중간에 값을 넣으면 요소들이 한칸씩 밀림
// 그러면서 공간도 자동으로 늘어남
strList.add(0, "HTML");
System.out.println("-" + strList.size());
System.out.println("<<<<<<<<<<<<<<<list foreach>>>>>>>>>>>>>>>");
for (String str : strList) {
System.out.println(str);
}
/*
List 값 조회 (Read) -> get(index)
*/
System.out.println("<<<<<<<<<<<<<<<list 일반반복>>>>>>>>>>>>>>>");
for (int i = 0; i < strList.size(); i++) {
System.out.println(strList.get(i)); // 리스트에서 i번째에 있는 값을 get
// get() 메서드는 Set에는 존재하지 않음 (Collection에는 get() 메서드가 없음)
// 키값이 없는 경우 get()메서드가 없음
}
System.out.println();
/*
List 값 수정(Update) -> set(index, 값)
*/
strList.set(0, "HTML5");
System.out.println(strList); // toString() 메소드
System.out.println();
/*
List 값 삭제 (Delete) -> remove(index)
*/
strList.remove(2);
System.out.println(strList);
int[] array = new int[10];
System.out.println("-" + array.length); //?
}
}
스택 Stack - 자료구조
LIFO (Lsat In first Out)
- 한 쪽 끝에서만 자료를 넣고 뺄 수 있는 선형 자료구조
- 가장 최근에 저장된 값 다음에 저장 (Push)
- 가장 최근에 저장된 값이 먼저 나감(Pop)
import java.util.ArrayList;
import java.util.Scanner;
public class StackList {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
// 임지현, 신경수, 고희주, 문승주, 장건년, 박수현, 확석민, 박준현
ArrayList<String> stack = new ArrayList<>();
// foreach를 돌렸을때 거꾸로 나오게
// stack.add(0,"임지현");
// stack.add(0, "신경수");
// stack.add(0, "고희주");
// stack.add(0, "문승주");
// stack.add(0, "장건년");
// stack.add(0, "박수현");
// stack.add(0, "확석민");
// stack.add(0, "박준현");
for (int i = 0; i < stack.size() + 1; i++) {
String name = scanner.nextLine();
if (name.isBlank()) {
break;
}
stack.add(0, name);
}
for (String name : stack) {
System.out.print(name);
if (!name.equals(stack.get(stack.size() - 1))) {
System.out.print(", ");
}
}
}
}
import java.util.ArrayList;
import java.util.List;
public class StackList2 {
public static void main(String[] args) {
ArrayList<String> stack2 = new ArrayList<>();
stack2.add("임지현");
stack2.add("신경수");
stack2.add("고희주");
stack2.add("문승주");
stack2.add("장건년");
stack2.add("박수현");
stack2.add("확석민");
stack2.add("박준현");
// 순서대로 넣었을때 거꾸로 나오게
int size = stack2.size();
for(int i = 0; i < size; i++) {
System.out.println(stack2.get(size - (i+1)));
// System.out.println(stack2.remove(size - i - 1);
}
/*
remove로 stack2의 사이즈가 계속 줄어들기 때문에
size변수로 stack2의 사이즈를 고정시켜놓고 반복
인덱스의 길이는 길이 - 1 이기 때문에 (i+1) 또는 i - 1 추가
*/
System.out.println();
List<String> copyList = new ArrayList<>();
int copySize = stack2.size();
for(int i = 0; i < size; i++) {
copyList.add(0, stack2.remove(size-i-1));
}
System.out.println(copyList);
}
}
\
import java.util.ArrayList;
import java.util.List;
public class StudentList {
public static void main(String[] args) {
List<Student> students = new ArrayList<>(); // 업캐스팅
Student student = new Student(2022001, "김준일", 2);
students.add(student);
// 변수에 안 담고 바로도 가능
students.add(new Student(2022002, "이승아", 21));
students.add(new Student(2022003, "김수현", 22));
students.add(new Student(2022004, "문경원", 23));
students.add(new Student(2022005, "홍지혜", 24));
students.add(new Student(2022006, "고동현", 25));
Student student2 = students.get(4);
System.out.println(student2);
// 이름이 문경원인 학생의 나이를 26세로 바꾸기
for (Student st : students) {
if (st.getName().equals("문경원")) {
st.setAge(26);
break;
}
}
student2 = students.get(3);
System.out.println(student2);
//////////////////////////////////////////////////////
for (int i = 0; i < students.size(); i++) {
Student s = students.get(i);
if (s.getName().equals("문경원")) {
s.setAge(28);
break;
}
}
System.out.println(students.get(3));
// 0번 인덱스 학생의 이름을 다음 인덱스의 학생 이름으로 변경
// 제일 마지막 인덱스의 학생 이름으로 0번 인덱스로 이동
String lastName = null;
for(int i = 0; i< students.size(); i++) { // size 6. i가 5일때까지
int nowIndex = students.size()-1 -i; // 인덱스 순서 5,4,3,2,1,0
int perIndex = nowIndex -1; // 현재요소의 앞 (인덱스가 5면 4)
Student s = students.get(nowIndex); // 인덱스의 요소를 뒤에서부터 가져옴
if(nowIndex == 0) { // 인덱스가 0일때
s.setName(lastName); // lastName으로 수정
break; // 반복문 탈출
/*
break;를 걸어주지 않으면
인덱스0 --> 에 인덱스 -1의 이름을 넣어주려하기때문에
오류 발생
*/
}
if(nowIndex == students.size() - 1) { // 마지막인덱스일때(5) lastName값 넣기 (제일 처음 실행되고 그 뒤로는 실행 안됨)
lastName = s.getName();
}
s.setName(students.get(perIndex).getName());
/*
인덱스 5 --> 인덱스4 이름 넣기
인덱스 4 --> 인덱스3 이름 넣기
인덱스 3 --> 인덱스2 이름 넣기
인덱스 2 --> 인덱스1 이름 넣기
인덱스 1 --> 인덱스0 이름 넣기
인덱스 0 --> lastName 이름 넣기
*/
}
System.out.println(students);
}
}
컬렉션에는 get이라는 메소드가 없다. Map 이나 List처럼 키값을 넣어 줘야 get을 쓴다.
'코딩배움일지 > JAVA' 카테고리의 다른 글
Java 14일차 3(set, addAll, List) (0) | 2022.11.29 |
---|---|
Java 14일차 (컬렉션. ArrayList) (0) | 2022.11.29 |
Java 13일차 (컬렉션2) (0) | 2022.11.28 |
Java 13일차 1(컬렉션) (0) | 2022.11.28 |
잠온다. Java 12일차 3(제네릭) (1) | 2022.11.25 |