私はBucketMap
を反復処理し、すべてのkeys
を取得する必要がありますが、たとえばbuckets[i].next.next.next.key
のようなものに到達するには、ここで試したように手動で行う必要はありません。
public String[] getAllKeys() {
int j = 0; //index of string array "allkeys"
String allkeys[] = new String[8];
for(int i = 0; i < buckets.length; i++) { //iterates through the bucketmap
if(buckets[i] != null) { //checks wether bucket has a key and value
allkeys[j] = buckets[i].key; //adds key to allkeys
j++; // counts up the allkeys index after adding key
if(buckets[i].next != null) { //checks wether next has a key and value
allkeys[j] = buckets[i].next.key; //adds key to allkeys
j++;
}
}
}
return allkeys;
}
また、インデックスとして反復が行われた後に取得するj
のバージョンを使用してString[] allkeys
を初期化するにはどうすればよいですか?
基本的な使用方法としては、HashMapが最適です。イテレーターを使用するよりも簡単に反復処理する方法を示しました。
public static void main (String[] args) {
//a map with key type : String, value type : String
Map<String,String> mp = new HashMap<String,String>();
mp.put("John","Math"); mp.put("Jack","Math"); map.put("Jeff","History");
//3 differents ways to iterate over the map
for (String key : mp.keySet()){
//iterate over keys
System.out.println(key+" "+mp.get(key));
}
for (String value : mp.values()){
//iterate over values
System.out.println(value);
}
for (Entry<String,String> pair : mp.entrySet()){
//iterate over the pairs
System.out.println(pair.getKey()+" "+pair.getValue());
}
}
簡単な説明:
for (String name : mp.keySet()){
//Do Something
}
意味:「マップのキーからのすべての文字列に対して、私たちは何かをします。そして、各反復でキー 'name'を呼び出します(あなたが望むものなら何でもかまいません、それは変数です)
さあ :
public String[] getAllKeys(){
int i = 0;
String allkeys[] = new String[buckets.length];
KeyValue val = buckets[i];
//Look at the first one
if(val != null) {
allkeys[i] = val.key;
i++;
}
//Iterate until there is no next
while(val.next != null){
allkeys[i] = val.next.key;
val = val.next;
i++;
}
return allkeys;
}
これが役立つかどうかを確認し、
HashMap< String, String> map = new HashMap<>();
Set<String> keySet = map.keySet();
Iterator<String> iterator = keySet.iterator();
while(iterator.hasNext())
{
//iterate over keys
}
//or iterate over entryset
Iterator<Entry<String, String>> iterator2 = map.entrySet().iterator();
while(iterator2.hasNext())
{
Entry<String, String> next = iterator2.next();
//get key
next.getKey();
//get value
next.getValue();
}
Java 8では、Stream APIを使用することをお勧めします。
これにより、はるかに便利な方法でマップを反復処理できます。
public void iterateUsingStreamAPI(Map<String, Integer> map) {
map.entrySet().stream()
// ...
.forEach(e -> System.out.println(e.getKey() + ":" + e.getValue()));
}
Javaでのマップによる反復 に関するその他の例を確認してください。