코딩/2-JAVA

C21콜렉션응용

tree0505 2025. 7. 18. 10:57
반응형
  • C21콜렉션응용
    • 콜렉션응용_개념

  • 콜렉션종류_기본이론1_어레이리스트1
package 콜렉션응용_개념;

import java.util.ArrayList;
import java.util.Vector;

public class 콜렉션종류_기본이론1_어레이리스트1 {
	public static void main(String[] args) {
		
		// 1) Vector 보다 나중에 나온 자료구조.
		// 2) Vector 보다 성능이 좋다. 
		// [결론] Vector 보다 ArrayList 를 사용하자.
		// 문법은 똑같다. 
		
		ArrayList<Integer> list = new ArrayList<Integer>();
		// add(value) : ArrayList의 맨 뒤에 value를 추가한다.
		list.add(10);
		list.add(20);
		list.add(30);
		list.add(40);
		list.add(50);
		System.out.println(list);

		// remove(index) : ArrayList의 index번째 데이터를 제거한다.
        list.remove(3);
        System.out.println(list);

        // size() : ArrayList에 저장된 데이터의 개수를 얻어온다.
        int count = list.size();
        System.out.println("count = " + count);

        // get() : ArrayList의 index번째의 value를 얻어온다.
        System.out.print("[");
        for(int i=0; i<count; i++) {
            System.out.print(list.get(i));
            if(i != count - 1) {
                System.out.print(", ");
            }
        }
        System.out.println("]");
        
        // add(index, value) : ArrayList의 index번째 위치에 value를 삽입한다.
        list.add(0, 9);
        System.out.println(list);
        
        // set(index, value) : ArrayList의 index번째 위치에 value를 수정한다.
        list.set(3, 5);
        System.out.println(list);

        
        // clear() : ArrayList의 모든 데이터를 제거한다.
        list.clear();
        System.out.println(list.size());

	}
}

  • 콜렉션종류_기본이론2_어레이리스트2
package 콜렉션응용_개념;

import java.util.ArrayList;
import java.util.Scanner;

public class 콜렉션종류_기본이론2_어레이리스트2 {
	public static void main(String[] args) {
		
		Scanner scan = new Scanner(System.in);
		
		ArrayList<Integer> list = new ArrayList<>();
		
		while(true) {
			
			System.out.println(list);
			System.out.println("1.추가 2.삭제 3.삽입 4.종료");
			int sel = scan.nextInt();
			if(sel == 1) {
				System.out.println("추가할 숫자를입력하세요 >> ");
				int num = scan.nextInt();
				list.add(num);
			}else if(sel == 2) {
				System.out.println(list);
				System.out.println("삭제할 인덱스를 입력하세요 >> ");
				int index = scan.nextInt();
				if(list.size() <= 0) {
					continue;
				}
				if(index < 0) {
					continue;
				}
				if(index >= list.size()) {
					continue;
				}
				list.remove(index);
				
			}else if(sel == 3) {
				System.out.println(list);
				System.out.println("삽입할 위치를 입력하세요 >> ");
				int pos = scan.nextInt();
				System.out.println("삽입할 값을 입력하세요 >> ");
				int value = scan.nextInt();
				list.add(pos , value);
			}
			else if(sel == 4) {
				System.out.println("종료");
				break;
			}
		}
		
		scan.close();

	}
}

  • 콜렉션종류_기본이론3_맵
package 콜렉션응용_개념;

import java.util.HashMap;
import java.util.Map;

