[21.07.26] Set과 Map
Set
Set은 데이터의 저장순서가 중요하지않아서 인덱스가 없어요. 인덱스가 없어서 데이터를 찾는 방법은 값으로만 이루어지기 때문에 중복된 데이터의 저장을 허용하지않습니다.
- add() : 데이터 저장
- remove(element) : 데이터 삭제
데이터를 변경하고 싶다면 데이터를 삭제 후 추가하는 방법을 사용해야합니다.
HashSet
검색을 빠르게 하기 위한 Hash알고리즘이 적용된 set입니다.
Set<Integer> set=new HashSet<Integer>();
TreeSet
정렬을 빠르게 하기 위한 Tree알고리즘이 적용된 set입니다.
TreeSet<String> set=new TreeSet<String>();
Iterator 메소드
Iterator는 원소에 접근할 수 있게 해주는 메소드입니다. Iterator를 사용해서 데이터를 검색할 수 있어요.
Iterator<Integer> itr=set.iterator();
- iterator() : 오름차순으로 Iterator 객체를 리턴합니다.
- hasNext() : Iterator 객체가 가리키는 위치에 원소가 있으면 true를 반환하고 없으면 false를 반환합니다.
- next() : Iterator 객체가 가리키는 위치를 다음 위치로 이동하고 기존에 가리키고 있던 값을 리턴합니다.
TreeSet인 경우 lexicographical order(사전식 정렬)이라고 하며 오름차순과 내림차순으로 객체 정렬을 선택할 수 있어요
- descendingIterator() : 내림차순으로 정렬한 객체를 리턴합니다. HashSet은 없는 메소드예요
List에서도 사용할 수 있는 Iterator 인터페이스
: 컬렉션 프레임워크의 표준 인터페이스
Map
Key-value가 한 쌍으로 데이터를 저장하는 구조입니다. 검색, 수정, 삭제를 할 때 key값을 사용하기 때문에 key는 중복되지 않는 값만 저장할 수 있어요. value는 중복된 값도 저장 가능합니다.
- put(k,v) : key에 value를 저장합니다. value를 수정하고싶을때도 사용해요!
- get(k) : 특정 Key의 데이터를 검색합니다. 해당 key의 value를 리턴해요
- remove(k) : key의 value를 삭제합니다.
- KeySet() : key로만 이루어진 set을 생성합니다.
- values() : value로만 이루어진 list를 생성합니다.
HashMap
검색을 빠르게 하기 위한 Hash알고리즘 적용된 Map입니다.
TreeMap
정렬을 빠르게 하기 위한 Tree알고리즘 적용된 Map입니다.
Generic은 데이터 타입을 미리 정해놓으면 관련된 함수의 타입에도 자동으로 적용되는 게 특징입니다. 제네릭을 직접 만들 수도 있어요!
Generic 클래스
클래스의 멤버변수, 메소드, 생성자의 매개변수 등을 지정하지 않고서 일반적으로 정의하는 클래스입니다.
public class Box<T>{}
Generic 클래스를 정의할 때 사용되는 일반화 변수(T)는 클래스 타입에만 사용할 수 있어요. 일반적으로 T를 쓰는 것인데 다른 이름으로 지을 수 있어요 Collection에서 <E(element)>를 사용한것처럼요
priavte T content;
public T pullOut(){}
< 클래스타입 부분에 사용할 수 있어요!
일반화 변수에는 자바의 기본 자료형은 사용할 수 없고 Wrapper 클래스를 사용할 수 있습니다.
지역변수와 멤버변수
지역변수
메소드 안에서 선언하는 변수를 의미해요. 메소드 안에서만 사용할 수 있습니다. final 상수는 가능하지만 접근제한 수식어는 사용할 수 없어요. 메소드에 포함된 관계입니다.
멤버변수(전역변수)
클래스에서 선언된 변수입니다. 클래스 내부 어느 곳에서나 사용 할 수 있는 변수며 접근제한 수식어도 사용할 수 있어요! 클래스에 포함된 관계라고 할 수 있네요
지역변수와 멤버변수의 차이를 알아봤는데요 이걸 클래스로도 생각할 수 있답니다.
InnerClass
바로 내부클래스예요. 지역변수와 멤버변수를 배웠는데 일반적인 내부 클래스는 멤버 클래스라고 생각할 수 있어요
OuterClass와 InnerClass는 포함관계인데요. 외부클래스가 자동차라면 내부클래스는 타이어같은 존재입니다.
내부클래스는 외부클래스의 멤버변수를 사용할 수 있어요. 하지만 그 반대는 불가능해요 외부 클래스의 참조변수가 내부 클래스의 메소드를 사용할 수는 없습니다.
내부클래스는 외부클래스의 인스턴스가 생성된 다음에야 내부클래스의 인스턴스 생성이 가능합니다.
(외부클래스 이름).(내부 클래스 이름) 변수이름 = (외부 클래스의 참조 변수).new (내부클래스 생성자)();
내부클래스의 인스턴스를 생성하려면 외부클래스의 참조 변수가 필요하거든요!
OuterClass out1 = new OuterClass();
OuterClass.InnerClass inner1 = out1.new InnerClass();
내부클래스는 외부클래스의 멤버변수를 사용할 수 있다고 했죠? 그래서 내부 클래스의 인스턴스를 통해서 외부 클래스 멤버변수를 변경할수도 있어요
메소드도 클래스와 포함관계라고 할 수 있는데요 차이점은 메소드에서 지역변수를 선언할 때 변수의 이름이 멤버변수와 똑같으면 오류가 발생합니다. 근데 내부클래스에선 이름이 똑같은 변수를 만들 수 있어요.
내부클래스에서 이름이 같은 외부클래스의 변수를 사용할때는 OuterClass.this.value
라고 표시한다는 점~
nested class
static 수식어를 사용한 내부클래스를 nested class라고 해요. 중첩클래스입니다.
static 수식어를 사용했을 때의 특징이 무엇인지 기억나시나요?
static으로 클래스를 선언하면 프로그램이 시작하면서 먼저 생성되기 때문에 해당 클래스의 인스턴스를 생성하지않고도 쓸 수 있다는 특징이 있어요.
static 내부 클래스도 마찬가지입니다. 기존의 내부클래스는 외부클래스의 인스턴스가 생성된 다음에야 인스턴스를 생성해서 사용해야 했는데요
내부클래스가 static인 경우 내부클래스 본인의 인스턴스뿐만 아니라 외부클래스의 인스턴스가 생성되지않아도 바로 사용할 수 있어요!
OuterClass.NestedClass nest = out1.NestedClass(200);
👆new를 사용하지 않는 차이점 보이시나용
또한, 메모리에 내부클래스가 먼저 생성되기 때문에 외부클래스의 static이 아닌 변수는 사용할 수 없습니다.
지역 클래스
메소드안에 있는 변수는 지역변수라고 했죠? 그렇다면 메소드안에 있는 클래스를 지역클래스라고 합니다.
외부클래스의 특정 메소드안에서 정의된 내부클래스를 의미해요
생성된 메소드안에서만 사용할 수 있으며 인스턴스도 메소드안에서만 생성할 수 있어요. 그래서 지역클래스의 경우 특정 메소드를 사용해야만 클래스의 기능을 쓸 수 있게 할 때 사용한답니다.
그리고 이름이 없는 내부클래스인 익명클래스라는 것도 있어용 이건 람다 표현식을 사용할 수 있습니다
innerclass는 내용이 어렵다고 간단히 보고 넘어간다고 하시네요 앱개발을 한다면 꼭 알아둬야하는 부분이라고 하지만 저희는 웹개발 과정이니깐욯..ㅎ 앱이라.,. 흠 혼자서 좀 더 공부해볼까요? 이번주 스터디 주제는 이거로?ㅎㅎ 오늘도 고생했다🥳
Author And Source
이 문제에 관하여([21.07.26] Set과 Map), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@yeddoen/21.07.26-Set과-Map저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)