Java Collections Framework - set, map, list

별의개발자커비·2023년 3월 6일
0

Java

목록 보기
58/66
post-thumbnail

1. List 연습

arrayList 연습

package day6;

import java.util.ArrayList;
import java.util.List;
import java.util.function.Consumer;

public class ArrayListDemo {

	public static void main(String[] args) {

		// ArrayList 사용하고 이해하기
		// 객체 생성
		List<Integer> str = new ArrayList<Integer>();
		
		// 요소 저장
		str.add(1);
		str.add(1);
		str.add(1);
		str.add(1);
		str.add(1);

		// foreach 사용해서 출력하기
		str.forEach(x -> System.out.println(x) );
	}

}

// @ 왜 저기서 리턴이 없는지... 보이드라 그런가?

List 연습

package day6;

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

public class ListDemo1 {

	public static void main(String[] args) {
		String[] animals1 = { "aa", "bbbb", "ccc" };
		List<String> animals2 = Arrays.asList(animals1);
		animals2.set(1, "tt");
		animals2.forEach(x -> System.out.println(x));

		System.out.println("--------------");
		List<String> animals3 = new ArrayList<String>(animals2);
		animals3.add(1, "t");
		animals3.forEach(x -> System.out.println(x));

		// 길이순 정렬 방법1
//		animals3.sort(new Comparator<String>() {
//			public int compare(String o1, String o2) {
//				return o1.length() - o2.length();
//			};
//		});
		
		System.out.println("--------------");
		// 길이순 정렬 방법2
		animals3.sort( (a,b) -> a.length() - b.length()  );
		animals3.forEach( x -> System.out.println(x));

		
	}

}

// animals2는 순수한 리스트가 아니라 스트링을 리스트로 바꾼거라 add 기느이 안되는 것

2. set 연습

1번 예제

package day6;

import java.util.ArrayList;

import java.util.Arrays;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
import java.util.function.IntFunction;

public class HashSetDemo1 {

	public static void main(String[] args) {
		String[] fruits = { "apple", "banana", "pineapple", "grape" };
		Set<String> sets = new HashSet<String>();

		for (String s : fruits) {
			sets.add(s);
		}
		// 과일바구니에 바나나가 들어있는지
		sets.contains("banana");
		System.out.println(sets.contains("banana"));

		// array <-> collection 변환: Arrays.asList
		// array -> list
		List<String> lists = Arrays.asList(fruits);
		System.out.println(lists);

		// list -> array : .toArray()
		Object[] listsArray = lists.toArray();
		for (Object object : listsArray) {
			System.out.println(object.toString());
		}

		// 1 2 3 4 를 담는 배열arrays를 만들어서 -> list로 
		Integer[] it = new Integer[] { 1, 2, 3, 4 };
		List<Integer> it2 = Arrays.asList(it);
		

		// intfunction을 활용하여 integer를 입력받아 +2, -2, *2를 한 결과를 담은 배열 arrays를 한 방에 만들
		IntFunction<Integer[]> temp = x -> new Integer[] { x + 2, x - 2, x * 2 };
		Integer[] result = temp.apply(3);
		for (Integer i : result) {
			System.out.print(i);
		}
	}
}

2번 예제

package day6;

import java.util.Arrays;
import java.util.HashSet;
import java.util.List;
import java.util.Set;

class Fruit{
	String name;

	public Fruit(String name) {
		super();
		this.name = name;
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	@Override
	public String toString() {
		return "Fruit [name=" + name + "]";
	}

	@Override
	public int hashCode() {
		return this.name.hashCode();
	}

	@Override
	public boolean equals(Object obj) {
		Fruit target = (Fruit) obj ;
		return this.name.equals(target.name);
		}
	
	
	
	
	
}

public class HashSetDemo2 {

	public static void main(String[] args) {
		Set<Fruit> fruits = new HashSet<Fruit>();
		fruits.add(new Fruit("apple"));
		fruits.add(new Fruit("apple"));
		fruits.add(new Fruit("banana"));
		// set의 성격을 이해하면서
		// fruits의 개수 출력
		System.out.println(fruits.size());
		
		// 모든 요소 출력
		fruits.forEach(x -> System.out.println(x));

		Fruit f1 = new Fruit("pineapple");
		Fruit f2 = new Fruit("pineapple");
		System.out.println(f1.equals(f2)); // 원래는 false
		
		System.out.println(f1.hashCode());
		System.out.println(f2.hashCode());
		
		List<Object> lists = Arrays.asList(fruits.toArray());
		System.out.println(lists.get(0).equals(lists.get(1)));
	}

}

// new 로 만들면 set이어도 중복 가능
// 근데 이 비교가 hashcode로 이루어지는 거니까
// equlas, hashcode를 오버라이딩해서 new이어도 이름 같으면 중복 안되게 만들 수 있음

3. map 연습

package day6;

import java.util.HashMap;
import java.util.Map;
import java.util.function.BiConsumer;

public class HashMapDemo1 {

	public static void main(String[] args) {
//		Map<String, Integer> maps = Map.of("홍길동", 95 , "철수", 100);
		Map<String, Integer> maps = new HashMap<String, Integer>();
		maps.put( "홍길동", 95);
		maps.put( "철수", 100);
		
		Map<String, Integer > peoples = new HashMap<String, Integer>(maps);
		
		Map<Student, Integer> stMap = new HashMap<Student, Integer>() ;
		stMap.put(new Student("kim"), 10);
		stMap.put(new Student("lee"), 20);
		stMap.put(new Student("kim"), 5);
		
		System.out.println(stMap.size());
		stMap.get(stMap);
		
		System.out.println(stMap);
		BiConsumer<String, String> bic = (a,b) -> System.out.println(a+b);
		bic.accept("aaa", "bbb");
		stMap.forEach((k,v) -> System.out.println("key:" + k.getName() + ", value: " + v) );
	}

}

// 버전 올리면 map.of 됨
// key value를 만들어주는 기능
// 저걸 씌워줬으니 이제 people은 완벽한 hashmap이 된 것

Collections 자체의 사용

Collections.sort

: 해당 Collection의 정렬 (list, map, set 무엇이든)

Collections.reverseOrder

: 해당 Collection의 정렬 뒤집기

Collections.binarySearch

: 해당 key의 index 값을 찾아주는 기능

package day6;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.Comparator;
import java.util.HashSet;
import java.util.List;
import java.util.Set;

public class Demo1 {

	public static void main(String[] args) {
		List<String>temp = List.of("111","222","333","444");
		
		List<String>lists = new ArrayList<String>(temp);
		Set<String>sets = new HashSet<String>();
		Collections.sort(lists, Collections.reverseOrder()  );  
		System.out.println(lists);
		
		String [] strarray = { "333", "222", "111", "444"};
		List<String> lists2 = Arrays.asList(strarray);
		Collections.sort(lists2);
		System.out.println(lists2);
		
		int index = Collections.binarySearch(lists2, "222");
		System.out.println(index);
		
		
	}

}

0개의 댓글