public class 콜렉션종류_기본이론3_맵 {
	public static void main(String[] args) {

		// === map === 은 인터페이스이다.
		// 1) 기존의 배열은 index 가 자동으로 0,1,2...순서로 생성되었지만
		// 2) map 은 index 부분을 직접 설정하는것을 말한다. 
		// 3) map 은 index 를  Key로 바꾸어부른다.
		
//		HashMap은 K(Key)에 V(Value)를 할당하는 방식으로 저장된다.
//		Key는 String으로 하고 Value는 HashMap에 저장할 데이터의 타입을 쓴다. 
		
		//맵의 객체생성은  앞에 변수는 Map 으로 사용하고  new 는 HashMap 으로 한다. 
		//HashMap 의 부모인  Map의 메서드를 이용하기때문이다. 
		
		Map<String, Integer> hmap = new HashMap<String, Integer>();	
		
//		(key, value) : HashMap의 key에 value를 할당한다.
		hmap.put("apple", 1000);
		hmap.put("orange", 1500);
		hmap.put("melon", 5000);
		hmap.put("water melon", 15000);
		System.out.println(hmap.size() + " : " + hmap);
		System.out.println("============================================================");
		
//		get(key) : HashMap의 key에 할당된 value를 얻어온다.
		System.out.println(hmap.get("melon"));
		System.out.println("============================================================");
		
//		put() 메소드는 존재하지 않는 key에 넣어주면 데이터가 입력되고 존재하는 key에 넣어주면 수정된다.
		hmap.put("apple", 1234);
		System.out.println(hmap.size() + " : " + hmap);
		System.out.println("============================================================");
		
//		keySet() : HashMap의 key만 얻어온다.
		System.out.println(hmap.keySet());
		System.out.println("============================================================");
//		향상된 for와 keySet() 메소드를 사용하면 HaskMap에 저장된 모든 데이터를 얻어올 수 있다.
		int sum = 0;
		for(String key : hmap.keySet()) {
//			System.out.println(key);				// HashMap의 모든 key를 얻어올 수 있다.
			System.out.println(hmap.get(key));		// HashMap의 모든 key에 할당된 value를 얻어올 수 있다.
			sum += hmap.get(key);
		}
		System.out.println("금액 합계 : " + sum);
		System.out.println("============================================================");
		
//		remove(key) : HashMap의 key에 해당되는 값을 제거한다.
		hmap.remove("apple");
		System.out.println(hmap.size() + " : " + hmap);
		System.out.println("============================================================");
		
//		clear() : HashMap의 모든 값을 제거한다.
		hmap.clear();
		System.out.println(hmap.size() + " : " + hmap);
		System.out.println("============================================================");
		

	}
}

  • arr[0] = 10; 
  • arr[1] = 20; 
  • int [ ] arr = new <int , int> ( ) ; 
  • arr [ 0 ] = 10;

 

  • arr["국어"] = 10; 
  • Map map = new Map<String, Integer > ( ); 

  • 콜렉션종류_기본이론4_정렬
package 콜렉션응용_개념;

import java.util.ArrayList;
import java.util.Collections;


/*
	Collections 정렬 
	자바에서 제공하는 성능좋은 정렬 (직접만드는게 힘들때 사용)

	[1] Comparable<Fruit> 을 인터페이스 상속을 받는다.
	
	[2] public int compareTo(Fruit fruit){}
		메서드를 강제 구현해야한다.
		
	[3] 정렬하고 싶은 내용을 구체적으로 적는다.  
	
		int check = 0;
		if(price - fruit.price > 0) {
			check = -1;
		}else if(price - fruit.price < 0) {
			check = 1;
		}
 		return check;
		
 */
//정렬하는 클래스 
//원래 클래스에다가 Fruit . Comparable<Fruit>을 상속 받아야 한다. 인터페이스 
class Fruit implements Comparable<Fruit>{

	private String name;
	private int price;
	
	public Fruit() {}
	public Fruit(String name, int price) {
		this.name = name;
		this.price = price;
	}
	
	@Override
	public int compareTo(Fruit fruit) {	
		
//		# 정수 비교
		int check = 0;
		if(price > fruit.price ) {
			check = -1;
		}else if(price < fruit.price ) {
			check = 1;
		}
 		return check;
		
//		#문자 비교
		//return name.compareTo(fruit.name);
	}

	@Override
	public String toString() {
		return name + " : " + price;
	}
}


public class 콜렉션종류_기본이론4_정렬 {
	public static void main(String[] args) {

		ArrayList<Fruit> list = new ArrayList<>();
		//어레이리스트 정렬
			//배열에 담아서 배열 정렬하는게 편하다. 
		
		list.add(new Fruit("사과", 3000));
		list.add(new Fruit("귤", 1000));
		list.add(new Fruit("오렌지", 2000));
		
		Collections.sort(list); //정렬하고 싶으면 콜렉션을 쓰는것 
		
		System.out.println(list);
	

	}
}

  • 콜렉션종류_기본이론5_다중정렬
package 콜렉션응용_개념;

import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;

class Student {
	int num;
	String name;
	int score1;
	int score2;

	Student(int num, String name, int score1 , int score2) {
		this.num = num;
		this.name = name;
		this.score1 = score1;
		this.score2 = score2;
	}

	public String toString() {
		String print = String.format("%d %s %d %d", num, name, score1 , score2);
		return print;
	}
}
//--------------------------------------------------
//여러개면 클래스를 따로 만드는것  // 내림차순 
class DownCompare implements Comparator<Student> {
	int ret = 0;

	@Override
	public int compare(Student s1, Student s2) {
		if (s1.score1 < s2.score1) {
			ret = 1;
		}
		else if (s1.score1 == s2.score1) {
			
			if(s1.score2 < s2.score2) {
				ret = 1;
			}
			else if(s1.score2 == s2.score2) {
				ret = 0;
			}
			else if(s1.score2 > s2.score2) {
				ret = -1;
			}
			
		}
		else if (s1.num > s2.num) {
			ret = -1;
		}
		return ret;
	}
}

//--------------------------------------------------
class UpCompare implements Comparator<Student> {
	int ret = 0;

	@Override
	public int compare(Student s1, Student s2) {
		if (s1.score1 < s2.score1) {
			ret = -1;
		}
		else if (s1.score1 == s2.score1) {
			
			if(s1.score2 < s2.score2) {
				ret = -1;
			}
			else if(s1.score2 == s2.score2) {
				ret = 0;
			}
			else if(s1.score2 > s2.score2) {
				ret = 1;
			}
			
		}
		else if (s1.num > s2.num) {
			ret = 1;
		}
		return ret;
	}
}

//--------------------------------------------------
public class 콜렉션종류_기본이론5_다중정렬 {
	public static void main(String[] args) {
		
		//리스트 집어넣기 
		ArrayList<Student> list = new ArrayList<>();
		Student s1 = new Student(11001244, "아무개", 10,20);
		Student s2 = new Student(25109435, "김김김", 50,90);
		Student s3 = new Student(11005338, "사이다", 40,30);
		Student s4 = new Student(11005338, "박박박", 40,20);
		Student s5 = new Student(11005338, "오오오", 10,80);
		list.add(s1);
		list.add(s2);
		list.add(s3);
		list.add(s4);
		list.add(s5);

		
		// 정렬을 종류별로 다양하게 만들수 있다.
		Collections.sort(list, new DownCompare());

		for (int i = 0; i < list.size(); i++) {
			System.out.println(list.get(i));
		}
		System.out.println("---------------------------");
		Collections.sort(list, new UpCompare());

		for (int i = 0; i < list.size(); i++) {
			System.out.println(list.get(i));
		}
		
	}

}

  • 콜렉션종류_기본이론6_리스트
package 콜렉션응용_개념;

import java.util.ArrayList;
import java.util.LinkedList;
import java.util.List;
import java.util.Stack;
import java.util.Vector;


public class 콜렉션종류_기본이론6_리스트 {
	public static void main(String[] args) {
		
		//List는 인터페이스 클래스이며, java.util.Collection 인터페이스를 구현한것이다. 
	
		List<Integer> list1 = new ArrayList<Integer>();
		//단점 : add가 느리다. 
		//장점 : 인덱스 검사가 가능하다. 
		// list.get(3); //찾을 수 있다. 
		
		List<Integer> list2 = new LinkedList<Integer>();
		//장점 : add가 빠르다. 
		//단점 : list.get(2)안된다. //인덱스 찾기가 불가능 
		//무조건 처음부터 찾아야 된다. 
		
		List<Integer> list3 = new Vector<Integer>();
		//ArrayList와 같다. 
		
		List<Integer> list4 = new Stack<Integer>();
		//선입호출 
		
		
		//자동으로 늘어나는 배열이 크게 4가지가 있다. 
		//ArrayList  LinkedList  Vector  Stack
		//위의 4개는 전부다 부모가 있다.  List 
		
		 
	}
}

  • 자동으로 늘어나는 배열이 4가지가 있다. 
  • 동작하는것 
  • Arraylist 
    • arr  : x 
    • x  = 10 
    • temp에게 arr의 x를 맡긴다. / x = 10 이것을 가지고 있다. 
      • arr은 1칸에서 지우고. 2칸을 만든다. 
      • temp를 복사를 하고. 10 , 20이 된다. 
      • 30을 넣고 싶으면 또 같이. temp한테 y를 맡기고. arr은 3칸을 만들고 . temp에게 복사를 하는것 
    • 단점 : push 할때마다 . 배열을 삭제하고 만들고 한다. push가 느리다. add가 느리다. 
    • 장점 : 배열이 다 붙어있기 떄문에. 인덱스 검사가 가능하다. 
    • list.get(2) => 30 


  • LinkedList
    • arr 
    • 10이 들어있다. 1칸이 아니라. 2칸이다.
      • 0번째는 null . => null에 y의 주소를 넣는다. 
      • 1번째 10 
    • 추가 20을 하면 
      • 2칸을 만든다. 새로 
      • 0번째 : y주소 : null => y의 주소를 10이 들어있는 null에 주소를 넣는다. 
      • 1번째 : 20 
    • 장점 : add가 빠르다. 
    • 단점 : get을 사용할 수 없다. 
      • 무조건 처음부터 찾을 수 밖에 없다. 
      • list.get(2) 
      • 인덱스를 찾는게 불가능하다. 


  •  Vector
    • 어레이리스트와 같다. 

  • Stack 
    • 위에 쌓는것 / 뷔페의 접시와 같음 / 나중에 들어오는게 먼저 나감 / 선입호출 
    • 큐 => 선입선출 / 번호 순서대로 

  • 콜렉션종류_기본이론7_이차원벡터1
