Java中Set类初始化问题

本人以前用C++的,最近紧急需要用Java,只能现学现用,在用到Set类的时候,有点不明白的地方,请教大家。我看到Set初始化的时候有两种方式:Set<String>se... 本人以前用C++的,最近紧急需要用Java,只能现学现用,在用到Set类的时候,有点不明白的地方,请教大家。我看到Set初始化的时候有两种方式:
Set<String> setTmp=new Set<String> ();
Set setTmp=new HashSet();
疑问:1.这两种方法有什么不同?2.第二种方法初始化的时候,.没有知名Set容器内的对象类型,是不是什么类型都是可以的?这种情况下,Set容器内的对象的类型是不是必须一致的,如果是String对象就必须所有容器内元素都是String,不能有int?
展开
 我来答
百度网友0adf2dfc62
推荐于2018-01-22 · TA获得超过578个赞
知道小有建树答主
回答量:553
采纳率:50%
帮助的人:215万
展开全部
没有第一种方式,Set是个接口,是不能够实例化(new)的,你只能实例化它的实现类,HashSet就是Set的一个实现类。
第二种方式你也可以给它加<String>,这叫泛型,就是限制这个类里只能传你指定的类型及其子类。
由于Java所有对象的类是Object类,所以如果不写就默认是Object类,所有类的最顶级父类都是Object,所以传什么都可以,
Set setTmp = new HashSet();和Set<Object> setTmp = new HashSet<Object>();两种方式是等价的。
Java有八种基本数据类型,是不属于Object类的子类的,byte, short, int,long,char,double,float,boolean,对这八种类有他们各自的包装类,依次是Byte,Short,Integer,Long,Character,Double,Float,Boolean,这八个包装类是Object的子类,是可以作为Set的类型用的,也就是你可以写成Set<Integer> 但是不能写成Set<int>.
阳光的ywx
2014-11-04 · TA获得超过474个赞
知道小有建树答主
回答量:598
采纳率:100%
帮助的人:367万
展开全部
个人觉得,<String>只不过是对Set的泛型,也就是指定了Set的类型。 而没有<string>修饰的Set默认类型是Object,里面什么都可以放。你要想放String类型就转成String ,int类型也是一样的。有Set指定泛型后,Set中只能放String类型的字符串。不论是hashSet还是实例化Set,他们不同是 HashSet 实现了Set接口中的方法。如果实例化Set,则要自己实现接口中的方法。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
金毛大土豆
2014-11-04
知道答主
回答量:9
采纳率:0%
帮助的人:1.1万
展开全部
是的,第一个setTmp中的元素必须是String类型的,因为你用泛型给setTmp中的元素类型约束了。但是第二个setTmp中的元素类型则没有限制,因为没有泛型约束。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友adb0cc3
2014-11-04 · 超过22用户采纳过TA的回答
知道答主
回答量:64
采纳率:100%
帮助的人:31.7万
展开全部
第一种方法应该不可以创建类的实例吧,Set是接口 没法被实例化的。hashSet是实现了Set接口的,是可以被实例化,没有指定泛型,可以使用存放任何对象,也就是说是Object的,如果指定了泛型,那么就只能存放指定泛型的对象。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式