2016-10-19 7 views
1

자바에서 불변의 트리 맵을 구현하려고합니다. 동일한 파트를 공유하면서 copy-on-write 스타일 수정이 가능합니다. 따라서 본질적으로 정확하게 ImmutableJS이 자바 스크립트 용으로 제공됩니다.Java 용 Immutable Tree Map?

위의 예에서
ImmutableTreeMap<String, String> map = new ImmutableTreeMap<>(); 
ImmutableTreeMap<String, String> map1 = map.put("hello", "world"); 
ImmutableTreeMap<String, String> map2 = map1.put("foo", "bar"); 
// the base maps should still remain the same 
assertEquals(0, map.size()); 
assertEquals(1, map1.size()); 

, map2가 저장 트리의 부분을 복사 할 것 : 사람이 ImmutableJS가 여기에 작동하는 방법에 익숙하지 않은 것을 일어나는 경우

내가 자바로 그것을 싶은 것이있다 hello -> world이면 해당 부분을 다시 사용합니다.

사용할 수있는 구현이 있습니까? 아니면 처음부터 새로 만들어야합니까?

+1

그것을 얻을하지 않는 JVM의 컴파일 Clojure의 또는 스칼라에서 정규 것들을 사용할 수 있습니다 왜 저를 위해지도를 복사해야합니까? 이것은 거의 동일합니다 :'map = new HashMap(); map.put ("hello", "world"); map1 = 새로운 HashMap (지도); –

+0

예,'map1 = new HashMap (map)'은'map'에서 데이터의 실제 사본을 생성한다는 것을 제외하고는 피하고 싶습니다. 가능한 경우'map1'은 데이터 구조를'map'과 공유해야합니다 (불변이므로). – Alan47

+1

찾고있는 용어는 _persistent_ 맵 구현입니다. 그걸 검색하면 도움이 될 것입니다. –

답변

2

'해시 배열 매핑 된 trie'라고도하는 '지속적'해시 맵을 찾고 있습니다.

'트리'는 'trie'데이터 구조와 동일하지 않습니다. , MAP1이 불변 일 때 :

당신은 paguro, pcollections 및 javaslang 프로젝트에서 포함 해 몇 가지 자바 HAMTs을 발견 할 것이다, 또는 당신은

+0

참으로. 나는 실제로 스스로 하나를 구현했다. 그것은 매우 흥미 있고 통찰력있는 운동이었습니다. – Alan47