>Java >java지도 시간 >Map in Java 컬렉션의 샘플 코드에 대한 자세한 설명

Map in Java 컬렉션의 샘플 코드에 대한 자세한 설명

黄舟
黄舟원래의
2017-03-13 17:42:081834검색

지도건축:



위 그림과 같이:

(1) Map은 매핑 인터페이스 이고 Map에 저장된 콘텐츠는 키-값 쌍(key-value)

입니다( 2) AbstractMap은 Map에서 을 상속받은 추상 클래스로 Map의 API 대부분을 구현합니다.

(3) SortedMap은 Map에서 상속된 인터페이스입니다. SortedMap의 콘텐츠는 정렬된 키-값 쌍이며 정렬 방법은 비교기를 통해 이루어집니다.

(4) NavigableMap은 "특정 객체 보다 크거나 같은 키-값 쌍 가져오기" 등과 같은 일련의 탐색 메서드가 있는 SortedMap에서 상속됩니다.

(5 ) TreeMap은 AbstractMap 및 NavigableMap 인터페이스에서 상속되므로 TreeMap의 콘텐츠는 순서가 지정된 키-값 쌍입니다.

(6) HashMap은 AbstractMap을 상속하고 내용도 키-값 쌍이지만 순서는 보장되지 않습니다.

(7) WeakHashMap은 AbstractMap을 상속하며, 키 유형이 HashMap과 다릅니다. WeakHashMap은 약한 키입니다.

(8) HashTable은 Directionary를 상속하고 Map도 구현하므로 키-값 쌍이지만 순서가 보장되지 않으며 스레드로부터 안전합니다.

요약:

HashMap은 "zipper 방식"을 기반으로 하는 해시 테이블입니다. 일반적으로 단일 스레드에서 사용됩니다. 키 값은 비어 있을 수 있으며 Iterator(iterator)를 지원합니다. ) 순회

Hashtable은 "zipper 방식"을 기반으로 구현된 해시 테이블이며 스레드로부터 안전하며 멀티 스레드 프로그램에서 사용할 수 있습니다. Iterator 순회와 열거라는 두 가지 순회 방법을 지원합니다.

WeakHashMap도 "zipper 방식" 기반의 해시 테이블이자 약한 키입니다.

TreeMap은 레드-블랙 트리를 통해 구현된 정렬된 해시 테이블이며, 키 값은 비워 둘 수 없습니다.


Java8 지도 인터페이스 소스 코드:

