if(조건식) {
// 조건식이 true일 때 수행될 문장들
}
if(조건식1){
//조건식1이 true일 때 수행될 문장들
}else if(조건식2){
//조건식2가 true일 때 수행될 문장들
}else if(조건식3){
//조건식3이 true일 때 수행될 문장들
}else{
//위의 모든 조건식들이 false일 때 수행될 문장들
}
{}
만 수행하고, 전체 if-else
문을 빠져나온다.// 하나의 조건식으로 여러 경우의 수를 처리할 수 있고, if문에 비해 처리시간이 더 짧다.
switch(조건식){
case 값1:
//조건식의 결과가 값1과 일치할 경우 수행될 문장들
break;
case 값2:
//조건식의 결과가 값2와 일치할 경우 수행될 문장들
break;
default:
//조건식의 결과와 일치하는 case문이 없을 때 수행될 문장들
}
JVM 13부터 기존 switch - case
의 문제점을 해결하기 위해 몇가지 개선점이 추가된 switch - case
를 사용할 수 있게 되었습니다.
case
yield
→
)//이전 방식
switch(score){
case 10 :
case 9 :
case 8 :
System.out.println("A");
break;
case 7 :
case 6 :
case 5 :
System.out.println("B");
break;
default :
System.out.println("C");
}
//JVM 13
switch(score){
case 10, 9, 8 :
System.out.println("A");
break;
case 7, 6, 5 :
System.out.println("B");
break;
default :
System.out.println("C");
}
switch
문 내에 사용하여 switch
문의 반환값을 갖게 합니다. 따라서 switch
문을 표현식으로 사용할 수 있습니다.
System.out.println(
switch(score){
case 10, 9, 8 :
yield "A";
case 7, 6, 5 :
yield "B";
default :
yield "C";
});
String str =
switch(score){
case 10, 9, 8 :
yield "A";
case 7, 6, 5 :
yield "B";
default :
yield "C";
}
case
내에 코드블럭을 사용할 수 있습니다.
화살표 연산자로 case
를 표현하여 표현식, 구문, 코드 블럭을 사용합니다.
String grade;
switch(score){
case 10, 9, 8 -> grade = "A";
case 7, 6, 5 -> grade = "B";
default -> grade = "C";
}
참고
https://docs.oracle.com/en/java/javase/13/language/switch-expressions.html
for(초기화;조건식;증감식){
// 조건식이 참일 경우 수행될 문장들
}
// example.
for(int i=0;i<10;i++){
System.out.print(i+" ");
}
// result.
// 0 1 2 3 4 5 6 7 8 9
for
문for(타입 변수명 : 배열 또는 컬렉션) {
// 반복할 문장
}
// example.
int[] nums = {1,2,3,4,5};
for (int num : nums){
System.out.print(num+" ");
}
// result.
// 1 2 3 4 5
while(조건식){
// 조건식이 참일 경우 수행될 문장들
}
do-while
문
while
문과 반대로 블럭 {}
을 먼저 수행한 후에 조건식을 평가한다. (최소 한 번은 실행된다.)do {
// 조건식이 참일 경우 수행될 문장들
} while (조건식);
for
문과 while
문은 서로 변환이 가능하다. 하지만 for
문과 달리 while
문의 조건식은 생략할 수 없다.for( ; ; ){ // 항상 true
// 수행할 코드
}
while() { // 조건식이 없으므로 에러 발생
// 수행할 코드
}
cf. break
문과 continue
문의 사용법
break
문은 자신이 포함된 가장 가까운 반복문을 벗어난다.continue
문은 아래의 수행문을 더 이상 수행하지 않고 다음 반복으로 넘어간다.반복문과 break, continue에 이름을 붙여 하나 이상의 반복문을 벗어날 수 있다.
loop1 :
while(true){
while(true){
//isTrue()가 true 이면 상위의 반복문으로 이동하여 반복을 계속 진행
//해당 루프의 출력 1 과 출력 2 모두 continue 됨
if(isTrue()) continue loop1;
System.out.println("출력1");
}
System.out.println("출력2");
}
Iterator는 Java의 Collection에 저장되어 있는 데이터를 읽어오는 방법을 표준화한 기술 중 하나이다.
hasNext(), next(), remove() 메소드를 이용해 데이터를 뽑아와 사용할 수 있다.
Set<String> set = new HashSet<>();
set.add("안녕");
set.add("hello");
set.add("world");
Iterator<String> it = set.iterator();
while(it.hasNext()){
//요소 출력 후 다음 요소로 이동
System.out.println(it.next());
it.remove(); //요소 삭제
}
LinkedList란 Collection 프레임워크의 일부이며 java.util 패키지에 소속되어 있습니다
이 클래스는 데이터가 연속된 위치에 저장되지 않고 모든 데이터가 데이터 부분과 주소 부분을 별도로 가지고 있다.
데이터는 포인터와 주소를 사용하여 연결한다.
ArrayList와 비교하면 각 데이터는 노드라 불리며 배열에서 자주 삽입, 삭제가 이루어지는 경우 빠르고
검색에 있어서는 ArrayList가 더 빠르다. -> LinkedList의 경우 순차탐색으로 진행하기 때문
위의 사진처럼 LinkedList는 데이터부분과 주소부분이 나눠져있어서 선으로 연결된 형태로 이어져있다.
@Override
public ListNode add(ListNode head, ListNode nodeToAdd, int position) {
ListNode node=head;
for(int i=0;i<position-1;i++){
node=node.next;
}
nodeToAdd.next=node.next;
node.next=nodeToAdd;
return head;
}
@Override
public ListNode remove(ListNode head, int positionToRemove) {
ListNode node=head;
if(positionToRemove==0){
ListNode deleteToNode=node;
head=node.next;
deleteToNode.next=null;
return deleteToNode;
}
for(int i=0;i<positionToRemove-1;i++){
node=node.next;
}
ListNode deleteNode=node.next;
node.next=deleteNode.next;
deleteNode.next=null;
return deleteNode;
}
@Override
public boolean contains(ListNode head, ListNode nodeToCheck) {
ListNode node=head;
while(node.next!=null){
if(node.next.data==nodeToCheck.data)
return true;
node=node.next;
}
return false;
}
순차적으로 탐색해 값 맞는걸 찾음
Stack의 특징
public class ArrayStack implements Stack{
int[] stack;
int top;
public ArrayStack(int size){
stack=new int[size];
top=-1;
}
@Override
public void push(int data) {
stack[++top]=data;
}
@Override
public int pop() {
if(top==-1) return top;
return stack[top--];
}
}
public class ListNodeStack implements Stack{
int top;
ListNode listNode;
public ListNodeStack(){
top=-1;
listNode=null;
}
@Override
public void push(int data) {
ListNode nextNode=new ListNode(data);
if(listNode==null){
listNode=new ListNode(data);
top++;
}else{
listNode=listNode.add(listNode,nextNode,++top);
}
}
@Override
public int pop() {
if(top==-1){
return top;
}
return listNode.remove(listNode,top--).data;
}
}
출처
https://github.com/Let-s-Study-Java/EssenceOfJava
https://www.notion.so/Live-Study-4-ca77be1de7674a73b473bf92abc4226a
https://coding-factory.tistory.com/601