어떻게 직접 초기화하지 이스마프 (받을시간은 ipv6-literal. 방식)?

이 같은 다른 방법으로 Java 이스마프 초기화중 있나요?:

Map<String,String> test = 
    new HashMap<String, String>{"test":"test","test":"test"};

어떤 약간만이라도 올바른 구문에? 이에 대해 나는 아무것도 없습니다. 과연 그게 가능할까. 가장 짧은 / 가장 빠른 방법, 일부 &quot final/static&quot 동일팔레트에 찾고 있습니다. 지도를 만들 때 변경되지 않는 값을 미리 알고 있으며 맵.

질문에 대한 의견 (7)
해결책

Java 의 버전 9 이상:

예, 이제 이 가능하다. 자바 가상 머신 (jvm) 에 추가된 9 단순화할 수 있는 방법을 몇 가지 팩터리의 지도 작성.

// this works for up to 10 elements:
Map test1 = Map.of(
    "a", "b",
    "c", "d"
);

// this works for any number of elements:
Map test2 = Map.ofEntries(
    entry("a", "b"),
    entry("c", "d")
);

위의 예에서, 그냥 'test' 와 '' 을 모두 같은 다양한 방법을 통해 표현하고 있는 매핑해야 test2 가 있습니다. '방법' 이 맵에서 최대 10 개의 요소를 마피로프 정의되어 있는 반면, '방법' 등 제한값 마피오펜트리스 없을 것이다.

단, 이 경우 결과 매핑해야 불변 매핑해야 됩니다. 스케쳐내 매핑됩니까 변경 가능, 다시 '이 될 수 있습니다. (예: = new HashMap&lt &gt 무터블마프 복제본에 사용하여, (마피로프 (,, &quot a&quot b&quot ";)),'

(참조 [젶 269] (http://openjdk.java.net/jeps/269) 및 [Javadoc] (https://docs.oracle.com/javase/9/docs/api/java/util/Map.html))

최대 jave 버전 8:

모든 요소를 추가 아니요인 할 것이라고 합니다. 익명의 초기화 구문 만들 수 있는 하위 클래스를 사용할 수 있습니다 조금 짧다.

Map myMap = new HashMap() {{
        put("a", "b");
        put("c", "d");
    }};

그러나 경우에 따라 익명 하위 권능은하나님께 원치 않는 비헤이비어를 소개하십시오. 여기에는 예를 들면 다음과 같습니다.

  • 생성한 클래스 높이는 추가 메모리 및 시작 시 소비율에 소비율에, 디스크 공간
  • 이런 비정적 방법: 정보기술 (it) 은 생성 방법을 빛위에 객체에 대한 참조가 있다) 라고 불렸다. 즉, 외부 객체의 클래스를 생성할 수 없는 반면, 이에 따라 추가 메모리 맵 객체에는 쓰레기요 수집됩니다 여전히 referenced 차단

또 지도를 만들 수 있는 함수를 사용하여 초기화하려면 활성화하십시오 불쾌한 부작용을 피할 수 있지만, 초기화.

Map myMap = createMap();

private static Map createMap() {
    Map myMap = new HashMap();
    myMap.put("a", "b");
    myMap.put("c", "d");
    return myMap;
}
해설 (13)

이것은 하나의 방법입니다.

HashMap h = new HashMap() {{
    put("a","b");
}};

그러나 그 위의 코드는 이해하겠니 및 smartupdate 않도록 주의해야 합니다 (e-lab 은 새로운 클래스를 통해 상속됩니다 이스마프). 따라서 여기서 더 읽어야 합니다. 도브레브라체니시알이제이션 http://www.c2.com/cgi/wiki? 구아바, 또는 단순히 사용합니다.

Map left = ImmutableMap.of("a", 1, "b", 2, "c", 3);
해설 (13)

3rd party 허용하시겠습니까 경우 libs & # 39 사용할 수 있습니다. 구아바이무터블마프 충족합니다 같은 ipv6-literal. 간략하게:

Map test = ImmutableMap.of("k1", "v1", "k2", "v2");

이 방법은 최대 [5 키 / 값 쌍] [3], [구성기는] [4] 는 그렇지 않으면 사용할 수 있습니다.

Map test = ImmutableMap.builder()
    .put("k1", "v1")
    .put("k2", "v2")
    ...
    .build();

&lt br/>;

  • 참고로 Guava& # 39 의 이무터블마프이스마프 # 39 Java& 구축상의 다른 구현 (가장 유명한 것은 불가능한 과학 연구활동만 허용할 nulll 키 / 값)
  • 자세한 내용, 지켜보리니 Guava& # 39 의 사용자 안내선 기사에 대해 해당 불변 취합은 유형은상위

[3]: https://google.github.io/guava/releases/snapshot/api/docs/com/google/common/collect/ImmutableMap.html # k v v v v k k k k v - [4]: https://google.github.io/guava/releases/snapshot/api/docs/com/google/common/collect/ImmutableMap.html # 구성기는 -

해설 (4)

이 방법으로 직접판매용 없다 - Java 주님으로부터그에게 매핑해야 리터럴 (이들은 아직 - 내가 생각 대한 제안 jave 8).

어떤 사람들은 다음과 같습니다.

Map test = new HashMap(){{
       put("test","test"); put("test","test");}};

이렇게 하면, 이 값을 갖는 이스마프 익명의 의 하위 클래스 인스턴스 초기화 됩니다. (By the way, 지도 can& # 39, t 컨테인먼트하는 동일한 가치를 다시 한 번 두 번째 동일팔레트에 덮어써지며 첫 번째. # 39, ll 서로 다른 값을 사용할 i& 향후 참조용이므로.)

일반적인 방법으로 약간만이라도 이 (for a 로컬 변수):

Map test = new HashMap();
test.put("test","test");
test.put("test1","test2");

이 경우, 또는 'test' 매핑해야 가변적입니다 인스턴스입니다 초기화하지 받을시간은 구성자를 동일팔레트에 인스턴스입니다 초기화.

Map test = new HashMap();
{
    test.put("test","test");
    test.put("test1","test2");
}

'Test' 의 경우, 정적 클래스 변수 초기화 동일팔레트에 맵 () 은 초기화.

static Map test = new HashMap();
static {
    test.put("test","test");
    test.put("test1","test2");
}

절대 변하지 초기화하지 랩 후 원하는 경우에는 매핑됩니까 맵에 콜레스티언스트런모드리피아브레마프 (.) '에서' 합니다. 정적 초기화 너무 이 작업을 수행할 수 있습니다.

static Map test;
{
    Map temp = new HashMap();
    temp.put("test","test");
    temp.put("test1","test2");
    test = Collections.unmodifiableMap(temp);
}

(I& # 39 할 수 있다면, 이제 마지막 'test' m not 합니다. 시도해 보고 왔어요.)

해설 (0)
Map test = new HashMap()
{
    {
        put(key1, value1);
        put(key2, value2);
    }
};
해설 (8)

일반 자바 클래스를 사용하여 7 대체 및 바라리스: '이 메서드를 사용하여 클래스의 이스마프부이더 만듭니다. <! - 모든 언어: java-&gt.

public static HashMap build(String... data){
    HashMap result = new HashMap();

    if(data.length % 2 != 0) 
        throw new IllegalArgumentException("Odd number of arguments");        

    String key = null;
    Integer step = -1;

    for(String value : data){
        step++;
        switch(step % 2){
        case 0: 
            if(value == null)
                throw new IllegalArgumentException("Null key value"); 
            key = value;
            continue;
        case 1:             
            result.put(key, value);
            break;
        }
    }

    return result;
}

사용 방법은 다음과 같습니다.

HashMap data = HashMapBuilder.build("key1","value1","key2","value2");
해설 (2)