2016-08-15 4 views
2

내 응용 프로그램에서 SharedPreferences 대신에 Hawk을 사용하고 있습니다. HashMap을 LinkedHashMap으로 변환/캐스팅하는 방법은 무엇입니까?

나는 그것을에서 LinkedHashMap를 저장하기 위해 노력하고있어,하지만 난 호크 에서 다시 당겨 어떤 이유로 그것은 정기적 HashMap 아닌 LinkedHashMap으로 반환합니다. 이 시점에서 나는 ClassCastExceptionHashMap으로 깨기 때문에 LinkedHashMap으로 곧장 돌릴 수 없다.

그럼 궁금한 점은 반환 된 HashMap을 어떻게 LinkedHashMap으로 변환 할 수 있습니까?

+1

도전 해 주셔서 감사합니다. 나는 조금 파기가 필요한 사소한 질문을 좋아합니다. –

+0

@DavidWasser, 모든 사람들이 괜찮은 질문이라고 생각한 것은 아니기 때문에 상세한 답변을 부탁드립니다. –

+1

나는 downvotes가 어디에서 왔는지 전혀 모른다. 그것은 실제로 나를 놀라게했다. –

답변

8

모든 답변에 저장된 객체의 유형이

LinkedHashMap<T> newMap = new LinkedHashMap<T>(hashmap); 

,하지만하지 않습니다 :

코드 샘플 원하는 결과를 얻으십시오 :-(

물론 LinkedHashMapHashMap에서 만들 수 있지만 gua가 아닙니다. LinkedHashMap은 원본과 동일한 순서로 표시됩니다.

LinkedHashMap은 영구 저장소로 저장 될 때 LinkedHashMap이 정렬되지 않은 일반 형식으로 저장 될 때 직렬화됩니다. Map은 개별 항목의 순서를 유지하지 않습니다. 그런 다음 영구 저장소에서 개체를 추출하면 일반 HashMap으로 반환되며 "순서"(처음에는 LinkedHashMap)를 잃었습니다. 그런 다음 HashMap에서 LinkedHashMap을 만들면 주문과 다를 수 있습니다.

올바르게하려면 정확하게 LinkedHashMap을 정렬 된 개체 배열로 변환하고이 정렬 된 배열을 영구 저장소에 저장해야합니다. 그런 다음 순서가 지정된 객체 배열을 영구 저장소에서 다시 읽고 올바른 순서로 LinkedHashMap을 다시 만들 수 있습니다. 기본적으로 사용자가 직접 LinkedHashMap을 직렬화 및 비 직렬화해야합니다.

자세한 내용은 my answer to this question을 참조하십시오.

+0

및이를 달성하기 위해이 코드 샘플을 제안합니다. http://stackoverflow.com/a/43142613/1855855 –

1

지도를 생성자 인수로 사용할 수 있으므로 새로운 LinkedHashMap을 만듭니다.

LinkedHashMap<Object> newMap = new LinkedHashMap<>(theHashMapReturnedFromHawk); 

Object이 필요합니다.

0

LinkedHashMap의 생성자 중 하나는 Map을 허용합니다. HashMap과 동일한 내용의 LinkedHashMap을 반환합니다. T 당신이 HashMap에서 LinkedHashMap 기술적으로 정확 만들 수 있다는 제안하는 HashMap

+1

@DavidWasser 나는 물었던 것을했다. 당신은 필요한 것을했습니다. –