繁体   English   中英

Map.Entry <> Java

[英]Map.Entry<> java

我对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 ++版本。

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

旁注:该for循环也可能只循环遍历映射中的所有值,因为在此特定循环中从未使用过键。

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

希望这可以清除一切! 祝你好运

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM