Govern/Eclipse SE -상속,클래스,타입

07-27(화) ArrayList / HashMap

Mary's log 2021. 7. 27. 09:33

※ 개인적인 개발 수업 정리글입니다. 꾸준히 정리할 예정이고 틀린 부분이 있다면 언제든지 댓글 환영입니다.


컬렉션 1) 인터페이스 Set - Hashset클래스


Person -기본생성자,전체생성자, 겟셈, 투스트링 만들기.
private String name;
private int age;
private String address;
//멤버변수


SetTest3


SetTest4


<<인터페이스 Set>> - 순서X, 중복불가

  • HashSet 클래스 : Set에 객체저장. Hash를 사용하여 처리속도가 빠름.
  • LinkedHashSet 클래스 : HashSet과 거의 같음. 차이점은 Set에 추가되는 순서를 유지.
  • TreeSet 클래스 : 객체의 Hash값에 의한 오름차순의 정렬 유지.


* +++


프로젝트 11Day4


컬렉션 2) 인터페이스 List

<<인터페이스 List>> - 순서O, 중복가능

  • List 클래스 : List의 요소는 순서를 가짐.
  • ArrayList 클래스 : List에서 객체를 얻어내는데 효율적. 동기화 제공X.
  • LinkedList 클래스 : List에서 앞뒤의 데이터를 삽입,삭제하는데 효율적. 동기화 제공X
  • Vector 클래스 : 기본적으로 ArrayList와 동등하지만, 동기화 제공O. 가장 성능이 좋지않음.


프로젝트 11Day5ListTest클래스


프로젝트 11Day5ListTest2 클래스


프로젝트 11Day5ListTest3 클래스


프로젝트 11Day5ListTest4 클래스


프로젝트 11Day5ListTest5 , Person, PersonAgeSortComparator 클래스



PersonAgeSortComparator


컬렉션 3) 인터페이스 Map

- key 랑 value 사용.
==>key는 인덱스 같은건데, 인덱스는 숫자만 0부터 가능하자나. 근데 key를 다른숫자나 글자로 주는거
-크게 HashMap 과 Hashtable 있음. 우린 주로 HashMap만 쓸거임!!!
-Hashtable은 null값 허용 안함

<<인터페이스 Map>>

  • HashMap 클래스 : Map에 key를 저장. hash를 사용하여 성능이 좋음. 저장순서 유지X. 오로지 하나의 null키?
  • LinkedHashMap 클래스 : HashMap과 거의 같음. 저장순서유지O.
  • HashTable 클래스 : 동기화 제공O. null key와 null value 저장불가.

★★★<제네릭스>★★★

-컬렉션 선언 시, < > 안에 매개변수 타입을 선언해서 전달.

< Map에 타입을 제한해서, 특정 타입만 받도록 함. >
ex) Map<Integer, Integer> map= new HashMap<Integer, Integer>();
map.put( 10, 100 );
System.out.println( map.get(10) );
=================> key, value 전부 int 타입만 받음
ex) Map<String, String> map= new HashMap<String, String>();
ex) Map<String, Object> map= new HashMap<String, Object>();
ex) Map<Long, String> map= new HashMap<Long, String>();


< Map에서 쓸 수 있는 기본 함수>

- List 타입의 변수.add( idx, 값 ) ; ==>데이터 추가

==> 이미 해당 인덱스에 데이터가 있어도, idx와 값을 적어서 추가하고, 기존 데이터는 하나씩 밀어짐.

- Map 타입의 변수.put( key값, value값 ) ; ==>데이터 추가

==> 기본적으로는 데이터 추가인데, 이미 있으면 밀리는게 아니라, 기존 데이터 위에 덮어씌워짐.

- List 타입의 변수.get( idx ) ; ==>데이터 추출

==> List는 순서가 있어서, .get( idx ) 로 원하는 값 추출가능. idx=0부터

- Map 타입의 변수.get( value값 ) ; ==>데이터 추출

==> 없으면 null값

- <set,list타입의> 변수.size( ); ==> 데이터 갯수
- < Map 타입의> 변수.size( ); ==> 데이터 갯수

- Map 타입의 변수.containKey( key값 ); ==> key값이 있는지?
- Map 타입의 변수.containValue( value값 ); ==> value값이 있는지?
- Map 타입의 변수.replace( key값, value값 ); ==> 추가가 아니고, 이미 있는거를 수정

- List 타입의 변수.remove( idx or "데이터" ) ; ==>데이터 삭제

==> 인덱스나 데이터만 입력해도, 데이터 삭제 가능

- Map 타입의 변수.remove( key값 ) ; ==> 데이터 삭제

==> key값, value값 둘다 삭제


Map타입의 변수.keySet() : 모든 key값들만, Set타입의 변수keys에 저장.
Set <String> keys = map.keySet();
// Set타입 keys에, Map타입 map의 key값들만을, <String>타입으로 저장.




