public void Phone(){
String phone = "아이폰";
System.out.println(phone);
}
// 방법 1
() -> {
String phone = "아이폰";
System.out.println(phone);
}
public void Phone(String phone){
System.out.println(phone);
}
// 방법 2
phone -> System.out.println(phone)
public int sum (int x, int y){
return x + y;
}
// 방법 3
(x, y) -> x + y
람다식은 (전달값1, 전달값2, ...) -> { 코드 }와 같이 사용할 수 있다.
접근제어자 반환타입 메소드명은 생략 가능하다.
전달값이 1개일 경우 괄호도 생략 가능하며, 전달값의 타입도 생략 가능하다. (중괄호와 세미콜론도 생략 가능)
return이 있을 경우 중괄호는 생략할 수 없다. (return을 제외하면 중괄호 생략 가능 자동으로 return 해줌)
클래스 내에서 클래스를 정의할 수 있으며, 클래스 내부에 정의 되기 때문에 내부 클래스라고도 한다.
간단한 기능을가진 클래스를 임시로 정의하고 사용할 때 편리하고,
클래스를 따로 정의하지 않고도 필요한 동작을 구현할 수 있어 코드의 가독성과 유지보수에 편리하다는 장점이있다.
[익명클래스 선언 방법]
<방법 1>
public static void main(String[] args) {
Phone phone = new Phone(){
@Override
public void type(String type){
super.type(type);
}
};
phone.type("아이폰");
}
class Phone{
public void type(String type){
System.out.println("이 휴대폰의 기종은 " + type + " 입니다.");
}
}
<방법 2>
public static void main(String[] args) {
HowToMadePasta pasta = madePasta();
pasta.made();
// 클래스안에서 익명 클래스 선언
private static HowToMadePasta madePasta(){
return new HowToMadePasta(){
@Override
public void made(){
System.out.println("파스타 레시피 입니다.");
}
}
}
}
// 클래스 생성
abstract class HowToMadePasta{
public abstract void made();
}
<부모클래스 혹은 인터페이스> 변수명 = new <부모클래스 혹은 인터페이스>() {
// 익명 클래스 내용
} ;
위와 같이 선언하여 사용할 수 있다. 중괄호 내부에는 부모클래스 또는 인터페이스의 메서드를 오버라이드한다.
정수가 담긴 리스트num_list가 주어질 때, 모든 원소들의 곱이 모든 원소들의 합의 제곱보다 작으면 1을 크면 0을 return하도록 solution 함수를 완성해주세요.
[입출력 예]
num_list
result
[3, 4, 5, 2, 1]
1
[5, 7, 8, 3]
0
[차근 차근 생각해보기]
num_list를 돌면서 num_list의 원소를 곱해주고 더해준다.
sum은 제곱이 되어야 하기 때문에 제곱으로 만들어준 후
multiple이 sum보다 작다면 1을 return하고 크다면 0을 리턴한다.
[코드]
<수정 전>
class Solution {
public int solution(int[] num_list) {
int answer = 0;
int multiple = 1;
int sum = 0;
for(int i : num_list){
multiple *= i;
sum += i;
}
sum = (int)Math.pow(sum, 2);
if(multiple < sum){
answer = 1;
}else{
answer = 0;
}
return answer;
}
}
<수정 후>
class Solution {
public int solution(int[] num_list) {
int multiple = 1;
int sum = 0;
for(int i : num_list){
multiple *= i;
sum += i;
}
sum = (int)Math.pow(sum, 2);
return multiple < sum ? 1 : 0;
}
}
[반성할 점]
이 문제는 이틀 동안 풀지 못했다..계속 오류가 나서 Intellij에서 디버그를 돌려보았고
multiple이 0이 되었다. 그럴 수 밖에 없었다.. 처음에 multiple을 선언할때 int multiple = 0;으로하였기 때문에
아무리 곱해도 0이 나올수 밖에 없었다. 그래서 multiple을 1로 초기화 한 뒤 실행해보니 잘 작동하였다.
하지만 불필요한 코드가 너무 많은 것 같아 어떻게 줄여볼까 생각하던 중 삼항 연산자가 생각 났다.
삼항연산자는 (조건문) ? 참 : 거짓으로 조건문이 참일 경우 참의 값이 나오고 거짓일 경우 거짓의 값이 나오는 것이다.
그래서 multiple이 sum보다 작으면 참이기 때문에 1을 return하고 거짓일 경우 0을 return 하도록 하였다.
public static void main(String[] args) {
List<String> list = new ArrayList<>();
list.add("자바");
list.add("파이썬");
Iterator<String> itertator = list.iterator();
}
[Iterator의 3가지 함수 ]
public static void main(String[] args) {
List<String> list = new ArrayList<>();
list.add("자바");
list.add("X");
list.add("파이썬");
Iterator<String> iterator = list.iterator();
while(iterator.hasNext()){
String s = iterator.next();
if (s.contains("X")) {
iterator.remove(); // 해당 커서에 위치하는 데이터 삭제
}
}
iterator = list.iterator(); // 커서를 맨 처음으로 이동
while(iterator.hasNext()){
System.out.println(iterator.next()); // 다음 데이터로 이동
}
}
public static void main(String[] args) {
HashMap<String, Integer> map = new HashMap<>();
HashMap<String, String> map = new HashMap<>();
}
HashMap<데이터 타입, 데이터 타입> 변수명 = new HashMap<>()으로 선언할 수 있다.
[HashMap데이터 추가]
public static void main(String[] args) {
HashMap<String, Integer> map = new HashMap<>();
// 데이터 추가
map.put("아메리카노", 3000);
map.put("라떼", 4000);
}
put(key, value)를 사용하여 값을 추가할 수 있다.
선언한 타입에 맞는 데이터만 추가할 수 있다.
같은 키의 값을 추가 한다면 마지막에 넣은 vlaue로 변경된다.
[HashMap데이터 조회]
public static void main(String[] args) {
HashMap<String, Integer> map = new HashMap<>();
// 데이터 추가
map.put("아메리카노", 3000);
map.put("라떼", 4000);
System.out.println("아메리카노의 가격 : " + map.get("아메리카노"));
System.out.println("라떼의 가격 : " + map.get("라떼"));
// Key 확인
for (String key : map.keySet()) {
System.out.println(key);
}
// Value 확인
for (int value : map.values()) {
System.out.println(value);
}
// 키와 값 동시에 확인하기
for (String key : map.keySet()) {
System.out.println("키 : " + key + "값 : " + map.get(key));
}
}
get(key)를 입력하면 key에 맞는 value가 출력 된다.
keyset(), values()를 사용하여 key와 vlaue를 확인 할 수 있다.
[HashMap데이터 삭제]
public static void main(String[] args) {
HashMap<String, Integer> map = new HashMap<>();
// 데이터 추가
map.put("아메리카노", 3000);
map.put("라떼", 4000);
// 데이터 삭제
map.remove("아메리카노");
map.clear();
}
remove(key)로 key를 삭제할 수 있다.
clear()를 사용하여모든 키값들을 삭제할 수 있다.
[HashMap크기 구하기]
public static void main(String[] args) {
HashMap<String, Integer> map = new HashMap<>();
// 데이터 추가
map.put("아메리카노", 3000);
map.put("라떼", 4000);
// 크기 구하기
System.out.println(map.size());
}
public static void main(String[] args) {
HashSet<String> set = new HashSet<>();
}
HashSet<데이터 타입> 변수명 = new HashSet<>()으로 선언할 수 있다.
[HashSet데이터 추가]
public static void main(String[] args) {
HashSet<String> set = new HashSet<>();
// 데이터 추가
set.add("자바");
set.add("파이썬");
}
add()를 사용하여 값을 추가할 수 있다.
지정한 타입에 맞 데이터만 추가할 수 있다.
[HashSet데이터 조회]
public static void main(String[] args) {
HashSet<String> set = new HashSet<>();
// 데이터 추가
set.add("자바");
set.add("파이썬");
// 데이터 조회
Sysetm.out.println(set);
for(String s : set){
Sysetm.out.println(s);
}
}
단순 출력문을 이용하여 데이터를 출력할 수 있다. = > 결과 : [자바, 파이썬]
반복문을 이용하여 데이터를 조회할 수 있다.
[HashSet데이터 삭제]
public static void main(String[] args) {
HashSet<String> set = new HashSet<>();
// 데이터 추가
set.add("자바");
set.add("파이썬");
// 데이터 삭제
set.remove("파이썬");
set.clear();
}
remove(value)로 값을 직접 입력하여 삭제할 수 있다.
clear()를 사용하여 값 전체를 삭제할 수 있다.
[HashSet데이터 검색하기]
public static void main(String[] args) {
HashSet<String> set = new HashSet<>();
// 데이터 추가
set.add("자바");
set.add("파이썬");
// 데이터 검색
if(list.contains("자바")){
System.out.println("글자 검색하기");
}
}
contains()를 사용하여 원하는 데이터를 검색할 수 있다.
[HashSet크기 구하기]
public static void main(String[] args) {
HashSet<String> set = new HashSet<>();
// 데이터 추가
set.add("자바");
set.add("파이썬");
// 크기 구하기
System.out.println(set.size());
}
ArrayList는 검색이 많은 경우에 사용되고, LinkedList는 데이터의 추가 / 삭제가 많을 경우 사용된다.
(예시) 의자 없이 사람들이 손을 잡고 있는데 중간에 사람이 들어가려하면 잡고 있던 손을 놓고 그 자리로 들어갈 수 있다.
[LinkedList선언 방법]
public static void main(String[] args) {
LinkedList<String> list = new LinkedList<>();
}
<> 안에는 Integer, String, Character, Student, Phone 등과 같은 다양한 타입이 들어 올 수 있다.
[LinkedList데이터 추가]
public static void main(String[] args) {
LinkedList<String> list = new LinkedList<>();
// 데이터 추가
list.add("자바");
list.add("파이썬");
list.addFrist("C언어");
list.addLast("자바스크립트");
}
add(Object)를 사용하여 인덱스 마지막에 데이터를 추가한다.
add(Object, index)를 사용하여 지정한 인덱스에 값을 추가할 수 있다.
addFirst()를 사용하여 첫번째에 데이터를 추가할 수 있다.
addLast()를 사용하여 마지막에 데이터를 추가할 수 있다.
[LinkedList데이터 조회]
public static void main(String[] args) {
LinkedList<String> list = new LinkedList<>();
// 데이터 추가
list.add("자바");
list.add("파이썬");
// 데이터 조회
System.out.println(list.get(0));
System.out.println(list.get(1));
System.out.println(list.getFirst());
System.out.println(list.getLast());
}
get(index)를 사용하여 해당 인덱스의 데이터를 조회할 수 있다.
getFrist()를 사용하여 첫번째 데이터를 조회할 수 있다.
getLast()를 사용하여 마지막 데이터를 조회할 수 있다.
반복문을 사용하여 해당 인덱스 혹은 전체 데이터를 조회할 수 있다.
[LinkedList데이터 삭제]
public static void main(String[] args) {
LinkedList<String> list = new LinkedList<>();
// 데이터 추가
list.add(1);
list.add(2);
// 데이터 삭제
list.remove(1);
list.clear();
list.removeFirst(); // 처음 데이터
list.removeLast(); // 마지막 데이터
}
remove()를 사용하여 인덱스 혹은 값을 직접 입력하여 삭제할 수 있다.
removeFirst()를 사용하여 처음 데이터를 삭제할 수 있다.
removeLast()를 사용하여 마지막 데이터를 삭제할 수 있다.
clear()를 사용하여 값 전체를 삭제할 수 있다.
[LinkedList데이터 변경]
public static void main(String[] args) {
LinkedList<String> list = new LinkedList<>();
// 데이터 추가
list.add(1);
list.add(2);
// 데이터 변경
list.set(0, 3);
list.set(1, 5);
}
set(index, Object)를 사용하여 값을 변경할 수 있다.
데이터를 변경하려면 해당 데이터의 인덱스를 알아야 한다.
[LinkedList데이터 검색하기]
public static void main(String[] args) {
LinkedList<String> list = new LinkedList<>();
// 데이터 추가
list.add("자바");
list.add("파이썬");
// 데이터 검색
if(list.contains("자바")){
System.out.println("글자 검색하기");
}
}
contains()를 사용하여 원하는 데이터를 검색할 수 있다.
[LinkedList 크기 구하기]
public static void main(String[] args) {
LinkedList<String> list = new LinkedList<>();
// 데이터 추가
list.add("자바");
list.add("파이썬");
// 크기 구하기
System.out.println(list.size());
}