package 콜렉션응용_개념;

import java.util.ArrayList;

class Node1to50 {
	public int num;

	public void printNode() {
		System.out.print(num + "\t");
	}
}

class Manager1to50 {
	public ArrayList<Node1to50[]> nodeList;
	//Node1to50 => 여기에도 배열을 넣을 수 있다. 
	//ArrayList 안에 클래스의 배열도 들어올 수 있다. 
	
	
	public int data[][];
	public final int SIZE = 5;

	public void dataInit() {
		data = new int[SIZE][SIZE];
		int num = 1;
		for (int i = 0; i < SIZE; i++) {
			for (int j = 0; j < SIZE; j++) {
				data[i][j] = num;
				// System.out.println(num);
				num += 1;
			}
		}
	}

	public void dataShuffle() {
	}

	public void nodeInit() {
		nodeList = new ArrayList<>();

		for (int i = 0; i < SIZE; i++) {
			Node1to50[] temp = new Node1to50[SIZE];
			for (int j = 0; j < SIZE; j++) {
				Node1to50 node = new Node1to50();
				node.num = data[i][j];
				// System.out.println(node.num);
				temp[j] = node;
			}
			nodeList.add(temp);
		}
	}

	public void printNodeList() {
		for (int i = 0; i < SIZE; i++) {
			for (int j = 0; j < SIZE; j++) {
				nodeList.get(i)[j].printNode();
			}
			System.out.println();
		}
	}

	public void init() {
		dataInit();
		dataShuffle();
		nodeInit();
		printNodeList();
	}

}

public class 콜렉션종류_기본이론7_이차원벡터1 {
	public static void main(String[] args) {
		// 1to50 을만들어보세요
		Manager1to50 nm = new Manager1to50();
		nm.init();

	}
}

  • 콜렉션종류_기본이론8_이차원벡터2
package 콜렉션응용_개념;

import java.util.ArrayList;

class Manager1to50Ver2{
	public ArrayList<ArrayList<Node1to50>> nodeList;
	public int data[][];
	public final int SIZE = 5;
	public void dataInit() {
		data = new int[SIZE][SIZE];
		int num = 1;
		for(int i = 0;  i < SIZE; i++) {
			for(int j = 0; j < SIZE; j++) {
				data[i][j] = num;
				//System.out.println(num);
				num += 1;
			}
		}
	}
	public void dataShuffle() {}
	public void nodeInit() {
		nodeList = new ArrayList<>();
		
		for(int i = 0; i < SIZE; i++) {
			ArrayList<Node1to50> temp = new ArrayList<>();
			for(int j = 0; j < SIZE; j++) {
				Node1to50 node = new Node1to50();
				node.num = data[i][j];
				//System.out.println(node.num);
				temp.add(node);
			}
			nodeList.add(temp);
		}		
	}
	
	public void printNodeList() {
		for(int i = 0; i < SIZE; i++) {
			for(int j = 0; j < SIZE; j++) {
				nodeList.get(i).get(j).printNode();
			}
			System.out.println();
		}		
	}	
	public void init() {	
		dataInit();
		dataShuffle();
		nodeInit();
		printNodeList();
	}
	
}

public class 콜렉션종류_기본이론8_이차원벡터2 {
	public static void main(String[] args) {
		// 1to50 을만들어보세요
		Manager1to50Ver2 nm = new Manager1to50Ver2();
		nm.init();

	}
}

  • 콜렉션종류_기본이론9_맵정렬
package 콜렉션응용_개념;

import java.util.Arrays;
import java.util.HashMap;
import java.util.Map;


public class 콜렉션종류_기본이론9_맵정렬 {
	public static void main(String[] args) {

		Map<Integer, String> map = new HashMap<Integer, String>();
		
		map.put(1, "apple");
		map.put(3, "mango");
		map.put(4, "grape");
		map.put(2, "orange");
		map.put(5, "melon");
		
		Object[] mapKey = map.keySet().toArray();
		Arrays.sort(mapKey);
		
		for(Integer key : map.keySet()) {
			System.out.println(key + " : " + map.get(key));
		}
	

	}
}
반응형

'코딩 > 2-JAVA' 카테고리의 다른 글

C25제네릭  (1) 2025.07.22
C23날짜  (0) 2025.07.22
C20인터페이스  (1) 2025.07.18
C19추상화  (1) 2025.07.17
C18상속  (2) 2025.07.17