람다식 -> 매개변수를 갖고 있는 코드 블록 -> 익명 구현 객체
의 과정람다식 추상메소드 사용시, @FunctionalInterface
annotation 표시 해야함.
매개 타입은 런타임시에 대입값 따라 자동 인식함.(생략 가능)
하나의 매개변수만 있을 경우에는 ( )
생략 가능
하나의 실행문만 있다면 { }
생략 가능
매개변수 없다면 ( )
생략 불가
// lambda 방법1
fi = () -> {
String str = "method call";
System.out.println(str);
};
fi.method();
// lambda 방법2
fi = () -> {System.out.println("method call2");};
fi.method();
// lambda 방법3
fi = () -> System.out.println();
fi.method();```
{ }
에 return 문만 있을 경우, { }
생략 가능
// lambda 방법1
fi = (x) -> {
int result = x*5;
System.out.println(result);
};
fi.method(5);
// lambda 방법2
fi = (x) -> {System.out.println(x*5);};
fi.method(5);
// lambda 방법3
//추상메소드의 파라메터 갯수가 1개이면 ()괄호 제거 가능함.
fi = x -> System.out.println(x*5);
fi.method(5);```
추상메소드의 body가 return 키워드를 포함하면, return 키워드
와 { }
를 제거 가능함.
//main
MyFuntionalInterface fi;
//
fi = (x,y) -> {
int result = x+y;
return result;
};
System.out.println(fi.method(5, 2));
//
fi = (x,y) -> {return x+y;};
System.out.println(fi.method(5, 2));
//
fi = (x,y) -> x+y;
System.out.println(fi.method(5, 2));
//
fi = (x,y) -> sum(x,y);
System.out.println(fi.method(5, 2));
//sum
public static int sum(int x, int y) {return (x+y);}
배열(array)은 대량의 데이터를 변수로 선언하는 프로그래밍 방식임.
배열(array)의 단점은,
추가
삭제
조회
수정
하는데 시간이 많이 소요됨.컬렉션 프레임워크(collection framework)는 java.util pkg(패키지)에 포함됨.
인터페이스를 사용하여 정형화된 방법으로 다양한 컬렉션 클래스를 사용할 수 있음
컬렉션이란?
사전적 의미로는 객체를 수집하여 저장하는 것을 의미함.
framework는 라이브러리;고도의 여러가지 기능이 있는 라이브러리
spring famework(jsp library)
컬렉션 프레임워크에는 주요 인터페이스 List
Set
Map
이 있음
List
에는 ArrayList
Vector
LinkedList
클래스가 있음
Set
에는 HashSet
TreeSet
클래스가 있음
Map
은 컬렉션 인터페이스에 포함되지 않음. HashMap
Hashtable
TreeMap
Properties
클래스가 있음
List의 구현 클래스는 ArrayList
Vector
LinkedList
원소를 추가할 때, 기본적으로 맨 마지막 원소 다음에 추가함.
원소를 삭제하면, 해당 원소의 자리에 다음자리의 원소가 앞으로 당겨짐.(중간에 비어있는 자리가 없음.)
List 컬렉션의 주요 메소드 정리
// 스케너로 name에 이름들을 입력 받는 코드
// 이름 배열 출력
Iterator<String> it = a.iterator();
while (it.hasNext()) {
String name = it.next();
System.out.println("Iterator 사용 이름 : " + name);
}
max()
최대값, min()
최소값binarySearch()
원하는 원소의 찾아, 해당 원소의 index 리턴함.sort()
오름차순, reverse()
리스트 순서 역행disjoint()
두개의 리스트를 비교해 중복되지 않으면 true, 중복되면 falseInteger[] numbers = { 1123, 1412, 23, 44, 512132 };
List<Integer> list = Arrays.asList(numbers);
System.out.println("Collections.max(list) : " + Collections.max(list));
System.out.println("Collections.min(list) : " + Collections.min(list));
System.out.println("Collections.binarySearch(list) : " + Collections.binarySearch(list, 44));
Collections.sort(list); // 오름차순
System.out.println("오름차순 : "+list);
Collections.reverse(list); // 리스트 역행
System.out.println("리스트 역행 : "+list);
Integer[] numbers1 = { 1123, 1412, 23, 44, 512132 };
List<Integer> list1 = Arrays.asList(numbers1);
Integer[] numbers2 = { 123, 142, 3, 4, 5132 };
List<Integer> list2 = Arrays.asList(numbers2);
// 두 리스트의 중복확인
System.out.println(Collections.disjoint(list, list1)); // 중복 있음, false
System.out.println(Collections.disjoint(list1, list2)); // 중복 없음, true
Vector
는 스레드 동기화가 특징임Vector
에 접근해 객제를 추가
, 삭제
하더라도 스레드는 안전함.Vector<E>
: E는 Element의 데이터 타입을 의미함.// int[] v와 같은 표현
Vector<Integer> v = new Vector<Integer>();
v.add(5); // 마지막 원소 다음에 집어 넣음.
v.add(4);
v.add(-1);
for (int i = 0; i < v.size(); i++) {
int n = v.get(i); // v.get(i) == v[i]
System.out.println(n);
}