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("잘못된 입력!");
}
}
}
}
출력화면
'Backend > JAVA' 카테고리의 다른 글
JAVA 코딩 API (Application Programming Interface) - Thread (0) | 2023.03.02 |
---|---|
JAVA 객체지향 프로그래밍 OOP, Class 상속 - 부모클래스, 자식클래스 (0) | 2023.02.27 |
JAVA 코딩 API (Application Programming Interface) - Integer, Exception (0) | 2023.02.23 |
JAVA 코딩 Class 클래스 다형성 (0) | 2023.02.23 |
JAVA 코딩 객체지향프로그래밍 OOP, 배열 클래스 Array Class (0) | 2023.02.22 |