Map.Entry <> Java

时间:2019-01-31 16:19:56

标签: java c++ blockchain

我对Java一无所知,但是我在Java中找到了这个区块链指南,并且我一直试图理解和转换C ++中的代码(我的事情)。到目前为止,我的表现不错,但是我被困在这里。我无法理解循环和Map.Entry <>的东西。任何帮助都将受到赞赏。

我也是区块链新手。 本指南的链接为: https://medium.com/programmers-blockchain/creating-your-first-blockchain-with-java-part-2-transactions-2cdac335e0ce

如果有帮助。

代码如下:

public class Wallet {
public PrivateKey privateKey;
public PublicKey publicKey; 
public HashMap<String,TransactionOutput> UTXOs = new HashMap<String,TransactionOutput>();
public float getBalance() {
    float total = 0;    
    for (Map.Entry<String, TransactionOutput> item: NoobChain.UTXOs.entrySet()){
        TransactionOutput UTXO = item.getValue();
        if(UTXO.isMine(publicKey)) { //if output belongs to me ( if coins belong to me )
            UTXOs.put(UTXO.id,UTXO); //add it to our list of unspent transactions.
            total += UTXO.value ; 
        }
    }  
    return total;
}

这个for循环的功能超出了我的范围。如果有人可以提供此循环的简单C ++版本。

1 个答案:

答案 0 :(得分:0)

让我尝试解释一下这一点,而不是仅仅提供一个C ++代码: 在Java中,有一种称为Maps的数据结构,其中包含键/值对(您可能会猜到这部分)。 Map本身是不可迭代的,因此要遍历Map,您可以遍历其所有键(也称为键集),所有值或所有键-值对(也称为Entry集)。后者发生在你的榜样。 因此,在您的示例中,您具有String(键)和TransactionOutput对象(值)的映射。 for,在这些对之间循环,每对存储在变量项中。然后,从作为TransactionOutput对象的键值对(项目)中提取值部分。 那么这个对象与方法isMine验证(),如果这是真的,它被添加到另一个地图(卡列斯UTXOs)映射字符串(关键),以TransactionOutput对象。在这种情况下,字符串(映射中的键)似乎是TransactionObject的ID。 变量total增加了所添加的TrasactionOutput的值。

侧面说明:该for循环也可以循环遍历映射中的所有值,因为在此特定循环中从未使用过键。

现在,换句话说,它正在遍历TransactionOutputs映射,属于“ me”的映射放在一个单独的映射中,而属于“ me”的TrasactionOutput值的总数被返回。

希望这将清除的东西了! 祝好运, Teo