728x90

Collections framework

컬렉션을 다루기 위한 표준화된 프로그래밍 방식

컬렉션이란 ?

-여러 객체(데이터) 를 모아 놓은 것을 의미

 

프레임워크 계층도

자바의 컬렉션 프레임워크는 java.util 패키지에 인터페이스와 추상 클래스로 구성된 복잡한 계층으로 되어 있다. 빈번히 사용되는 클래스 위주로 정리해 보면 다음과 같다

 

컬렉션 프레임웍의 핵심 인터페이스

 

1. List

순서(저장순서) 가 있는 데이터의 집합. 데이터의 중복을 허용한다

  • LinkedList
    - 양방향 포인터 구조로 데이터의 삽입, 삭제가 빈번할 경우 데이터의 위치정보만 수정하면 되기에 유용
    - 스택, 큐, 양방향 큐 등을 만들기 위한 용도로 쓰임
  • Vector
    - 과거에 대용량 처리를 위해 사용했으며, 내부에서 자동으로 동기화처리가 일어나 비교적 성능이 좋지 않고 무거워 잘 쓰이지 않음
  • ArrayList
    - 단방향 포인터 구조로 각 데이터에 대한 인덱스를 가지고 있어 조회 기능에 성능이 뛰어남

 

2. Set

순서를 유지하지 않는 데이터의 집합. 데이터의 중복을 허용하지 않는다 > 집합의 성질

  • HashSet
    - 가장빠른 임의 접근 속도
    - 순서를 예측할 수 없음
  • TreeSet
    - 정렬방법을 지정할 수 있음

 

3. Map

키와 값 쌍으로 이로어진 데이터의 집합

순서는 유지되지 않으며, 키는 중복을 허용하지 않고 값은 중복을 허용한다

  • Hashtable
    - HashMap보다는 느리지만 동기화 지원
    - null불가
  • HashMap
    - 중복과 순서가 허용되지 않으며 null값이 올 수 있다.
  • TreeMap
    - 정렬된 순서대로 키(Key)와 값(Value)을 저장하여 검색이 빠름

 

인터페이스 메서드 : 추가 / 삭제/ 검색이 가능하다

728x90

'JAVA' 카테고리의 다른 글

JAVA : substring 문자열 자르기  (0) 2023.08.16
JAVA : charAt() 사용법  (0) 2023.08.16
JAVA : 객체 지향 언어의 특징 & 장점, 단점  (0) 2023.05.26
JAVA : try catch 예외처리  (0) 2022.05.12
JAVA : 클래스, 클래스 구성요소  (0) 2021.07.09
728x90

[프로그래머스, LV.0] 수 조작하기 1, 수 조작하기 2 풀이

 

https://school.programmers.co.kr/learn/courses/30/lessons/181925

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

문제 설명


정수 배열 numLog가 주어집니다. 처음에 numLog[0]에서 부터 시작해 "w", "a", "s", "d"로 이루어진 문자열을 입력으로 받아 순서대로 다음과 같은 조작을 했다고 합시다.

"w" : 수에 1을 더한다.
"s" : 수에 1을 뺀다.
"d" : 수에 10을 더한다.
"a" : 수에 10을 뺀다.
그리고 매번 조작을 할 때마다 결괏값을 기록한 정수 배열이 numLog입니다. 즉, numLog[i]는 numLog[0]로부터 총 i번의 조작을 가한 결과가 저장되어 있습니다.

주어진 정수 배열 numLog에 대해 조작을 위해 입력받은 문자열을 return 하는 solution 함수를 완성해 주세요.

 

 

제한사항


2 ≤ numLog의 길이 ≤ 100,000
-100,000 ≤ numLog[0] ≤ 100,000
1 ≤ i ≤ numLog의 길이인 모든 i에 대해 |numLog[i] - numLog[i - 1]|의 값은 1 또는 10입니다.

입출력 예
numLog                                      result
[0, 1, 0, 10, 0, 1, 0, 10, 0, -1, -2, -1] "wsdawsdassw"

입출력 예 설명
입출력 예 #1

result인 "wsdawsdassw"를 따라 numLog[0]에서부터 시작해 조작을 하면 numLog의 값과 순서대로 일치합니다. 따라서 "wsdawsdassw"를 return 합니다.

 

 

풀이

 

class Solution {
    public String solution(int[] numLog) {
        String answer = "";
        StringBuilder sb = new StringBuilder();
        
        for(int i =0 ; i < numLog.length - 1; i ++ ){
           
            int diff = numLog[i + 1] - numLog[i];
            
            if(diff == 1){
                sb.append('w');
            }
            else if(diff == - 1){
                sb.append('s');
            }
            else if(diff ==  10){
                sb.append('d');
            }
            else if(diff == - 10){
                sb.append('a');
            }
        }
        
        return sb.toString();
    }
}
  • 배열 마지막 값을 비교하기 위해 i=0 부터 시작해서 length - 1 까지 for 루프를 수행하도록 함
  • 굳이 StringBuilder를 안쓰고 answer에 값을 더해도 될 것 같다
