当前位置:  开发笔记 > 编程语言 > 正文

我应该使用什么样的Java集合?

如何解决《我应该使用什么样的Java集合?》经验,为你挑选了1个好方法。

我是Java的新手,我很难理解不同集合之间的差异.我有19个资源的清单.为每个资源分配一个十六进制颜色.我想获得一个随机资源及其颜色,并将该资源与我的代码一起使用.完成当前资源后,我想将其从列表中删除,以便只使用一定数量的资源.

我应该使用字典,地图还是哈希表?或者我失踪的任何其他人.



1> Nicolas Filo..:

您可以做的是将资源存储到a中List,然后通过Collections.shuffle(List list)或随机置换它shuffle(List list, Random rnd),最后调用iterator()结果列表以获取Iterator可以存储到成员字段中的实例,以便能够迭代您的列表(谢谢到hasNext()/ next())并在完成后删除您的资源remove().

这是一个使用Stringas资源的伪代码,只是为了表明这个想法:

// Create a read/write list (Arrays.asList returns a read-only list)
List resources = new ArrayList<>(Arrays.asList("1", "2", "3"));
System.out.printf("Initial state = %s%n", resources);
Collections.shuffle(resources);
System.out.printf("Permuted List = %s%n", resources);
Iterator iterator = resources.iterator();
if (iterator.hasNext()) {
    String resource = iterator.next();
    // do something
    iterator.remove();
    System.out.printf("After remove = %s%n", resources);
}

输出:

Initial state = [1, 2, 3]
Permuted List = [3, 1, 2]
After remove = [1, 2]

注意:这种方法在你的情况下是有意义的,因为你有一个小列表,请注意,如果你有一个大的列表,并且你打算只检索它的一小部分,你应该考虑使用a Random来随机获取下一个的索引element(使用nextInt(int bound)with list.size()as参数)获取(使用get(int index))和删除(使用remove(int index))而不是使用,Collections.shuffle(List list)因为它会导致开销.


ArrayList 不起作用,因为我需要将颜色(值)分配给资源(键)

是的,如果您使用List包含颜色和资源的包装类(例如,AbstractMap.SimpleImmutableEntry或仅包含自定义类),它可以工作.这很好,因为您似乎不需要按资源检索颜色.如果这样做,您可以简单地将Map资源作为键和颜色作为值并用于new ArrayList<>(map.keySet())初始化资源列表,然后您将能够应用此答案中先前提出的内容.

推荐阅读
保佑欣疼你的芯疼
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有