【问题标题】:Create String[] from HashMap values从 HashMap 值创建 String[]
【发布时间】:2013-12-19 14:29:42
【问题描述】:

有什么方法可以创建这样的东西:

Map<Integer, String> barHashMap= new HashMap<Integer, String>();
barHashMap.put(1, "bar");

String[] foo = new String[]{barHashMap.values()}
foo[0] // returns "bar";

【问题讨论】:

  • 您需要按特定顺序排列这些值吗?
  • 不....任何订单都可以。
  • barHashMap.values().toArray(new String[0])

标签: java string list hashmap


【解决方案1】:

将所有Map 值获取到Collection&lt;String&gt;。比将Collection&lt;String&gt; 转换为String[]

Collection<String> strList=barHashMap.values();
String[] foo=strList.toArray(new String[strList.size()]);

【讨论】:

  • 当我阅读规范时,没有必要创建具有“正确”大小的 String[] - 它仅用作模型。
  • @HotLicks:没有必要,但如果你很容易知道大小,它比传入一个将被忽略的数组更有效。
【解决方案2】:

调用方法Map.values,返回一个集合Collection&lt;V&gt; values()

您可以使用Collection 类的方法&lt;T&gt; T[] toArray(T[] a) 将值转换为数组。

试试这个:

    Map<Integer, String> barHashMap= new HashMap<Integer, String>();
    barHashMap.put(1, "bar");

==>

    String[] foo = new String[barHashMap.values().size()];
    barHashMap.values().toArray(foo);

Collection的toArray方法源码如下:

/**
 * Returns an array containing all of the elements in this collection;
 * the runtime type of the returned array is that of the specified array.
 * If the collection fits in the specified array, it is returned therein.
 * Otherwise, a new array is allocated with the runtime type of the
 * specified array and the size of this collection.
 *
 * <p>If this collection fits in the specified array with room to spare
 * (i.e., the array has more elements than this collection), the element
 * in the array immediately following the end of the collection is set to
 * <tt>null</tt>.  (This is useful in determining the length of this
 * collection <i>only</i> if the caller knows that this collection does
 * not contain any <tt>null</tt> elements.)
 *
 * <p>If this collection makes any guarantees as to what order its elements
 * are returned by its iterator, this method must return the elements in
 * the same order.
 *
 * <p>Like the {@link #toArray()} method, this method acts as bridge between
 * array-based and collection-based APIs.  Further, this method allows
 * precise control over the runtime type of the output array, and may,
 * under certain circumstances, be used to save allocation costs.
 *
 * <p>Suppose <tt>x</tt> is a collection known to contain only strings.
 * The following code can be used to dump the collection into a newly
 * allocated array of <tt>String</tt>:
 *
 * <pre>
 *     String[] y = x.toArray(new String[0]);</pre>
 *
 * Note that <tt>toArray(new Object[0])</tt> is identical in function to
 * <tt>toArray()</tt>.
 *
 * @param a the array into which the elements of this collection are to be
 *        stored, if it is big enough; otherwise, a new array of the same
 *        runtime type is allocated for this purpose.
 * @return an array containing all of the elements in this collection
 * @throws ArrayStoreException if the runtime type of the specified array
 *         is not a supertype of the runtime type of every element in
 *         this collection
 * @throws NullPointerException if the specified array is null
 */
<T> T[] toArray(T[] a);

【讨论】:

    猜你喜欢
    • 2019-09-30
    • 2021-09-23
    • 2014-08-31
    • 2013-05-27
    • 1970-01-01
    • 1970-01-01
    • 2016-03-10
    • 2020-03-22
    • 2013-10-05
    相关资源
    最近更新 更多