Backend/JAVA

JAVA 코딩 API (Application Programming Interface) - Collections Framework

쏠솔랄라 2023. 2. 23. 14:24

 

 

Collections Framework

 

: 무한의 데이터를 저장할 수 있는 공간

 

최소한의 자원으로 최대한의 효율을 낼 수 있도록 만든 프로그램의 기본 틀 ; 반 강제성을 가지고 있는 프로그램의 기본 틀

-> 결국 클래스들의 모음

 

 

Framework

최소한의 자원으로 최대한의 효율을 낼 수 있도록 만든 프로그램의 기본 틀

 

 

Collection을 상속받은 애들

: 요소 안에 데이터를 저장하는 형태

 

1. set : 데이터 중복 불가, 데이터 간 순서 없음

전체의 데이터를 가져오거나 넣을 때 주로 이용된다

 

2. List : 데이터 중복 가능, 데이터간의 순서가 유지된다

확장형 배열

인덱스값을 사용하여 데이터를 중간에 가져오거나 할 수 있다

주로 목록화된 데이터의 검색과 수정이 많이 이루어져야 하는 경우 사용된다

 

 

Map을 상속받은 애들

: Key와 Value값으로 1:1쌍의 형태로 저장되는 형태

 

Key값을 통해 Value값을 관리하는 형식이다

Key값은 배열의 index와 비슷한 역할이지만 자료형의 제한은 없다

Key값은 중복금지, value는 중복 가능, 둘 다 순서는 유지되지 않는다

아이디와 패스워드의 관계와 비슷한 경우에서 주로 사용

 

 

 

 

 

 

 

public class Test01 {

public static void main(String[] args) {

 

/*

java.lang.String

JAVA에서 문자열을 총괄하는 클래스

*/

String a = "Hello";

 

int i = 123456790;

String b = String.valueOf(i); // 문자값을 숫자로 변경

 

System.out.println(i);

System.out.println(b);

System.out.println(new StringBuffer(b).reverse().toString());

 

char[] arr = {1,2,3,4,5,6};

 

System.out.println(a.toLowerCase()); // 소문자

System.out.println(a.toUpperCase()); // 대문자

 

// 문자열 검색

String email = "abcd123@gmail.com";

 

System.out.println(email.contains("co")); // 문자열을 포함하고 있으면 true, 아니면 false

 

System.out.println(email.startsWith("abc")); // 이 문자열로 시작하는가? 시작하면 true 아니면 false

System.out.println(email.endsWith("om")); // 이 문자열로 끝나는가? 끝나면 true 아니면 false

 

}

}

 

