JAVA - 11

Date:

카테고리:

태그:

img

Vector.java

Vector 클래스를 사용하여 동적 배열을 구현하고 활용하는 예제입니다.

Vector는 자바의 레거시 클래스로, 스레드 동기화를 지원하며 동적 배열을 구현하는데 사용됩니다. Vector 클래스는 초기 용량(capacity)를 설정할 수 있으며, 요소가 추가될 때마다 내부 배열의 크기가 자동으로 증가합니다.

위의 예제에서는 Vector를 사용하여 문자열 요소를 저장하고 관리하는 예시가 제시되었습니다. 먼저, 요소를 추가하기 위해 add() 메소드를 사용합니다. add() 메소드를 이용하면 벡터의 맨 뒤에 객체를 추가할 수 있습니다. 또한, add(index, value) 메소드를 사용하여 원하는 위치에 객체를 추가할 수도 있습니다.

요소의 개수는 size() 메소드를 통해 확인할 수 있습니다. 요소에 접근하기 위해서는 get(index) 메소드를 사용합니다.

벡터의 요소를 순회하기 위해 for-each 문을 사용할 수 있습니다. 예제에서는 for-each 문을 사용하여 벡터의 모든 요소를 출력하였습니다.

요소를 삭제하기 위해서는 remove(index) 메소드를 사용합니다. 해당 위치에 있는 객체가 삭제되며, 삭제 후에는 빈 공간이 자동으로 앞으로 이동합니다.

또한, 예제 코드에서는 벡터를 생성하고 요소를 추가하고 출력하는 과정을 보여주는 부분도 포함되어 있습니다.

이를 통해 Vector 클래스의 기본적인 사용 방법을 이해할 수 있습니다.

출력결과 :

요소 개수 : 3
 번째 요소 : 사과
사과
바나나
체리
요소 개수 : 2
[홍길동, 이순신, 홍길동]
홍길동
이순신
홍길동

HashSet과 HashMap

먼저, HashSet을 사용하여 중복을 제거합니다. HashSet은 값을 저장하는 컬렉션으로, 중복된 값을 허용하지 않습니다. 따라서, for문을 통해 주어진 과일 배열을 순회하면서 각 과일을 HashSet에 추가합니다.

그 후, HashMap을 사용하여 각 과일의 개수를 카운트합니다. HashMap은 키(key)와 값(value)을 쌍으로 저장하는 자료구조입니다. 과일 이름을 키로, 개수를 값으로 저장합니다. 주어진 과일 배열을 순회하면서 HashMap에 과일 이름이 이미 존재하는지를 확인하고, 존재할 경우 해당 과일의 개수를 1 증가시킵니다. 존재하지 않을 경우에는 과일의 개수를 1로 설정합니다.

마지막으로, HashMap의 forEach 메소드를 사용하여 각 과일과 그 개수를 출력합니다. forEach 메소드는 람다식을 인자로 받아 HashMap의 모든 엔트리에 대해 적용합니다. 예제에서는 각 과일과 해당 과일의 개수를 출력하도록 설정되어 있습니다.

코드를 실행하면 중복이 제거된 과일의 종류가 먼저 출력되고, 그 다음에는 각 과일과 해당 과일의 개수가 출력됩니다.

출력결과 :

과일 종류 :    /  수박 /  사과 /  바나나 /

과일 개수 출력하기
====================
귤: 6
수박: 4
사과: 6
바나나: 4

NumUtil.java

Comparable 인터페이스와 Maximum 인터페이스를 활용하여 NumUtil 클래스를 구현한 예제입니다.

NumUtil 클래스는 제네릭 타입 T를 상속받는 Comparable 인터페이스를 구현한 타입만을 전달받을 수 있습니다. 또한, Maximum 인터페이스를 구현하고 있습니다.

NumUtil 클래스의 생성자는 제네릭 타입 배열인 value를 인자로 받습니다. 이 배열은 NumUtil 클래스의 멤버 변수로 저장됩니다.

NumUtil 클래스는 Maximum 인터페이스의 max() 메소드를 구현하고 있습니다. 이 메소드는 배열의 요소 중에서 가장 큰 값을 찾아 반환합니다. 메소드 내부에서는 value 배열의 첫 번째 요소를 변수 v에 저장하고, 반복문을 통해 배열의 모든 요소와 비교하여 가장 큰 값을 찾습니다. 비교는 compareTo() 메소드를 사용하여 이루어지며, 해당 메소드는 현재 객체와 매개변수로 전달받은 객체를 유니코드 순서로 비교하여 작으면 음수, 같으면 0, 크면 양수를 반환합니다.

