예전에 어레이리스트써서 좀 연산많은거 프로젝트했는데 속도가 졸라느린거야 그래서 설마하고 get말고 어래이로 반환하고 직접접근했는데 수백배는빨라짐. get 직접접근맞음?? 책은그렇다는데 실제로뜯어본성님??
자바 잘하는 게이성들 arraylist get이 배열접근아닌것같은데??
익명(66.249)
2015-10-27 23:31
추천 0
댓글 16
다른 게시글
-
if문관련 질문 [22]흐린바다(1214qwer) | 15.10.27추천 0
-
당연히 메소드지 ㅋㅋㅋㅋㅋ [2]◕‿◕숙자✿✔(benzsookja) | 15.10.27추천 0
-
아마존 온사이트 하이어링 candidate 돼씀.ㅋ [11]네모(116.41) | 15.10.27추천 0
-
갇코세님있네misono(211.36) | 15.10.27추천 0
-
코세성 예전에 구체적구하는거 이거설명좀 [11]123(66.249) | 15.10.27추천 0
-
메서드가 맞는말이냐 메소드가 맞는말이냐? [7]아둔(220.117) | 15.10.27추천 0
-
갠적으로 김상형책 좋아함◕‿◕숙자✿✔(benzsookja) | 15.10.27추천 0
-
포인터헷갈림misono(211.36) | 15.10.27추천 0
-
오 노액션바 하니까 사라짐 ㅅㅅㅅㅅ ㄱㅅㄱㅅ◕‿◕숙자✿✔(benzsookja) | 15.10.27추천 0
-
윤성우 책은 참 좋은거같다 [4]흐린바다(1214qwer) | 15.10.27추천 1
어레이 리스트 도 결국 list type 이고, 이터레이터 반복 돌리면서 해당 포지션까지 가고가고 루핑 도는거야.
소위 말하는 cost 산정하게 된다면 get() 의 cost 는 O(n) 인거고, array 의 해당 인덱스 직접 접근은 O(1) 임.. 뭐 O(n) 자체가 그렇게 비싼 연산은 아니지만, 아무래도 n이 커지고 해당 연산이 루핑안에서 복잡하게 돈다면 O(1)보단 많이 비싸겠지..
어레이는 크기 한정으로 인해 리스트 타입에 비해 쓰기 불편하고, 관련 지원 public API도 없다보니, 편하게 쓰기에 좋은거지... 만약에 어느정도 API 도 필요하고, 메모리 제한에 타이트하지 않고 러프한 편인데 속도를 중시한다면 벡터나 맵 계열을 쓰는걸 추천. 그놈들도 접근 비용은 O(1) 이고, 관련 API들 퍼포먼스도 빠름
그치그치 근데 나도 혹시나해서 자바의정석 다시봤는데 배열식접근이래 내부자료구조도 리스트가아니고 배열이고
글쓴이 찢어죽여야하는부분임?
글쓴이가 맞아. 내가 개소리한거임
absList 랑 ArrayList 사이에 LinkedList 있는줄 암... arraylist 안에는 Object elementData[] 가 존재하고 get() 동작 시 ragne Checking 한 후에 array 의 인자에서 땡겨옴
근데왜 속도가 똥망인지 모르겠음 배열크기가너무컸나??
add 졸라 한 후에 시간 잰거야? 아님 add부터 시간잰거야?
자바 잘모르겠고 대충 짐작하자면 초창기 구현은 내부적으로 가변 배열 유지하면서 객체들의 참조를 저장하는 식이었다가 요즘 구현은 링크드 리스트로 바꼈나보지
add를 하는거까지 시간 잰거라면, arraylist가 최초 사이즈를 10으로 잡고 그거보다 커지면 새로 더 덩치 키워서 쑤셔넣는 구조라 좀 코스트가 큼.
에드는 이미다되있고 겟만하는상태였엉 가물가물한데 음.. 겟해서 다른곳으로 에드하고 삭제하는 이런연산이있었나벼... 그냥 맵쓸껄 등신마냥 그랬네
jdk 1.8이 많이 바뀌긴 했다고 해도 1.7까지 Object[] 였는데, 설마 그거 바꿀리가 없겠지...
add 들어가면 비싸짐. 걍 맵써 ㅋㅋㅋ
암튼 땡큐!
별말을. 해커랭크서 존나 대가리 굴리면서 욕질하다가 머리풀러 10년만에 디씨온거임