배열 의 장점 : 객체를 저장하고 검색하는데 가장 효율적이다. 사용하기 편하다.
단점 : 사이즈 변경이 불가하다.
Collection : 객체를 저장할 때 마다 크기를 자동으로 늘려준다.
Set계열 : 중복을 허용하지 않고, 추가되는 순서를 유지하지 않는다.
List 계열 중복을 허용하고, 추가되는 순서를 유지한다.
Map 계열 : 키와 값의 쌍으로 저장된다.(키와 값 모두 객체여야한다.)
java.util package에 있다.
generics
라는게 있다..
JAVA 4.xx 대와 JAVA 5.xx대의 차이가 굉장히 크다.
javase 1.4 api doc 문서 와 최신 문서를 보면 차이를 알 수 있다
www2.cs.duke.edu/csed/java/jdk1.4.2/docs/api/
docs.oracle.com/javase/10/docs/api/index.html?overview-summary.html
// 5버전 이전에는 이렇게 썼었다.
List list = new ArrayList();
//add(Object obj)
//각각의 다른 객체를 넣어줘도 컴파일타임에 문제가 없다.
list.add(new String("aa");
list.add(new Interger(100));
//근데 만약 이걸 돌리면?
// Integer를 String으로 타입캐스팅 불가하잖아?
// 그래서 타입캐스팅 익셉션 난다.(런타임에)
for(int i=0;i<list.size();i++){
String val = (String)list.get(i);
}
// 그래서 5.xx대 버전 이후부터는 generics 라는게 나왔다.
// 아래와 같이 쓰면, String 타입의 객체만 받겠다!
List<String> list = new ArrayList<String>();
// 7.xx대 버전 이후에서는 이렇게 썼다.
// 그래서 저 아래처럼 add로 넣어밨을때, 컴파일타임에 잡아낼 수 있다.
List<String> list = new ArrayList<>();
list.add(new String("aa");
list.add(new Interger(100));
// 이것도 가능하다.
for(String st : list){
System.out.println(st);
}
LIST 쓰는 방법!!
List<String> list = new ArrayList<>();
list.add("JAVA");
list.add("PYTHON");
list.add("JAVA");
// 2번째 인덱스에 들어있는 값을 가져옴
String value = list.get(2);
// for문쓰는방법2가지
for (String string : list) {
System.out.println(string);
}
for(int i = 0 ; i < list.size();i++) {
System.out.println(list.get(i));
}
이터레이터 쓰는 방법!
// iterator 쓰는 법
// iterator 선언!
Iterator<String> iterator = list.iterator();
// iterator 쓸 때는 보통 while 문 쓴다고한다.
while(iterator.hasNext()) {
value = iterator.next();
}
람다식으로 Iterable 로 쓰는법!
// iterable 쓰는 법
// (람다식으로 표현)
System.out.println("---- Iterable 사용, 람다식 Lambda");
list.forEach(val -> System.out.println(val));
System.out.println("---- Iterable Method Reference");
list.forEach(System.out::println);
function sayHello(msg){
return "Hello " + msg;
}
console.log(sayHello("자바스크립트"));
// arrow function, lambda expression
let sayHello2 = msg => "Hello " + msg;
console.log(sayHello2("람다"));
Set 쓰는법!
Set 에 객체를 저장하는데 Hash 를 사용하여 처리 속도가 빠르다.
hashCode() 및 equals()를 재정의 해야 중복 삽입 등을 막을 수 있다.
오직 하나의 NULL객체를 가질 수 있따.
Set<String> mySet = new HashSet<>();
mySet.add("자바");
mySet.add("파이썬");
mySet.add("부트");
for (String val : mySet) {
System.out.println(val);
}
Set<MyDate> dateSet = new HashSet<>();
MyDate myDate1 = new MyDate(2021,1,31);
MyDate myDate2 = new MyDate(2021,2,31);
MyDate myDate3 = new MyDate(2021,1,31);
dateSet.add(myDate1);
dateSet.add(myDate2);
dateSet.add(myDate3);
Iterator<MyDate> iterator = dateSet.iterator();
while(iterator.hasNext()) {
System.out.println(iterator.next());
}
아래와 같이 하면 Equals 함수 썼을 때 false 를 내뱉는다
Set<MyDate> dateSet = new HashSet<>();
MyDate myDate1 = new MyDate(2021,1,31);
MyDate myDate2 = new MyDate(2021,2,31);
MyDate myDate3 = new MyDate(2021,1,31);
System.out.println("myDate1 의 해시코드 = "+myDate1.hashCode());
System.out.println("myDate2 의 해시코드 = "+myDate2.hashCode());
System.out.println("myDate3 의 해시코드 = "+myDate3.hashCode());
System.out.println("equals = "+myDate1.equals(myDate3));
따라서 equals를 override해줘야한다.
@Override
public boolean equals(Object obj) {
boolean isEqual = false;
if(obj instanceof MyDate) {
MyDate date = (MyDate)obj;
if((this.year == date.year)&&(this.month == date.month)&&(this.day == date.day)) {
isEqual = true;
}
}
return isEqual;
}
hashcode override하는 것
@Override
public int hashCode() {
return this.year ^ this.month ^ this.day;
}
위 두개를자동생성 가능하다.
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + day;
result = prime * result + month;
result = prime * result + year;
return result;
}
@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
MyDate other = (MyDate) obj;
if (day != other.day)
return false;
if (month != other.month)
return false;
if (year != other.year)
return false;
return true;
}
맵 사용법!!!
중복된 키는 무시된다.
'Dev > [Java]' 카테고리의 다른 글
[JDBC] 1. 설치 및 환경설정, 이클립스와 연동 방법 (0) | 2021.01.21 |
---|---|
[JAVA] 7. Lambda 람다 (0) | 2021.01.20 |
[JAVA] 5. 인터페이스, static, final, abstract (0) | 2021.01.20 |
[JAVA] 4. Polymorphism 다형성 (0) | 2021.01.19 |
[JAVA] 3. ObjectOrientedProgramming(OOP), 예외처리 (0) | 2021.01.19 |