public class Test02 {

public static void main (String [] args) {

// 문자열 편집

String time = "2023-02-23 10:02:22";

 

// 문자열 자르기

System.out.println(time.substring(0, 10)); // 0부터 10까지

System.out.println(time.substring(11));

 

// 문자열 치환

System.out.println(time.replace("2", "*")); // 2를 *로 체햐

 

// 문자열 공백 제거

String email = " abdcwe123@naver.com";

System.out.println(email);

System.out.println(email.length());

System.out.println(email.trim());

System.out.println(email.trim().length());

}

 

 

출력화면

 

 

import java.util.HashSet;

import java.util.Iterator;

import java.util.Set;

class Test<A> {

private A a;

 

public Test(A a) {

this.a=a;

}

 

@Override

public String toString() {

// TODO Auto-generated method stub

return String.valueOf(a);

}

}

public class Test01 {

 

public static void main (String[] args) {

 

Test<Integer> a = new Test<Integer>(123456);

System.out.println(a);

 

 

Set<String> set = new HashSet<String>();

// set.add("김땡땡");

// set.add(1);

// set.add(1.234);

// set.add(a);

 

System.out.println(set);

 

 

// 데이터 추가

 

set.add("체리");

set.add("라즈베리");

set.add("오렌지");

set.add("딸기");

set.add("자두");

set.add("사과");

 

// 데이터 개수

System.out.println(set.size());

 

// 데이터 추출 불가

// 데이터의 순서 유지가 되지 않음, 저장 순서 랜덤

// 자력 추출 불가

// 순서가 있는 형태의 객체를 만들어 추출해 사용한다

// 순서가 있는 형태의 객체를 만들어 반복적으로 뽑아서 사용한다 ; 반복자 iterator

 

Iterator<String> it = set.iterator();

 

// set.remove("자두");

 

while(it.hasNext()) {

String s = it.next();

if(s.equals("자두")) {

it.remove();

}

System.out.println(s);

}

 

System.out.println("=========================================");

 

it = set.iterator();

while(it.hasNext()) {

String s = it.next();

System.out.println(s);

}

 

System.out.println(set.contains("딸기"));

System.out.println(set.toString());

 

 

}

}

 

 


 

 

Exercise 1

 

import java.util.ArrayList;

import java.util.List;

public class Test01 {

 

public static void main (String[] args) {

 

List<String> list = new ArrayList<String>();

 

 

// 데이터 추가

list.add("딸기"); // 0

list.add("사과"); // 1

list.add("라즈베리"); // 2

list.add("오렌지"); // 3 -> 4

list.add("체리"); // 4 -> 5

list.add("자두"); // 5 -> 6

list.add(3, "자두"); // 6

// 3번 인덱스에 자두를 넣으면 한 칸씩 밀리게 된다

 

 

// 데이터 개수

System.out.println(list.size());

 

 

// 데이터 추출

for (int i = 0 ; i < list.size(); i++) {

System.out.println(list.get(i));

}

 

System.out.println("====================================");

 

 

// 데이터 삭제

System.out.println(list.remove(0));

System.out.println(list.remove("딸기"));

for (int i = 0 ; i < list.size(); i++) {

System.out.println(list.get(i));

} System.out.println("====================================");

 

// 확장형 for문 : 여러 개의 데이터들이 저장 되는 것만 가능 ; list, set, map, 배열, ...

// for(요소의 데이터를 저장할 공간 : 데이터들을 저장한 공간) {

// }

 

for (String s: list) {

System.out.println(s);

}

 

// 데이터 검색

System.out.println(list.indexOf("수박")); // 리스트에 없는 값이니 -1로 출력

System.out.println(list.indexOf("라즈베리")); // 리스트에서 해당하는 값 출력

System.out.println(list.isEmpty()); // 데이터가 있으면 false

 

// 데이터 비우기

list.clear();

System.out.println(list.isEmpty()); // 데이터가 없으면 true

}

}

 

 

출력화면

 

 


 

 

Exercise 2

 

 

// Menu class (참조)

public class Menu { //메뉴 관리 클래스.

private String name;

private int price;

 

public Menu(String name,int price) {

this.name = name;

this.price = price;

}

 

public void setPrice(int price) {

this.price = price;

}

 

public String getName() {

return name;

}

 

public int getPrice() {

return price;

}

 

public void disp(int i) {

System.out.println("[" + i + "]\t" + name + "\t" + price + "원");

}

 

}

 

 

// Test class

 

import java.util.ArrayList;

import java.util.List;

public class Test02 {

 

public static void main(String[] args) {

 

List<Menu> list = new ArrayList<>();

 

Menu m = new Menu("율무차", 250);

list.add(m);

 

list.add(new Menu("커피", 200));

 

System.out.println(list.size());

 

// for(int i = 0; i < list.size(); i++) {

// m = list.get(i);

// if(m.getName().equals("커피")) {

// m.setPrice(20000);

// break;

// }

// }

 

for (Menu m1 : list) {

m1.disp(0);

}

}

}

 

 

출력화면

 

 


 

 

Exercise 3

// 이전 예제를 api코드로 다시 풀어보기

 

[Student class]
한 학생의 성적을 관리하는 클래스
이름, 알고리즘, 인공지능, 이산수학, 총점, 평균

[Class class]
한 반을 관리하는 클래스
최대 10명까지만 관리하는 클래스

알고리즘_총계, 인공지능_총계, 이산수학_총계
총점_총계, 평균_총계, 학생수_카운트

 

//한 학생의 성적을 관리하는 클래스

//Student

// 이름, 알고리즘, 인공지능, 이산수학, 총점, 평균

public class Student {

private String name;

private int ag,ai,dm,tot;

private double avg;

 

 

// 생성자

 

public Student(String name,int ag,int ai,int dm) {

this.name = name;

this.setAg(ag);

this.setAi(ai);

this.setDm(dm);

}

 

 

// setter

 

public void setName(String name) {

this.name = name;

}

 

public void setAg(int ag) {

if(ag < 0 || ag > 100) {

System.out.println("잘못된 점수 입력!");

return;

}

this.ag = ag;

setTot();

setAvg();

}

 

public void setAi(int ai) {

if(ai < 0 || ai > 100) {

System.out.println("잘못된 점수 입력!");

return;

}

this.ai = ai;

setTot();

setAvg();

}

 

public void setDm(int dm) {

if(dm < 0 || dm > 100) {

System.out.println("잘못된 점수 입력!");

return;

}

this.dm = dm;

setTot();

setAvg();

}

 

private void setTot() {

this.tot = ai + ag + dm;

}

 

private void setAvg() {

this.avg = tot / 3.0;

}

 

 

// getter

 

public String getName() {

return name;

}

 

public int getAg() {

return ag;

}

 

public int getAi() {

return ai;

}

 

public int getDm() {

return dm;

}

 

public int getTot() {

return tot;

}

 

public double getAvg() {

return avg;

}

 

 

// user method

 

public void showData() {

String print = String.format("%-8s %-10d %-10d %-10d %-6d %-10.4f\n", name,ag,ai,dm,tot,avg);

System.out.println(print);

}

}

 

import java.util.List;
import java.util.ArrayList;

// 한 반을 관리하는 클래스....
// 최대 10명까지만 관리하는 클래스
//Class
//  알고리즘_총계, 인공지능_총계, 이산수학_총계
// 총점_총계, 평균_총계, 학생수_카운트

public class Class {

private List<Student> list = new ArrayList<>();

private int agt,ait,dmt,tott;
private double avgt;

public void stuDisp() {
for(int i = 0; i < list.size(); i++) {
list.get(i).showData();
}
}

public void showTotal() {

System.out.println(String.format("%-8s %-10s %-10s %-10s %-6s %-10s\n", "이름","알고리즘","인공지능","이산수학","총점","평균"));
this.stuDisp();
System.out.println("========================================================");
String print = String.format("%-8s %-10d %-10d %-10d %-6d %-10.4f\n", "총계",agt,ait,dmt,tott,avgt);
System.out.println(print);
}

public void addStudent(Student st) {
list.add(st);
agt+=st.getAg();
ait+= st.getAi();
dmt += st.getDm();
tott += st.getTot();
setAvgt();
}

private void setAvgt() {
avgt = tott / (double)list.size() / 3.0;
}
}

import java.util.Scanner;

public class Main {

public static void main(String[] args) {

 

Scanner sc = new Scanner(System.in);

Class c = new Class();

 

while(true) {

System.out.print("메뉴 입력\n1.학생 추가 2.학생 보기 3.종료\n입력 : ");

int select = sc.nextInt();

 

switch(select) {

case 1:

System.out.print("이름 입력 : ");

String name = sc.next();

System.out.print("알고리즘 점수 입력 : ");

int ag = sc.nextInt();

System.out.print("인공지능 점수 입력 : ");

int ai = sc.nextInt();

System.out.print("이산수학 점수 입력 : ");

int dm = sc.nextInt();

Student st = new Student(name, ag, ai, dm);

c.addStudent(st);

break;

case 2:

c.showTotal();

break;

case 3:

System.out.println("프로그램이 종료 됩니다.");

sc.close();

System.exit(0);

default:

System.out.println("잘못된 입력!");

}

}

}

}

 

 

출력화면