728x90
728x90

substring  

문자열을 자르기 위해서 사용되는 함수이다

 

substring  문법

2가지 방식으로 인자값을 받고 있으며 사용법은 아래와 같다

String substring(int startIndex); 시작인덱스 값 입력
String substring(int startIndex, int endIndex); 시작과 끝 입력

 

예시

첫번째는 bd

두번째는 efgggg 가 출력된다

 

인덱스 시작이 0이라는 것에 주의해야한다

728x90
728x90

charAt이란 

string 타입으로 받은 문자열을 char 타입으로 한 글자만 받는 함수로 Scanner와 같이 응용되서 사용이 됩니다

 

형식

문자열.charAt(인덱스) 

 

 

예제

 

 

length()와 함께 for문에서 활용하는 예제

 

 

728x90
728x90

JAVA를 객체지향 언어라고 하는데 객체지향언어란 무엇일까?

알아보기 앞서 객체가 무엇인지 부터 알아보자

 

※ 객체[Object]

객체란 주변에 있는 모든 사물을 말한다

 

 객체지향언어[Object-oriented Language]

 

 

 

객체지향언어의 4가지 특징

1. 캡슐화

데이터와 코드의 형태를 외부로부터 알 수없게 하고, 데이터의 구조와 역할, 기능을 하나의 캡슐형태로 만드는 방법

 

 

2. 상속

상위 클래스의 모든걸 하위 클래스가 모두 이어 받는것

3. 다형성

한 객체가 다른 여러형태(객체)로 재구성 되는 것

대표적인 예로 오버로드, 오버라이딩이 있다.

 

 

4.추상화

공통적인 속성과 기능을 추출하여 정의하는 것

 

 

객체지향언어의 장점

1. 재사용성
상속을 통해 프로그래밍시 코드의 재사용을 높일 수 있음.

2. 생산성 향상
잘 설계된 클래스를 만들어서 독립적인 객체를 사용함으로써 개발의 생산성을 향상시킬 수 있음.

3. 자연적인 모델링
우리 일상생활의 모습의 구조가 객체에 자연스럽게 녹아들어 있기 때문에 생각하고 있는 것을 그대로 자연스럽게 구현할 수 있다.


4. 유지보수의 우수성
프로그램 수정시 추가, 수정을 하더라도 캡슐화를 통해 주변 영향이 적기때문에 유지보수가 쉬워서 매우 경제적이라할
수 있다.

 

 

객체지향언어의 단점

1. 개발속도가 느린점
객체가 처리하려는 것에 대한 정확한 이해가 필요하기에 설계단계부터 많은 시간이 소모 된다.

2. 실행속도가 느린점

객체지향언어는 대체적으로 실행속도가 느리다.

3. 코딩난이도 상승
다중 상속이 지원되는 C++ 같은 경우에 너무 복잡해져 코딩의 난이도가 상승할 수 있다.

728x90

'JAVA' 카테고리의 다른 글

JAVA : substring 문자열 자르기  (0) 2023.08.16
JAVA : charAt() 사용법  (0) 2023.08.16
JAVA : try catch 예외처리  (0) 2022.05.12
JAVA : 클래스, 클래스 구성요소  (0) 2021.07.09
JAVA : method 메소드 정의, 형식  (0) 2021.07.09
728x90

[정의]

try catcth 문 예외처리 하기 위한 함수, 에러가 발생되도 코드가 중단되지 않도록 할 수 있음

예외 발생 시 : try -> catch -> finally
발생 하지 않은 경우  : try -> finally

 

[문법]
try{
}
catch(Exception e1){
//예외 1 발생 시 처리해야 할 문장
}
catch(Exception e2){
//예외 2 발생 시 처리해야 할 문장
}
finally{
//예외 발생여부에 상관없이 수행되어야 하는 문장(보통 정리코드를 넣는 데 사용 - 파일 닫기, 연결 닫기)
}

 

-> 예외 발생 이후의 문장은 수행 되지 않음

 

[예제]

try{

System.out.Printlin(1);

}
catch(Exception e1){

System.out.Printlin(0/0); //; 예외 발생!

System.out.Printlin(2);
}
catch(Exception e2){

System.out.Printlin(3);
}

결과 --> 1,3 이 출력

728x90

'JAVA' 카테고리의 다른 글

JAVA : charAt() 사용법  (0) 2023.08.16
JAVA : 객체 지향 언어의 특징 & 장점, 단점  (0) 2023.05.26
JAVA : 클래스, 클래스 구성요소  (0) 2021.07.09
JAVA : method 메소드 정의, 형식  (0) 2021.07.09
JAVA 배열  (0) 2021.07.01
728x90

