有没有一种方法可以通过键从哈希映射中随机选择值?
有没有一种方法可以通过键从哈希映射中随机选择值?
假设我有两个ImageButtons,一个HashMap和在drawable(资源文件)中放置的图片,这些图片作为值存储在HashMap中。
我需要使用Randomizer随机选择HashMap中的一个值,并将这个值(即图片)分配给ImageButton作为其背景。
例如,如果点击第一个按钮,第二个按钮的背景将会随机更改。
以下是我已经有的代码:
public class MainActivity extends Activity { final Resources res = getResources(); final Random random = new Random(); final ImageButton imgButt1 = (ImageButton) findViewById(R.id.imageButton1); final ImageButton imgButt2 = (ImageButton) findViewById(R.id.imageButton2); @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); Drawable coub1 = res.getDrawable(R.drawable.coub1); Drawable coub2 = res.getDrawable(R.drawable.coub2); Drawable coub3 = res.getDrawable(R.drawable.coub3); Drawable coub4 = res.getDrawable(R.drawable.coub4); Drawable coub5 = res.getDrawable(R.drawable.coub5); Drawable coub6 = res.getDrawable(R.drawable.coub6); Drawable coub7 = res.getDrawable(R.drawable.coub7); Drawable coub8 = res.getDrawable(R.drawable.coub8); Drawable coub9 = res.getDrawable(R.drawable.coub9); Drawable coub10 = res.getDrawable(R.drawable.coub10); final MapsomeHashMap = new HashMap (); someHashMap.put(1, coub1); someHashMap.put(2, coub2); someHashMap.put(3, coub3); someHashMap.put(4, coub4); someHashMap.put(5, coub5); someHashMap.put(6, coub6); someHashMap.put(7, coub7); someHashMap.put(8, coub8); someHashMap.put(9, coub9); someHashMap.put(10, coub1); imgButt1.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { Object[] values = someHashMap.values().toArray(); Object randomValue = values[random.nextInt(values.length)]; int drawableID = values.; imgButt2.setBackgroundResource(drawableID); } }); imgButt2.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { Object[] values = someHashMap.values().toArray(); Object randomValue = values[random.nextInt(values.length)]; int drawableID = myImages.getResourceId(randomInt, -1); imgButt1.setBackgroundResource(drawableID); } }); } }
有时候我们需要从一个HashMap中随机选择一个值,但是HashMap没有提供直接的方法来实现这个功能。在这种情况下,可以考虑使用其他方法来解决这个问题。
一种解决方法是完全放弃HashMap,而是使用一个int类型的数组来存储值。我们可以将要选择的值存储在数组中,并使用随机数来选择数组中的一个索引,然后获取对应的值。以下是一个示例代码:
int[] ids = {R.drawable.coub1, R.drawable.coub2, R.drawable.coub3, R.drawable.coub4, R.drawable.coub5, R.drawable.coub6, R.drawable.coub7, R.drawable.coub8, R.drawable.coub9, R.drawable.coub10}; // 当需要随机选择一个Drawable时 Drawable drawable = res.getDrawable(ids[random.nextInt(ids.length)]);
这段代码先创建了一个包含要选择的值的int数组ids。然后,使用Random类生成一个随机数,该随机数的范围为数组的长度。最后,通过使用随机数作为索引来获取数组中的值,从而实现了从HashMap中随机选择值的功能。
通过使用这种方法,我们可以绕过HashMap,直接从数组中选择随机值。这种方法更加简单和高效,特别适用于需要大量随机选择值的情况。
有时候我们需要从HashMap中随机选择一个键值对,但是HashMap并没有提供直接的方法来实现这个功能。但是我们可以通过将所有的键放入一个列表或者数组中,然后随机选择一个索引来实现随机选择键的功能。
以下是一种实现方式:
Listkeys = new ArrayList (someHashMap.keySet()); Integer randomKey = keys.get(random.nextInt(keys.size())); Object randomValue = someHashMap.get(randomKey);
上述代码中,首先创建一个ArrayList来存储HashMap中的所有键,然后通过随机生成一个索引来从列表中选择一个键,最后通过该键获取对应的值。
然而,上述代码中使用了HashMap的`keys()`方法来获取所有的键,但是实际上HashMap并没有提供`keys()`方法。这是因为在Java中,HashMap的键是唯一的,并且我们可以通过`keySet()`方法获取所有的键。
因此,我们可以将上述代码修改为:
Listkeys = new ArrayList (someHashMap.keySet()); Integer randomKey = keys.get(random.nextInt(keys.size())); Object randomValue = someHashMap.get(randomKey);
这样就可以实现从HashMap中随机选择一个键值对的需求了。