프로젝트 11Day6_Map 의 클래스 MapTest


프로젝트 11Day6_Map 의 클래스 MapTest2

HashMap


프로젝트 11Day6_Map 의 클래스 MapTest2

Hashtable

프로젝트 11Day6_Map 의 클래스 MapTest4

HashMap ★★★


keyset ( ) 함수

key만 얻어오게 해주는 함수가 keyset ( )


프로젝트 11Day6_Map 의 클래스 MapTest4

★★★꼭 기억하기★★★

Set<String> keys = map.keySet( ) ;

// Set타입 keys에, Map타입 map의 'key값들만'을, <String>타입으로 저장


System.out.println(keys) ; // [one, two, three]

★★★★★★★★★★★★★★★★


프로젝트 11Day6_Map 의 클래스 Person, MapTest5
Person - 기본생성자,전체생성자, 겟셈, 투스트링 만들기.
private String name;
private int age;
private String address;
//멤버변수

MapTest5



프로젝트 11Day6_Map 의 클래스 MapTest6

★★꼭 기억하기★★

value값에, = ArrayList타입 list를, <Person>타입으로 저장



HashMap타입 map에, key값=String타입 : value값=list, list2 를 저장할건데,
list, list2 가 [ ArrayList <Person> ] 타입이니까,

HashMap타입 map에, = HashMap타입으로 새로 생성된 객체를 ,
< String , ArrayList <Person> >타입으로 저장...
이라고 적는거임

★★★위의 표부터 이 예제까지,  꼭 기억하기★★★





프로젝트 11Day6_Map 의 클래스 MapTest7

완전 복잡해보이는데, 회사에서 쓰일거로 생각하면 은근 쉬움

ArrayList 타입의 list '삼성 휴대폰 전세계 목록'
HashMap <String, Phone > 타입의 Korea(=map)  
< String, = key값 = 휴대폰종류. key="갤럭시", key="플립" ...
Phone> =value값= (key에 해당되는 휴대폰종류의)
Phone ( '폰 이름', '판매가' ', '용량' ) 생성자 객체
Phone ( String name, Long price, String capacity ) { // Phone 클래스의 생성자 중 하나.
this.name= name;
this.price=price;
this.capacity =capacity ;
}

ex)
Phone1( "갤럭시" , 500000 , "2GB" )
Phone2( "플립" , 900000 , "1GB" )

<HashMap> Korea
<String> key= "갤럭시" : <Phone> value= Phone( "A" , "a" , 2 )
<String> key= "플립" : <Phone> value= Phone( "B" , "b" , 3 )
저장.

근데 로컬라이징하면 판매하는 폰 종류가 다를 수도 있겠지?
<HashMap> Korea(=map)
<HashMap> Europe(=map)
<HashMap> Africa(=map) 를

<ArrayList> list = 전세계 휴대폰 목록에 넣음.

스타벅스로 해보면...?

ArrayList 타입의 list '스타벅스 라떼 메뉴'
HashMap <String, Latte > 타입의 Beverage Latte이라는 클래스가 따로 있겄지.. 이게 DTO?
< String, = key값 = 라떼 종류. key="바닐라라떼", key="소이라떼", key="돌체라떼"
Latte> =value값= (key에 해당되는 라떼종류의) '우유 종류' '소스 종류' '소스 펌프수'
Latte( String milk , String source , int num ) { // Latte 클래스의 생성자 중 하나.
this.milk=milk;
this.source=source;
this.num=num;
}
ex)
Latte( "바닐라라떼" , "바닐라 소스", 3 );
Latte( "소이라떼" , "바닐라 소스", 2 );
Latte( "돌체라떼" , "돌체 소스", 3 );

<HashMap> Beverage1
<String> key="바닐라라떼" : <Latte> value = Latte( "바닐라라떼" , "바닐라 소스", 3 );
<String> key="소이라떼" : <Latte> value = Latte( "소이라떼" , "바닐라 소스", 2 );
<String> key="돌체라떼" : <Latte> value = Latte( "돌체라떼" , "돌체 소스", 3 );
저장.

근데 라떼 말고 그냥 초코라떼랑, 그린티라떼도 있어서
걔네는 <HashMap> Beverage2에 저장

<HashMap> Beverage1 ,
<HashMap> Beverage2

<ArrayList> list에 담음... 이런거 아닐까;;



+ Iterator로도 만들어보기


프로젝트 11Day6_Map 의 클래스 MapTest8

Properties


프로젝트 11Day6_Map 의 클래스 MapTest9
책 [ 실습 10-13 ] properties이용해서 시스템 환경변수 얻기

Enumeration<?> enu=props.propertyNames( ) ; ★외우기★

//String String의 Properties에서 key값들만 가져오기
꼭 책에도 메모해두기