【问题标题】:Viewing the elements of a set by set.toArray() [duplicate]通过 set.toArray() 查看集合的元素 [重复]
【发布时间】:2021-10-10 05:27:51
【问题描述】:

有没有办法通过类似set.toArray()[i]i 是一个整数)来查看集合的元素?

【问题讨论】:

    标签: java arrays set element toarray


    【解决方案1】:

    Set转换为数组

    如果您要问是否可以将Set 转换为数组,然后访问该数组,答案是“是”。

    您显示的代码将返回Object 类型的对象,而不是特定类型。要获取特定类型,请使用此语法shown in the Javadoc

    String[] stringArray = mySetOfStrings.toArray( new String[0] ) ;
    String s = stringArray[ index ] ;  // Where `index` is an `int` variable.
    

    或者我们可以将其缩短为:

    String s = mySetOfStrings.toArray( new String[0] )[ index ] ;
    

    看到这个code run live at IdeOne.com

    注意:如果Set 接口的具体实现没有保证一定的迭代顺序,那么这段代码就没有意义了。如果您不知道元素的顺序,则无法合理地要求数组的第 n 个元素。

    Set没有订单

    如果您的意思是问是否有办法从Set 中获取“第 n 个”元素,例如第二个或第五个事件,答案是“否”。 根据定义,Set 没有顺序。因此没有第二个或第五个元素的概念。

    一些Set 实现甚至可能没有一致的、可重复的迭代顺序。它们可能会以一个顺序迭代一次,然后以不同的顺序迭代。

    排序集

    Java 确实提供了NavigableSet 及其前身SortedSet,它们都扩展了Set 接口。

    这些接口的实现使元素保持有序。当您迭代这样一个集合时,您会遇到按该排序顺序排列的元素。

    另外,EnumSet 会按照枚举对象的定义顺序迭代其元素。

    请注意,在这个示例代码中,二月份是如何添加到我们的集合 q1 中的第三个月份,但它被定义为枚举 java.time.Month 上的第二个对象。所以这个EnumSetJANUARY 之后和MARCH 之前使用FEBRUARY 对象进行迭代。

    Set< Month > q1 = EnumSet.of( Month.MARCH , Month.JANUARY , Month.FEBRUARY ) ;
    Month m = q1.toArray( new Month[0] )[ 1 ] ;  // Feb.
    

    看到code run live at IdeOne.com

    【讨论】:

    • 我不明白 DVing 这个答案背后的理由。如果是因为问题已被标记为重复,则 DVer 应考虑此答案中提供的有价值信息。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-29
    • 2010-10-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-04-15
    相关资源
    最近更新 更多