Hashtable vs HashMap vs LinkedHashMap

Posted 2007. 10. 8. 12:38
개발하다보면 걍 HashMap이나 Hashtable을 쓴다.
그런데 얘네들은 넣어줄때랑 꺼낼때 그 순서가 달라져 버린다.
도대체 누구 맘대로 또 어떤 기준으로 정렬순서를 바꾸는건지 모르겠다.
LinkedHashMap을 쓰면 그런 문제는 해결되는데...

그렇다면 HashMap과 LinkedHashMap과의 차이가 단지 저 정렬유무 하나뿐일까?
무언가 하나를 내어주고 받은게 LinkedHashMap일꺼 같은데...모르겠다ㅋㅋ
정렬순서를 기억하는 메모리를 추가했을 가능성이 있을꺼라는거...

암튼 위의것은 걍 한번 생각해본거고...

1. Hashtable vs HashMap은...
멀티쓰레드 환경에서 동기화를 지원하느냐 그렇지 않느냐다.
속도는 HashMap이 빠르지만 Thread Safe 하지 않기에 그 사용환경에 따라서 결정해야한다.

2. HashMap vs LinkedHashMap
HashMap의 자식격인 LinkedHashMap은 부모가 지원하지 않는 정렬순서를 기억하는 똑똑한 놈이다.

예제는 필요없겠다. 뭐 간단한거니까..


로그에 아래와 같은 에러메시지가 출력되고

2007-10-06 11:37:57,843 INFO [org.springframework.jdbc.support.SQLErrorCodesFactory] - <SQLErrorCodes loaded: [DB2, Derby, H2, HSQL, Informix, MS-SQL, MySQL, Oracle, PostgreSQL, Sybase]>
2007. 10. 6 오전 11:37:57 org.apache.catalina.core.StandardWrapperValve invoke
심각: Servlet.service() for servlet test_spring threw exception
java.lang.IllegalArgumentException
 at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
 at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
 at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
 at java.lang.reflect.Method.invoke(Unknown Source)
 at com.ibatis.sqlmap.engine.accessplan.PropertyAccessPlan.setProperties(PropertyAccessPlan.java:46)
 at com.ibatis.sqlmap.engine.exchange.JavaBeanDataExchange.setData(JavaBeanDataExchange.java:112)
 at com.ibatis.sqlmap.engine.mapping.result.BasicResultMap.setResultObjectValues(BasicResultMap.java:373)
 at com.ibatis.sqlmap.engine.mapping.statement.RowHandlerCallback.handleResultObject(RowHandlerCallback.java:64)
 at com.ibatis.sqlmap.engine.execution.SqlExecutor.handleResults(SqlExecutor.java:382)
 at com.ibatis.sqlmap.engine.execution.SqlExecutor.handleMultipleResults(SqlExecutor.java:301)
 at com.ibatis.sqlmap.engine.execution.SqlExecutor.executeQuery(SqlExecutor.java:190)
....

화면엔...
Error setting property 'setXXX' of 어쩌구 저쩌구 나오는 경우...의 대부분은
일종의 NullPointerException이다.

<resultMap ... 하위의
<property 에 nullValue를 처리해주지 않은 곳에 null이 들어갈 경우 발생한다.

<resultMap class="test.Member" id="memberResult" >
  <result property="id" column="id" />
  <result property="name" column="name"/>
<result property="age" column="age" nullValue="0"/>

테이블 컬럼에 not null이 아닌 항목은 위와 같이 nullValue처리를 꼭 해주어야 한다는 사실..




이클립스 단축키 Ctrl+Alt+i

Posted 2007. 10. 5. 17:25

메소드의 처음과 끝에 시작과 끝을 알리는 로그를 자동으로 삽입해준다.

사용자 삽입 이미지


해당 클래스에서 Ctrl+Alt+i 단축키를 누르면 Preview XXXXX.java 라는 타이틀과 함께
좌우로 나눠진 두개의 창이 나타난다.
왼쪽은 원본, 오른쪽은 추가될 로그를 미리보기하는...
하단의 Finish를 클릭하면 해당 메소드 처음과 끝에 로그가 추가된다. 매번 손가락 아프게 코딩할 필요없넹...



« PREV : 1 : ··· : 54 : 55 : 56 : 57 : 58 : 59 : 60 : 61 : NEXT »