YJ의 새벽
JAVA 컬렉션 복습 본문
- 컬렉션
-- 자바에서 제공하는 자료구조를 담당하는 프레임워크.
-- 추가, 삭제, 정렬 등 기능처리가 간단하게 해결되어 자료구조적 알고리즘을 구현할 필요 없음.
-- 크기의 제약이 없다.
-- 여러 타입의 데이터가 저장 가능하다.
- List ( ArrayList, Vector , LinkedList )
-- 자료들을 순차적으로 나열한 자료구조,
-- 인덱스로 관리되며,
-- 중복 O
- Set ( HashSet , LinkedHashSet, TreeSet )
-- 저장 순서가 유지되지 않고,
-- 중복 X ( null 도 중복을 허용하지않는다 )
- Map ( HashMap , HashTable )
-- 키와 값 으로 구성되어 있으며,
-- 키는 중복저장을 하용하지않고 , 값은 중복 저장 가능.
-- 키가 중복되는 경우 , 기존에 있는 키에 값이 덮어씌움 .
-- add() x , put( k ,v ) o
-------- List 연습
public class ListService {
public void ex1() {
// ArrayList list = new ArrayList(); // 기본생성자 -> 10칸짜리 생성
ArrayList list = new ArrayList(3); // 3칸짜리 생성
list.add( new Object() );
list.add( new String() );
list.add( new Student() );
list.add( new String("초과") ); // list 크기 초과
list.add( 1, new Student("홍길동",15,"강남구",'남',60)); // 1 자리에 객체 추가
// set (int index, E e) : index위치를 E객체로 수정 ( 수정 )
Object str = list.set(4, new String("수정된 문자열"));
System.out.println(str); // 원래 4번째위치, "초과"출력
// remove (int index) : index위치 객체를 꺼내서 반환 ( 삭제 )
Object student = list.remove(2);
System.out.println(student); // 번위치 String() 반환
// size() : List에 저장된 요소의 개수를 반환
// get(int index) : index에 위치한 객체를 얻어옴. ( 조회 )
for(int i = 0; i < list.size(); i++) {
if ( list.get(i) instanceof Student )
System.out.println( ((Student)list.get(i)).getName() );
}
}
}
---- Set 연습
-- Iterator 반복자 = Iterator< 타입 > iterator = HashSet.iterator();
-- 향상된 for 문 = for ( String value : HashSet ) { value } ;
-- Set에 저장된 객체가 중복임을 판단하는 방법
-- Object.equls() -- > VO 오버라이딩. ( 저장된 클래스 )
-- Hash 라는 단어가 붙은 컬렉션이 중복을 판단하는방법
--> Object.hashCode() 오버라이딩.
// hashCode() : 객체에 저장된 필드를 이용해서 만들어진 정수를 반환
// HashSet --> equals(), hashCode() 둘다 오버라이딩 되어있어야함
--- TreeSet : 오름차순으로 정렬되고 , 중복 제거되는 Set . ( ex . 로또 )
public class SetService {
// 순서 유지 X , 중복 X ( null도 1개만 )
public void ex1() {
Set<String> set = new HashSet<String>();
set.add("네이버");
set.add("네이버");
set.add("카카오");
set.add("라인");
set.add("배민");
set.add("배민");
set.add("당근마켓");
set.add("토스");
set.add("야놀자");
set.add("야놀자");
set.add(null);
set.add(null);
set.remove("라인");
System.out.println(set.toString());
// Set 요소 하나씩 얻어오기
Iterator<String> it = set.iterator();
while(it.hasNext()) {
String temp = it.next(); // 다음값을 얻어옴
System.out.println(temp);
}
System.out.println("===============");
// 2. 향상된 for 문 사용가능
for (String temp : set) {
System.out.println(temp);
}
}
public void ex2() {
Set<Student> set = new HashSet<>();
set.add( new Student("홍길동",15,"서울 중구",'M',50) );
set.add( new Student("김길순",17,"서울 종로구",'F',100) );
set.add( new Student("홍길동",15,"서울 중구",'M',50) );
for(Student s : set) {
System.out.println(s);
}
}
public void ex3() {
// TreeSet : 오름차순 정렬 , 중복 제거
Set<Integer> lotto = new TreeSet<>();
while(lotto.size() < 6 ) {
int ran = (int) (Math.random() * 45 + 1); // 1~45 난수
lotto.add(ran);
}
System.out.println(lotto);
}
}
--- Map 연습
-- Key 와 Value 한 쌍이 데이터가 되어 이를 모아둔 객체
-- key : Map 에 저장된 데이터를 구분 용도
: Set의 특징을 지님. ( 순서 X , 중복 X )
: equals() , hashCode() 오버라이딩 O
-- value : Map 실제 저장된 값을 의미
: List 의 특징을 지님 ( 중복 O )
-- Map.put ( key, value ) ; Map에 추가
-- keySet() : Map 에서 Key 부분만을 추출하여 Set 형태로 반환
-- Map 은 언제 사용하면 좋을까 ??
-- 재사용이 적은 VO 를 대체하는 경우.
-- 한번에 다량의 데이터를 전달하는 경우. ( 데이터의 명확한 구분을 위해서 사용 )
public class MapService {
public void ex1() {
Map<Integer, String> map = new HashMap<>();
map.put(1, "홍길동");
map.put(2, "고길동");
map.put(3, "김길동");
map.put(4, "박길동");
map.put(5, "조길동");
map.put(6, "홍길동");
map.put(1, "덮어씌운홍길동"); // 키 중복 = 덮어쓰기
System.out.println(map.toString());
}
public void ex2() {
Student std = new Student();
Map<String, Object> stdMap = new HashMap<>();
// 값 추가
std.setName("홍길동"); // VO 사용
std.setAge(15);
std.setAddress("서울시 중구");
std.setGender('남');
std.setScore(100);
stdMap.put("name", "홍길동"); // Map 사용
stdMap.put("age", 15);
stdMap.put("address", "서울시 중구");
stdMap.put("gender", '남');
stdMap.put("score", 100);
System.out.println("std = "+std);
System.out.println("stdMap = " +stdMap);
for ( String key : stdMap.keySet()) {
System.out.println( stdMap.get(key));
}
}
}
'SelfStudy > JAVA' 카테고리의 다른 글
JAVA ( 스트림의 그룹화,분할 ) (0) | 2023.02.12 |
---|---|
JAVA ( 스트림 ) (0) | 2023.02.10 |
JAVA ( 메서드참조 ) (0) | 2023.02.09 |
JAVA ( 함수형인터페이스 ) (0) | 2023.02.09 |
JAVA ( 람다식 ) (0) | 2023.02.09 |