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? 展开
Set<String> setTmp=new Set<String> ();
Set setTmp=new HashSet();
疑问:1.这两种方法有什么不同?2.第二种方法初始化的时候,.没有知名Set容器内的对象类型,是不是什么类型都是可以的?这种情况下,Set容器内的对象的类型是不是必须一致的,如果是String对象就必须所有容器内元素都是String,不能有int? 展开
4个回答
展开全部
没有第一种方式,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>.
第二种方式你也可以给它加<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>.
展开全部
个人觉得,<String>只不过是对Set的泛型,也就是指定了Set的类型。 而没有<string>修饰的Set默认类型是Object,里面什么都可以放。你要想放String类型就转成String ,int类型也是一样的。有Set指定泛型后,Set中只能放String类型的字符串。不论是hashSet还是实例化Set,他们不同是 HashSet 实现了Set接口中的方法。如果实例化Set,则要自己实现接口中的方法。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
是的,第一个setTmp中的元素必须是String类型的,因为你用泛型给setTmp中的元素类型约束了。但是第二个setTmp中的元素类型则没有限制,因为没有泛型约束。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
第一种方法应该不可以创建类的实例吧,Set是接口 没法被实例化的。hashSet是实现了Set接口的,是可以被实例化,没有指定泛型,可以使用存放任何对象,也就是说是Object的,如果指定了泛型,那么就只能存放指定泛型的对象。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询