13

値またはキーを使用した反復を使用せずに、 Java からエントリを削除するにはどうすればよいですか。Map基本的に私のマップでは、それを削除するためにcontainsKey()thenを使用しています。map.remove()

4

9 に答える 9

19

削除したい要素のキーを使用して、マップからエントリを削除します。

map.remove("aKey");

要素のキーがわからない場合は、次のように反復して取得する必要があります。

public static <T, E> Set<T> getKeysByValue(Map<T, E> map, E value) {
     Set<T> keys = new HashSet<T>();
     for (Entry<T, E> entry : map.entrySet()) {
         if (value.equals(entry.getValue())) {
             keys.add(entry.getKey());
         }
     }
     return keys;
} 

これにより、マップ上で見つかったすべてのキーが返されます。

于 2013-10-17T23:08:15.353 に答える
11
Map<Integer, String> abcMap = new HashMap<Integer, String>();
abcMap.put(1,"A");
abcMap.put(2,"B");
abcMap.put(3,"C");

/// now for remove item
abcMap.remove(1);
// this will remove "A" from abcMap..
于 2013-10-17T23:11:30.740 に答える
4

使用Map#remove(Object key):

public V remove(Object key)

このキーのマッピングが存在する場合、このマップからこのキーのマッピングを削除します (オプションの操作)。より正式には、このマップに のようなキー k から値 v へのマッピングが含まれている場合(key==null ? k==null : key.equals(k))、そのマッピングは削除されます。(マップには、そのようなマッピングを最大 1 つ含めることができます。)

マップが以前にキーに関連付けた値、またはマップにこのキーのマッピングが含まれていない場合は null を返します。(実装が null 値をサポートしている場合、null 戻り値は、マップが以前に指定されたキーに null を関連付けていたことを示すこともできます。) 呼び出しが戻ると、マップには指定されたキーのマッピングが含まれなくなります。

基本的に、キーが存在しなくても remove を呼び出すことができます。その場合、暗黙のうちに失敗します (null を返します)。yourKey.equals(key)削除するキーが true の場合、オブジェクトは同一または同じである必要はありません。

于 2013-10-17T23:05:22.023 に答える
3
public Object remove(Object key)

remove方法でMap

javadocから:

このキーのマッピングが存在する場合、このマップからこのキーのマッピングを削除します (オプションの操作)。より正式には、このマップにキー k から値 v へのマッピングが含まれている場合、(key==null ? k==null : key.equals(k)),そのマッピングは削除されます。(マップには、そのようなマッピングを最大 1 つ含めることができます。)

マップが以前にキーに関連付けた値、またはnullマップにこのキーのマッピングが含まれていなかった場合は、値を返します。(null戻り値nullは、実装が値をサポートしている場合、マップが以前に指定されたキーに関連付けられていたことを示すこともできnullます。) 呼び出しが戻ると、マップには指定されたキーのマッピングが含まれなくなります。

パラメーター:

key - マッピングをマップから削除するキー。

戻り値:

指定されたキーに関連付けられた以前の値、またはキーnullのマッピングがなかった場合。

例:

Map<Integer, String> map=new HashMap<>();
    map.put(20, "stackOverflow");
    System.out.println(map.remove(20));

このコードは"stackOverflow"、つまり、指定されたキーに関連付けられた以前の値を出力します。それが役に立てば幸い。

于 2013-10-17T23:08:03.850 に答える
2

OPの質問に実際に答えた人は誰もいなかったようです。彼らは、イテレータを使用せずに、 「値またはキーを使用して」エントリを削除する方法を尋ねていました。もちろんremove(key)、キーがあれば機能しますが、を検索している場合は機能しません。

Alfredo の答えは、 の値側を検索するという点で最も近いものでしたMapが、イテレータを使用しています。

Java 8 のStreamAPI を使用したソリューションを次に示します。イテレータなし:

Map<K, V> newMap = map.entrySet().stream()
    .filter(entry -> !entry.getKey().equals(searchValue))
    .filter(entry -> !entry.getValue().equals(searchValue))
    .collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue));

(キーKV値の型を and に置き換えます。)

于 2015-11-10T13:54:28.460 に答える
1

キーを引数として取るMapremovemethodを使用します。元のオブジェクトは必要ありません。マップ内の既存のキーと等しいオブジェクトが必要であり、マップ内の既存のキーequalsと同じものを生成しhashCodeます。

于 2013-10-17T23:06:05.207 に答える
0
public static void main(String[] args) {
    //Constant.mapCustomer.remove("s");
     Map<String, String> mapCustomer=new HashMap<String, String> ();;
     mapCustomer.put("s","ss");
    System.out.println(mapCustomer.get("s"));
    mapCustomer.remove("s");
    System.out.println(mapCustomer.get("s"));
}
于 2017-08-24T10:06:51.143 に答える