클래스는 객체 생성을 위한 필드와 메소드(함수)를 정의하는 설계도이다.

클래스의 구성 요소 : 멤버변수, 생성자, 메소드


 * 멤버변수 = 값을 저장하는 역할
 String name;
 String age;
 int num; 
 ---> 변수 필드가 됨
  
 * 생성자 = 객체를 생성하는 역할/생성자 없이 객체 없음/초기화 시키는 역할/생성자는 여러개 생성가능 하다(오버로딩)

C1_concept(){}  <----- 생성자임 클래스 이름과 같아서, 기본생성자(아무내용없음)
C1_concept(String name){}<----- name 이름이 있는 생성자임
   
   
 * 메소드() << 괄호가 있는 것, 기능
   
  void print(){<---- 리턴값이 없음 = void, 리턴은 할 수 있음 (리턴=종료)
  }
   
 String getName(){ <--- 리턴 값이 있음 name으로 받음
      return name;
 }

 

 

728x90

'JAVA' 카테고리의 다른 글

JAVA : 객체 지향 언어의 특징 & 장점, 단점  (0) 2023.05.26
JAVA : try catch 예외처리  (0) 2022.05.12
JAVA : method 메소드 정의, 형식  (0) 2021.07.09
JAVA 배열  (0) 2021.07.01
JAVA : 반복문 for, while, do while  (0) 2021.06.29
728x90

-메소드란 ?

프로그램의 함수, 클래스 중의 하나이다

 

-메소드의 형식 :

리턴타입 메소드명(매개변수){

메소드 몸체

}

* 우리가 흔히 쓰는 아래 문법도 메소드이다. 여기서는 main이 메소드라고 할 수 있다.

*메소드는 리턴을 갖는데 리턴타입이 없을 경우 void를 사용한다.

-메소드의 호출과 정의

 

메소드(매개변수) {} ---> 메소드를 {}안에 정의한다. 매개변수는 여러개 일 수 있고 콤마로 구분한다.

메소드(입력값);   ---> 정의한 메소드를 호출한다. 입력값은 매개변수 개수에 맞게 콤마로 구분하여 입력한다.

 

예시 )

numbering 이라는 메소드는 고정되어 있고 (int limit) 이라는 매개변수를 통해 입력값을 수행한다.

호출할 때 5라는 값으로 고정된 메소드에서 호출할 수 있다.

728x90

'JAVA' 카테고리의 다른 글

JAVA : try catch 예외처리  (0) 2022.05.12
JAVA : 클래스, 클래스 구성요소  (0) 2021.07.09
JAVA 배열  (0) 2021.07.01
JAVA : 반복문 for, while, do while  (0) 2021.06.29
JAVA : 조건문 if, if else, else,switch  (0) 2021.06.29
728x90

배열은 여러개의 변수를 연속된 공간에 모아놓은 것이다.

 

문법

name ---> [a] [b] [c]
               0   1   2 
name[0] = 100;
name[1] = 50;
name[2] = 80;

생성하는 법 : 3가지 방법으로 데이터를 생성할 수 있다.
1.데이터타입[  ] 배열명 = new 데이터타입[방의 개수];

                   배열명 = new 데이터타입[방의 갯수];
2.데이터타입[  ] 배열명 = new 데이터타입[ ]{값1,2,3,,,,};
3.데이터타입[  ] 배열명 = {값1,2,3,,,,};

 

 

728x90
728x90

 

for문 : 끝조건을 알 때 주로 사용

for (시작;  끝조건;  증가연산)

{

   조건식이 true일때 반복되어 실행될 명령(반복문)

}

 

끝조건에 맞을 때까지 증가연산을 계속시행=반복

 

for( : )

전체출력 시 사용

 

while문 : true로 실행하여 false가 될 수 있는 조건문을 추가 해야함

 

while(조건식){

조건식이 true일때 반복되어 실행될 구문(반복문)

}

 

do while 문 : 

do { 
조건문이 true일때 반복실행시킬 명령(반복문)

} while (조건식)

 

*예시 - 1부터 100까지의 수 맞추기

*출력화면

반복문에 break를 통해 제어할 수 있음

continue는 제어 후 위로 다시 올라가서 실행함

728x90

'JAVA' 카테고리의 다른 글

JAVA : method 메소드 정의, 형식  (0) 2021.07.09
JAVA 배열  (0) 2021.07.01
JAVA : 조건문 if, if else, else,switch  (0) 2021.06.29
Java : 출력문 3가지 print, println, printf  (0) 2021.06.22
Java : 변수와 자료형  (0) 2021.06.17

+ Recent posts