2014-06-11 3 views
2

문자열에 문자를 추가하는 것은 O (1) 시간이 걸린다는 것을 알고 있습니다. 예 : -Java에서 문자열에 접두사 추가?

String S = "abc" 
S = S+'z'; 

String을 char로 연결하면 어떻게 되나요? 이게 가능할까요?

S = 'z'+S; 

그렇다면 시간이 얼마나 걸립니까? Java가 String S {O (n)}의 전체 내용을 복사하거나 메모리 {O (1)}에서 포인터를 조정합니까?

감사합니다.

+0

Java가 문자열 연결에 사용하는'StringBuilder' 구현을보십시오. –

+2

문자열에 문자를 추가 할 때 O (1) 시간이 걸릴 것이라고 확신하십니까? 문자열은 변경 불가능하다는 것을 기억하십시오. – awksp

+0

죄송합니다! 확실하지 않다! –

답변

0

연결 순서는 중요하지 않습니다. 최근 버전의 컴파일러에서는 (보통) StringBuilder를 사용하는 바이트 코드로 바뀝니다.

+0

그리고'StringBuilder'는 얼마나 효율적입니까? –

+0

두 가지 작업이 동일한 복잡성을 갖게된다는 것은 중요하지 않습니다. O (n) 또는 O (1)은 무엇입니까? –

+0

거의 Object []가 아닌 char []가 지원하는 ArrayList로 생각할 수 있습니다. 수행하는 작업 유형에 따라 매우 빠르고 효율적입니다. 시작 크기가 적절하지 않거나 끝에 다른 문자를 삽입하면 비용이 많이 듭니다. –

2

문자열을 변경할 수 없습니다. 따라서 접두어를 추가하는 연산은 O (1)이 될 수 없습니다. 그것은 적어도 S의 크기에 대해 선형 적이 지요. 그리고 ... O (f (N))> O (N) 인 곳은 O (f (N) O (N)을 의미합니다. 그냥 상식에서 이것에 대해 확실히.