<p>public interface Map<K,V> {<br>    int size();//数目<br>    boolean isEmpty();//判断是否为空<br>    boolean containsKey(<a href="http://www.php.cn/wiki/60.html" target="_blank">Object</a> key);//判断是否含有某个key<br>    boolean containsValue(Object value);//判断是否含有某个值<br>    V get(Object key);//通过key获得value<br>    V put(K key, V value);//插入键值对<br>    V remove(Object key);//通过key<a href="http://www.php.cn/php/php-tp-remove.html" target="_blank">删除</a><br>    void put<a href="http://www.php.cn/wiki/1483.html" target="_blank">All</a>(Map<? <a href="http://www.php.cn/wiki/166.html" target="_blank">extends</a> K, ? extends V> m);//将一个Map插入<br>    void <a href="http://www.php.cn/wiki/917.html" target="_blank">clear</a>();//清空<br>    <a href="http://www.php.cn/code/8209.html" target="_blank">Set</a><K> keySet();//返回key集合<br>    Collection<V> values();//返回value<br>    Set<Map.Entry<K, V>> entrySet();//实体集合,Map的改变会影响到它<br>    interface Entry<K,V> {<br>        K getKey();//获得key<br>        V getValue();//获得value<br>        V setValue(V value);//设置值<br>        boolean equals(Object o);//判断对象是否相等<br>        int hashCode();//返回hashCode<br>        //比较器,比较两个key<br>        public <a href="http://www.php.cn/wiki/188.html" target="_blank">static</a> <K extends Comparable<? <a href="http://www.php.cn/code/8202.html" target="_blank">super</a> K>, V> Comparator<Map.Entry<K,V>> comparingByKey() {<br>            <a href="http://www.php.cn/wiki/135.html" target="_blank">return</a> (Comparator<Map.Entry<K, V>> & Serializable)<br>                    (c1, c2) -> c1.getKey().compareTo(c2.getKey());<br>        }<br>        //比较两个值<br>        public static <K, V extends Comparable<? super V>> Comparator<Map.Entry<K,V>> comparingByValue() {<br>            return (Comparator<Map.Entry<K, V>> & Serializable)<br>                    (c1, c2) -> c1.getValue().compareTo(c2.getValue());<br>        }<br>        //比较两个key<br>        public static <K, V> Comparator<Map.Entry<K, V>> comparingByKey(Comparator<? super K> cmp) {<br>            Objects.<a href="http://www.php.cn/wiki/136.html" target="_blank">require</a>Non<a href="http://www.php.cn/wiki/62.html" target="_blank">Null</a>(cmp);<br>            return (Comparator<Map.Entry<K, V>> & Serializable)<br>                    (c1, c2) -> cmp.compare(c1.getKey(), c2.getKey());<br>        }<br>        //比较两个值<br>        public static <K, V> Comparator<Map.Entry<K, V>> comparingByValue(Comparator<? super V> cmp) {<br>            Objects.requireNonNull(cmp);<br>            return (Comparator<Map.Entry<K, V>> & Serializable)<br>                    (c1, c2) -> cmp.compare(c1.getValue(), c2.getValue());<br>        }<br>    }<br>    //比较map是否相等<br>    boolean equals(Object o);<br>    int hashCode();//hashCode<br>    default V get<a href="http://www.php.cn/wiki/1360.html" target="_blank">OrD</a>efault(Object key, V defaultValue) {<br>        V v;<br>        return (((v = get(key)) != null) || containsKey(key))<br>                ? v<br>                : defaultValue;<br>    }<br>    default void <a href="http://www.php.cn/wiki/127.html" target="_blank">forEach</a>(BiConsumer<? super K, ? super V> <a href="http://www.php.cn/java/java-Action.html" target="_blank">action</a>) {<br>        Objects.requireNonNull(action);<br>        for (Map.Entry<K, V> entry : entrySet()) {<br>            K k;<br>            V v;<br>            try {<br>                k = entry.getKey();<br>                v = entry.getValue();<br>            } catch(IllegalState<a href="http://www.php.cn/wiki/265.html" target="_blank">Exception</a> ise) {<br>                // this usually means the entry is no longer in the map.<br>                throw <a href="http://www.php.cn/wiki/165.html" target="_blank">new</a> Con<a href="http://www.php.cn/wiki/1046.html" target="_blank">current</a>Mod<a href="http://www.php.cn/wiki/109.html" target="_blank">if</a>icationException(ise);<br>            }<br>            action.accept(k, v);<br>        }<br>    }<br>    default void replaceAll(BiFunction<? super K, ? super V, ? extends V> function) {<br>        Objects.requireNonNull(function);<br>        for (Map.Entry<K, V> entry : entrySet()) {<br>            K k;<br>            V v;<br>            try {<br>                k = entry.getKey();<br>                v = entry.getValue();<br>            } catch(IllegalStateException ise) {<br>                // this usually means the entry is no longer in the map.<br>                throw new ConcurrentModificationException(ise);<br>            }<br><br>            // ise thrown from function is not a cme.<br>            v = function.apply(k, v);<br><br>            try {<br>                entry.setValue(v);<br>            } catch(IllegalStateException ise) {<br>                // this usually means the entry is no longer in the map.<br>                throw new ConcurrentModificationException(ise);<br>            }<br>        }<br>    }<br>    default V putIfAbsent(K key, V value) {<br>        V v = get(key);<br>        if (v == null) {<br>            v = put(key, value);<br>        }<br><br>        return v;<br>    }<br>    //删除某个key和value对应的对象<br>    default boolean remove(Object key, Object value) {<br>        Object curValue = get(key);<br>        if (!Objects.equals(curValue, value) ||<br>                (curValue == null && !containsKey(key))) {<br>            return false;<br>        }<br>        remove(key);<br>        return true;<br>    }<br>    //将某个key和oldValue对应的值替换为newValue<br>    default boolean replace(K key, V oldValue, V newValue) {<br>        Object curValue = get(key);<br>        if (!Objects.equals(curValue, oldValue) ||<br>                (curValue == null && !containsKey(key))) {<br>            return false;<br>        }<br>        put(key, newValue);<br>        return true;<br>    }<br>    //替换key的值<br>    default V replace(K key, V value) {<br>        V curValue;<br>        if (((curValue = get(key)) != null) || containsKey(key)) {<br>            curValue = put(key, value);<br>        }<br>        return curValue;<br>    }<br>    default V computeIfAbsent(K key,<br>                              Function<? super K, ? extends V> mappingFunction) {<br>        Objects.requireNonNull(mappingFunction);<br>        V v;<br>        if ((v = get(key)) == null) {<br>            V newValue;<br>            if ((newValue = mappingFunction.apply(key)) != null) {<br>                put(key, newValue);<br>                return newValue;<br>            }<br>        }<br><br>        return v;<br>    }<br>    default V computeIfPresent(K key,<br>                               BiFunction<? super K, ? super V, ? extends V> remappingFunction) {<br>        Objects.requireNonNull(remappingFunction);<br>        V oldValue;<br>        if ((oldValue = get(key)) != null) {<br>            V newValue = remappingFunction.apply(key, oldValue);<br>            if (newValue != null) {<br>                put(key, newValue);<br>                return newValue;<br>            } <a href="http://www.php.cn/wiki/111.html" target="_blank">else</a> {<br>                remove(key);<br>                return null;<br>            }<br>        } else {<br>            return null;<br>        }<br>    }<br>    default V compute(K key,<br>                      BiFunction<? super K, ? super V, ? extends V> remappingFunction) {<br>        Objects.requireNonNull(remappingFunction);<br>        V oldValue = get(key);<br><br>        V newValue = remappingFunction.apply(key, oldValue);<br>        if (newValue == null) {<br>            // <a href="http://www.php.cn/wiki/1298.html" target="_blank">delete</a> mapping<br>            if (oldValue != null || containsKey(key)) {<br>                // something to remove<br>                remove(key);<br>                return null;<br>            } else {<br>                // nothing to do. Leave things as they were.<br>                return null;<br>            }<br>        } else {<br>            // add or replace old mapping<br>            put(key, newValue);<br>            return newValue;<br>        }<br>    }<br>    default V merge(K key, V value,<br>                    BiFunction<? super V, ? super V, ? extends V> remappingFunction) {<br>        Objects.requireNonNull(remappingFunction);<br>        Objects.requireNonNull(value);<br>        V oldValue = get(key);<br>        V newValue = (oldValue == null) ? value :<br>                remappingFunction.apply(oldValue, value);<br>        if(newValue == null) {<br>            remove(key);<br>        } else {<br>            put(key, newValue);<br>        }<br>        return newValue;<br>    }<br>}<br></p>

위 내용은 Map in Java 컬렉션의 샘플 코드에 대한 자세한 설명의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.