Set接口对象的toArray()方法问题。

SilentHunter460 2020-11-27 11:47:08
查API,toArray()方法返回的是Object数组对象,居然是Object,级别太高了吧,这个对象类型难道不应该跟随hasmap的key类型而定吗?难道因为keySet()方法导致对象类型被转化为Object了?那keySet()真是不够朋友。
import java.util.*;

public class iterator {
public static void main(String[] args) {
HashMap<String, Integer> hashmap = new HashMap<>();
hashmap.put("1", 1);
hashmap.put("2", 2);
Set keyset = hashmap.keySet();
Object[] keys = keyset.toArray();
System.out.println(keys.getClass());
}
}
...全文
2634 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
半道道 2020-11-28
  • 打赏
  • 举报
回复
需要明确接受的具体类型。 Set<String> keysets = hashmap.keySet();
qybao 2020-11-27
  • 打赏
  • 举报
回复
这应该是LZ不会用,不是keySet不够朋友

import java.util.*;

public class iterator {
public static void main(String[] args) {
HashMap<String, Integer> hashmap = new HashMap<>();
hashmap.put("1", 1);
hashmap.put("2", 2);
Set<String> keyset = hashmap.keySet();
String[] keys = keyset.toArray(new String[0]);
System.out.println(keys.getClass());
}
}
立青_ 2020-11-27
  • 打赏
  • 举报
回复
引用 5 楼 qq_16774199 的回复:
[quote=引用 2 楼 立青_ 的回复:]你应该这么写
 Set<String> keyset = hashmap.keySet();
        String[] keys = new String[keyset.size()];
        keyset.toArray(keys);
谢谢。但是idea推荐我这么写:

            Set keyset = hashmap.keySet();
            String[] keys = (String[]) keyset.toArray();
[/quote] 我觉得你这么写肯定报了警告,没有利用好泛型,上面keyset直接是Set原始类型,下面直接强转
SilentHunter460 2020-11-27
  • 打赏
  • 举报
回复
引用 2 楼 立青_ 的回复:
你应该这么写
 Set<String> keyset = hashmap.keySet();
        String[] keys = new String[keyset.size()];
        keyset.toArray(keys);
谢谢。但是idea推荐我这么写:

            Set keyset = hashmap.keySet();
            String[] keys = (String[]) keyset.toArray();
  • 打赏
  • 举报
回复
因为HashMap里面的的键值对类型都是泛型,所以源码一开始并不知道你会存放啥类型的数据,因此只能将他向上转型为他们根节点类型(Object类型),但是用户知道类型,所以大可以向2楼的那种写法就好了
shpery 2020-11-27
  • 打赏
  • 举报
回复
toArray只能是返回一个由这些Object构成的Object数组出来。 HashSet类提供了toArray的另一个重载版本,允许用户指定一种比Object[]更具体的数组类型,方法是传递一个用户想要的数组类型的一个数组实例进去
立青_ 2020-11-27
  • 打赏
  • 举报
回复
你应该这么写
 Set<String> keyset = hashmap.keySet();
        String[] keys = new String[keyset.size()];
        keyset.toArray(keys);
韩_师兄 2020-11-27
  • 打赏
  • 举报
回复
Set集合里面存放的类型是Object吧

62,615

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