NumUtil 클래스는 Comparable 인터페이스를 구현하여 객체 간의 크기 비교를 가능하게 하고, Maximum 인터페이스를 구현하여 max() 메소드를 사용하여 배열의 최댓값을 구할 수 있도록 합니다.


toString, equals, hashCode - Overriding

Card 클래스는 kind와 number라는 두 개의 멤버 변수를 가지고 있습니다. 생성자를 통해 kind와 number를 초기화하는 기능을 제공합니다. 또한, toString() 메소드를 오버라이딩하여 객체의 정보를 문자열로 표현할 수 있도록 구현하였습니다.

equals() 메소드는 Object 클래스의 equals() 메소드를 오버라이딩한 것입니다. 이 메소드는 매개변수로 전달받은 객체와 현재 객체를 비교하여 같은 종류(kind)와 숫자(number)를 가지고 있는지를 확인합니다. 객체의 타입이 Card가 아니거나 kind와 number가 다를 경우 false를 반환합니다.

hashCode() 메소드는 Objects 클래스의 hash() 메소드를 사용하여 kind와 number를 기반으로 객체의 해시 코드를 생성합니다. 해시 코드는 객체를 해시 테이블에 저장하거나 검색할 때 사용되는 값으로, equals() 메소드와 함께 사용됩니다. 두 개의 객체가 같은 해시 코드를 가지면 equals() 메소드를 호출하여 추가적인 동등성 검사를 수행합니다.

예제에서는 Card 객체를 생성하고 toString(), equals(), hashCode() 메소드를 호출하여 그 결과를 출력하였습니다. 이를 통해 객체의 정보를 문자열로 표현하고, 객체 간의 동등성 비교 및 해시 코드 생성이 제대로 동작하는지 확인할 수 있습니다.

출력결과 :

kind : SPADE, number : 1
true
-1842861219
-1842861219

HashSet_sort.java

HashSet을 사용하여 1부터 45까지의 난수 중 6개를 중복 없이 선택하여 저장하고, 그 값을 정렬하여 출력하는 예제입니다.

먼저, HashSet 객체 set을 생성합니다. 반복문을 사용하여 set의 크기가 6보다 작을 동안, 1부터 45까지의 난수를 생성하여 set에 추가합니다.

그 후, HashSet을 LinkedList로 변환하여 List 객체 list에 저장합니다. 이렇게 하는 이유는 HashSet은 순서를 가지지 않기 때문에 정렬을 위해 List로 변환해야 합니다.

Collections 클래스의 sort() 메소드를 사용하여 list를 정렬합니다. sort() 메소드는 List의 요소를 오름차순으로 정렬합니다.

마지막으로, 정렬된 list를 출력합니다.

실행 시, 정렬된 6개의 난수가 출력됩니다.

출력 결과:

(1)
[4, 16, 24, 34, 41, 44]

(2)
[15, 16, 19, 25, 32, 37]

(3)
[6, 8, 12, 35, 42, 43]

HashSet_Check.java

HashSet을 사용하여 객체를 저장하고, 저장하기 전에 동일한 객체가 있는지 확인하는 예제입니다.

먼저, HashSet 객체 set을 생성합니다.

그 후, "abc"new Person("David", 10) 객체를 set에 추가합니다. 이때, "abc"를 두 번 추가하였지만 HashSet은 중복된 값을 허용하지 않기 때문에 실제로는 한 번만 저장됩니다.

Person 클래스는 name과 age를 멤버로 가지는 간단한 클래스입니다. toString(), hashCode(), equals() 메소드를 오버라이딩하여 HashSet이 객체의 동등성을 판단할 수 있도록 구현합니다. hashCode()는 name과 age를 기반으로 해시 값을 생성하고, equals()는 name과 age를 비교하여 동일한지 여부를 반환합니다.

이렇게 hashCode()equals()를 오버라이딩하면 HashSet은 객체를 저장하기 전에 동일한 객체가 있는지 확인하고, 동일한 객체가 없을 경우에만 저장합니다.

마지막으로, set을 출력하면 중복된 객체가 제거되어 저장된 객체들이 출력됩니다.

즉, HashSet은 객체의 equals()hashCode() 메소드를 오버라이딩하여 동일한 객체를 판단하고 중복을 제거할 수 있는 자료구조입니다.

출력결과 :

[David : 10, abc]

java 카테고리 내 다른 글 보러가기

댓글 남기기