java.util
.add()
.get()
.size()
.set()
.remove()
메소드 활용 예제public static void ex01() { // ArrayList의 인터페이스 List 타입 선언 List<String> season; // ArrayList 생성 season = new ArrayList<String>(); // 배열 요소 추가하기 season.add("여름"); season.add("가을"); season.add("겨울"); season.add(0, "봄"); // arraycopy를 자동으로 대신 해줌 // 배열 요소 확인하기 System.out.println(season.get(0)); // .get()메소드로 배열 요소 확인 가능 System.out.println(season.get(1)); System.out.println(season.get(2)); System.out.println(season.get(3)); }
public static void ex02() { // ArrayList의 선언 & 생성 List<String> hobbies = new ArrayList<String>(); // 배열 요소 추가하기 hobbies.add("뜨개질"); hobbies.add("독서"); hobbies.add("코딩"); // 배열 길이 확인하기 (저장된 요소의 갯수) System.out.println(hobbies.size()); // .size() 메소드 이용해서 배열에 저장된 전체 요소의 갯수 확인 // 배열 길이 관련 (마지막 요소 꺼내기) System.out.println(hobbies.get(hobbies.size()-1)); // 마지막 요소의 인덱스 확인 공식 : .size() - 1 // 배열 for문 적용하기 (순회) for(int i = 0; i < hobbies.size(); i++) { System.out.println(hobbies.get(i)); } // 배열 for문 적용하기 (리팩토링 : hobbies.size() 메소드가 여러 번 호출되는 문제 해결) for(int i = 0, length = hobbies.size(); i < length; i++) { // 초기화 블록에서 리팩토링 했음. hobbies.size()메소드가 한번만 호출 됨. System.out.println(hobbies.get(i)); } }
public static void ex03() { // ArrayList 선언 & 생성 List<String> flower = new ArrayList<String>(); // 요소 추가하기 flower.add("장미"); flower.add("튤립"); flower.add("무궁화"); // 요소 수정하기 flower.set(0, "백일홍"); // 인덱스 0의 요소를 "백일홍"으로 수정 .set(인덱스, 수정할내용) // 요소 삭제하기 flower.remove(1); // 인덱스 1의 요소를 삭제 .remove(삭제할인덱스) // 요소 확인 for(int i = 0, length = flower.size(); i < length; i++) { System.out.println(flower.get(i)); } }
public static void ex04() { // 배열을 ArrayList로 바꾸기 Integer[] a = {10, 20, 30, 40, 50}; List<Integer> numbers = Arrays.asList(a); // Array.asList(T...a)로 초기화 // 주의!!!! 초기화 된 ArrayList는 길이를 변경할 수 없다. // numbers.add(60); 추가 불가능 // numbers.remove(0); 삭제 불가능 // for문 for(int i = 0, length = numbers.size(); i < length; i++) { System.out.println(numbers.get(i)); } }
public static void ex05() { // ArrayList 초기화 List<Integer> numbers = Arrays.asList(10, 20, 30, 40, 50); // for문 for(int i = 0, length = numbers.size(); i < length; i++) { System.out.println(numbers.get(i)); } }
(주석 참고)
java.util
(Hash는 어떤 데이터가 가지고있는 정수값이다.
유사한 데이터들은 동일한 해쉬 값을 가지고 관리할 수 있도록
알고리즘을 짜서 부여한 특정한 정수값을 해쉬라고 한다.)
public static void ex01() { // Set 인터페이스 타입 선언 Set<String> season; // HashSet 클래스 객체 생성 season = new HashSet<String>(); // 요소 추가하기 season.add("봄"); season.add("여름"); season.add("가을"); season.add("겨울"); season.add("봄"); // 전체 확인 System.out.println(season); }
// 향상 for문 활용 public static void ex02() { // HashSet 선언 & 생성 Set<String> hobbies = new HashSet<String>(); // 요소 저장하기 hobbies.add("독서"); hobbies.add("요리"); hobbies.add("운동"); hobbies.add("체스"); // for문 활용하기(인덱스가 없으므로 향상 for문) for (String hobby : hobbies) { System.out.println(hobby); } }
// while문 활용 public static void ex03() { // HashSet 선언 & 생성 Set<String> flower = new HashSet<String>(); // 요소 저장하기 flower.add("국화"); flower.add("튤립"); flower.add("프리지아"); flower.add("물망초"); // 반복자 Iterator를 이용한 Set 순회 (인덱스가 없을 때 간혹 사용 가능한 형태이다.) Iterator<String> arm = flower.iterator(); // 조건 : arm.hasNext() (true or false) // 실행 : System.out.println(arm.next()); while (arm.hasNext()) { System.out.println(arm.next()); } }
public static void ex04() { // 동일한 객체 2개 Person p1 = new Person("홍길동", 30); Person p2 = new Person("홍길동", 30); // HashSet 선언 & 생성 Set<Person> people = new HashSet<Person>(); // 요소 추가 people.add(p1); people.add(p2); // 확인 System.out.println(people); }
public static void ex05() { // ArrayList 선언 & 생성 List<Integer> numbers1 = Arrays.asList(1, 2, 3, 4, 5); List<Integer> numbers2 = Arrays.asList(6, 7, 3, 4, 5); // ArrayList를 이용해서 HashSet 생성 Set<Integer> set1 = new HashSet<Integer>(numbers1); Set<Integer> set2 = new HashSet<Integer>(numbers2); // 교집합 set1.retainAll(set2); // 교집합 결과는 set1에 저장된다. System.out.println(set1); // [3, 4, 5] }
public static void ex06() { // ArrayList 선언 & 생성 List<Integer> numbers1 = Arrays.asList(1, 2, 3, 4, 5); List<Integer> numbers2 = Arrays.asList(6, 7, 3, 4, 5); // ArrayList를 이용해서 HashSet 생성 Set<Integer> set1 = new HashSet<Integer>(numbers1); Set<Integer> set2 = new HashSet<Integer>(numbers2); // 합집합 set1.addAll(set2); // 합집합 결과는 set1에 저장된다. System.out.println(set1); // [1, 2, 3, 4, 5, 6, 7] }
public static void ex07() { // ArrayList 선언 & 생성 List<Integer> numbers1 = Arrays.asList(1, 2, 3, 4, 5); List<Integer> numbers2 = Arrays.asList(6, 7, 3, 4, 5); // ArrayList를 이용해서 HashSet 생성 Set<Integer> set1 = new HashSet<Integer>(numbers1); Set<Integer> set2 = new HashSet<Integer>(numbers2); // 차집합 set1.removeAll(set2); // 차집합 결과는 set1에 저장된다. System.out.println(set1); // [1, 2] }
(주석 참고)
패키지 : java.util
Map 인터페이스
를 구현한 클래스이다.
객체(Object)/인스턴스(Instance)를 대신할 수 있는 자료구조이다.
용어
Entry
: Key
+ Value
를 합쳐서 부르는 말Key
: 데이터를 식별하는 식별자(변수명)Value
: 데이터 자체(변수에 저장된 값)Map.of(K,V)
: Key와 Value를 최대 10개까지 입력(등록) 할 수 있다.특징
put
/ Map.of(K,V)
Null
값이 들어 있으면 NullPointException
이 발생한다.Null
을 값으로 담을땐 사용이 불가하다.public static void ex01() { // Map 인터페이스 타입으로 HashMap 선언 Map<String, String> dict; // HashMap 생성 dict = new HashMap<String, String>(); // Entry 저장(Key, Value) dict.put("봄", "spring"); // 저장은 Entry단위로 한다. dict.put("여름", "summer"); dict.put("가을", "autumn"); dict.put("겨울", "winter"); // Value 확인(Key를 전달한다.) System.out.println(dict.get("봄")); System.out.println(dict.get("여름")); System.out.println(dict.get("가을")); System.out.println(dict.get("겨울")); }
public static void ex02() { // HashMap 선언 & 생성 // Map에서는 Value를 하나의 타입으로 저장해야한다. 그렇기 때문에 String, int 형식으로 저장하고자 하면 모든 타입을 저장 할 수 있는 만능타입인 Object을 활용한다. Map<String, Object> person = new HashMap<String, Object>(); // Entry 저장(Key는 변수명으로, Value는 변수 값으로 저장) person.put("name", "홍길동"); person.put("age", 30); // Entry 수정(기존의 Key를 사용하면 해당 Key의 Value가 수정되는 방식) person.put("name", "제시카"); person.put("age", 40); // Value 확인 System.out.println(person.get("name")); System.out.println(person.get("age")); }
public static void ex03() { // HashMap 선언 & 생성 Map<String, Object> map = new HashMap<String, Object>(); // Entry 저장 map.put("top", 10); map.put("bottom", 20); map.put("left", 30); map.put("right", 40); // 반복자(Iterator)를 이용한 HashMap 순회 // 1. Map에서 Key만 모두 꺼내서 Set에 저장한다.(keySet 메소드) // 2. Set에 반복자(Iterator)를 붙여서 key를 하나씩 꺼낸다. // 3. get() 메소드에 Key를 전달하면 Value가 나온다. Set<String> keySet = map.keySet(); Iterator<String> arm = keySet.iterator(); while(arm.hasNext()) { String key = arm.next(); Object vaule = map.get(key); System.out.println(key + ": " + vaule); } // 값을 출력할 때 순서는 원래 안 지켜짐. 값을 전달하는 목적으로 사용한다. }
public static void ex04() { // HashMap 선언 & 생성 Map<String, Object> map = new HashMap<String, Object>(); // Entry 추가 map.put("id", "admin"); map.put("pw", 1234); map.put("role", "DBA"); // for문을 이용한 Map의 순회 (주로 Entry 단위로 값을 빼는 entrySet() 메소드 활용) for(Entry<String, Object> entry : map.entrySet()) { // Map.Entry<> 라고 적기도 하지만 필수는 아니다. String key = entry.getKey(); Object value = entry.getValue(); System.out.println(key + " : " + value); } }
(주석 참고)
자바의 라이브러리나 다른 패키지 안에 있는 클래스를 사용 할 때 패키지 명을 적지 않고 클래스를 사용할 수 있도록 미리 명시하는 명령어이다.
java.lang.
패키지만 유일하게 임포트 생략이 가능하다.
메소드
를 의미없이 반복 호출 하는것은 성능의 저하를 일으키기 때문에 리팩토링
하면 성능 향상 효과가 있다.