loose
이로운 개발하기
loose
전체 방문자
오늘
어제
  • 전체 (204)
    • ☕ Java (24)
    • 📘 Effective Java (9)
    • 🍃 Spring (47)
    • 📖 ORM (9)
    • ☸️ Kubernetes (13)
    • 🐧 Linux (5)
    • 🐋 Docker (5)
    • 🛠️ CI & CD (7)
    • 🕸️ Web (6)
    • 🔗 Distributed System (3)
    • 📜 Js (10)
    • 📈 Database (11)
    • 🗂️ Etc (34)
    • 🧑 Chitchat (11)
    • 📒 문학 (9)
    • 👜 개인 공부 창고 (1)

공지사항

반응형

최근 글

최근 댓글

loose

이로운 개발하기

Java 문자열 메소드 속도 효율 및 차이
☕ Java

Java 문자열 메소드 속도 효율 및 차이

2022. 5. 12. 01:34
반응형

보통 문자열을 비교할 때는 Equals를 이용한다.

그래서 Equals를 활용한 문자열 비교를 많이 하게 되는데 여기서 일어나는 문제점을 알아보고자 한다.

long start, end; //경과 시간 체크를 위한 변수
String[] names = new String[6500000];
for(int i=0; i<names.length; i++) {
	names[i] = "홍 길동";
}

우선 650만개의 "홍 길동"을 배열에 삽입한다.

그리고 성이 "홍"으로 시작하는 사람을 찾는다고 할 때 방법이 여러 가지가 있다

 

substring

start = System.currentTimeMillis(); 
for(int i=0; i<names.length; i++) {  
	if(names[i].substring(0, 1).equals("홍")) {
	}
}
end = System.currentTimeMillis(); 
System.out.println( "실행 시간 : " + (end-start) );
//실행 시간 : 64

split

start = System.currentTimeMillis(); 
for(int i=0; i<names.length; i++) {  
	if(names[i].split(" ")[0].equals("홍")) {
	}
}
end = System.currentTimeMillis(); 
System.out.println( "실행 시간 : " + (end-start) );
//실행 시간 : 640

charAt

start = System.currentTimeMillis(); 
for(int i=0; i<names.length; i++) {  
	if(names[i].charAt(0) == '홍') {
	}
}
end = System.currentTimeMillis(); 
System.out.println( "실행 시간 : " + (end-start) );
//실행 시간 : 4

startsWith

start = System.currentTimeMillis(); 
for(int i=0; i<names.length; i++) {  
	if(names[i].startsWith("홍")) {
	}
}
end = System.currentTimeMillis(); 
System.out.println( "실행 시간 : " + (end-start) );
//실행 시간 : 6

 

위에 보는대로 실행시간이 4로 가장 짧은 charAt을 쓰는 것이 좋다.

 

그 외에도 이름에 "길"이 들어가는 사람을 찾을 수도 있다. 이럴 땐 indexOf를 사용할 수도 있다.

또 이름이 "홍 길동"인 사람을 찾을 수도 있다.

모든 메소드의 성능을 기억하기 보단 "charAt, indexOf, Equal, startWith가 subString, split보다 뛰어나다."라고 기억하는 편이 더 좋아보인다.

 

물론 앞에 4개의 메서드도 각각 속도가 다 다르겠지만 트래픽이 크게 발생하면서 자주 사용되는 API가 아니고서야 큰 문제는 없을 듯 하다.

또한 문자열 검사를 할 때는 부득이한 경우가 아니라면 문자열 처리는 지양한다라는 생각을 가지고 개발을 하면 될 듯하다.

 

728x90

'☕ Java' 카테고리의 다른 글

Optional의 orElse, orElseGet, orElseThrow 사용법  (0) 2022.06.06
Array.sort(), Collection.sort(), Comparable, Comparator 사용법  (0) 2022.05.15
Java 8 Stream 사용법  (0) 2022.05.10
Java 배열, List, Map, Set의 선언 방법과 차이  (0) 2022.05.09
JSP와 자바빈(JavaBean)  (0) 2022.02.15
    '☕ Java' 카테고리의 다른 글
    • Optional의 orElse, orElseGet, orElseThrow 사용법
    • Array.sort(), Collection.sort(), Comparable, Comparator 사용법
    • Java 8 Stream 사용법
    • Java 배열, List, Map, Set의 선언 방법과 차이
    loose
    loose
    불만하는 사람은 90명, 해결하는 사람은 9명, 리드하는 사람은 1명 음악과 낭만을 좋아합니다.
    hELLO. 티스토리 스킨을 소개합니다.
    제일 위로

    티스토리툴바