【发布时间】:2021-10-10 05:27:51
【问题描述】:
有没有办法通过类似set.toArray()[i](i 是一个整数)来查看集合的元素?
【问题讨论】:
标签: java arrays set element toarray
有没有办法通过类似set.toArray()[i](i 是一个整数)来查看集合的元素?
【问题讨论】:
标签: java arrays set element toarray
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 上的第二个对象。所以这个EnumSet 在JANUARY 之后和MARCH 之前使用FEBRUARY 对象进行迭代。
Set< Month > q1 = EnumSet.of( Month.MARCH , Month.JANUARY , Month.FEBRUARY ) ;
Month m = q1.toArray( new Month[0] )[ 1 ] ; // Feb.
【讨论】: