如何将TreeSet转换为数组?如何将TreeSet<String>转为String[]?
嘿,这两个TreeSet转数组的问题我熟,给你拆解清楚,附完整示例:
1. 如何将TreeSet转换为数组?
TreeSet实现了Java的Collection接口,所以可以直接用接口提供的toArray()方法,有两种常用方式:
方式1:无参
toArray()返回Object数组
这个方法会返回一个Object[]类型的数组,适合不需要特定类型的场景,示例代码:import java.util.TreeSet; public class TreeSetToArrayExample { public static void main(String[] args) { TreeSet<Integer> numbers = new TreeSet<>(); numbers.add(3); numbers.add(1); numbers.add(2); // 转换为Object数组 Object[] numberArray = numbers.toArray(); // 遍历输出 for (Object num : numberArray) { System.out.println(num); } } }方式2:带参数
toArray(T[] a)指定数组类型
如果需要得到特定类型的数组,就用这个重载方法,传入对应类型的数组(可以是0长度的,JVM会自动适配大小),示例:import java.util.TreeSet; public class TreeSetToArrayExample { public static void main(String[] args) { TreeSet<Integer> numbers = new TreeSet<>(); numbers.add(3); numbers.add(1); numbers.add(2); // 转换为Integer数组 Integer[] numberArray = numbers.toArray(new Integer[0]); // 遍历输出 for (int num : numberArray) { System.out.println(num); } } }
2. 如何将TreeSet转换为String[]?
先提一句:你给出的示例代码String[] cityNamesA = (String[]) cityNames.toArray();存在问题!因为无参toArray()返回的是Object[],直接强制转换会抛出ClassCastException——Java不允许将Object[]直接转为String[],这是类型安全的限制。
下面是两种正确的实现方式:
方式1:使用带参数的
toArray(String[])方法
这是最经典的写法,传入一个String类型的数组(推荐用0长度的,JDK 1.6+会自动优化创建合适大小的数组):import java.util.TreeSet; public class TreeSetToStringArrayExample { public static void main(String[] args) { TreeSet<String> cityNames = new TreeSet<>(); cityNames.add("London"); cityNames.add("Paris"); cityNames.add("New York"); // 正确转换为String数组 String[] cityNamesA = cityNames.toArray(new String[0]); // 遍历输出 for (String city : cityNamesA) { System.out.println(city); } } }你也可以传入和TreeSet大小一致的数组
new String[cityNames.size()],效果一样,只是0长度的写法更简洁。方式2:Java 8+ 用Stream API实现
如果你的项目用Java 8及以上,用Stream会更简洁优雅:import java.util.TreeSet; public class TreeSetToStringArrayExample { public static void main(String[] args) { TreeSet<String> cityNames = new TreeSet<>(); cityNames.add("London"); cityNames.add("Paris"); cityNames.add("New York"); // 用Stream转换为String数组 String[] cityNamesA = cityNames.stream().toArray(String[]::new); // 遍历输出 for (String city : cityNamesA) { System.out.println(city); } } }
内容的提问来源于stack exchange,提问作者OMAR AWAD
相关产品推荐
相关产品推荐

