List<T> 和 List<?>分别代表什么意思 List<T> 中的T是什么意思,T代表泛型?

www.zhiqu.org     时间: 2024-05-26

List<T> 通常指的是泛型的一种情况,而List<?>的使用是在不确定返回的集合泛型是什么类型的情况下所采用的一种方式。?表示是无限制的通配符。参数是可以任何的类型。List<T> list =new List<T>()。

泛型的定义主要有以下两种:

1、在程序编码中一些包含类型参数的类型,也就是说泛型的参数只可以代表类,不能代表个别对象。(这是当今较常见的定义)

2、在程序编码中一些包含参数的类。其参数可以代表类或对象等等。(人们大多把这称作模板)不论使用哪个定义,泛型的参数在真正使用泛型时都必须作出指明。

扩展资料

泛型的一个附带好处是,消除源代码中的许多强制类型转换。这使得代码更加可读,并且减少了出错机会。
尽管减少强制类型转换可以降低使用泛型类的代码的罗嗦程度,但是声明泛型变量会带来相应的罗嗦。比较下面两个代码例子。

泛型的一个附带好处是,消除源代码中的许多强制类型转换。这使得代码更加可读,并且减少了出错机会。尽管减少强制类型转换可以降低使用泛型类的代码的罗嗦程度,但是声明泛型变量会带来相应的罗嗦。比较下面两个代码例子。

该代码不使用泛型:

List li = new ArrayList();

li.put(new Integer(3));

Integer i = (Integer) li.get(0);

该代码使用泛型:

List<Integer> li = new ArrayList<Integer>();

li.put(new Integer(3));

Integer i = li.get(0)。



T 代表某一类型 ? 代表任意类型。。

T因为代表是某一确定类型。。所以你可以使用它。。
比如你有个List<T>类型的变量tList 你可以用T t = tList.get(1);也可以用add但是?可以是任意类型。。你不能进行那种与他里面装的东西的类型有关的操作。。比如add get等。。其中get只能复制给object类型。add甚至连object都不能用。。因为他可以是任意类型。。编译器不能确定他是什么类型。。
但前者编译器知道他的类型是T。。

我说的是调用List里的get 和add方法

没什么区别,List<?>应该是出现在讲解的示例里吧与标准的List<T>,?和T都是用来标识一个未定义类型的占位符,是jdk1.5出来的泛型,其中包括泛型方法、泛型类、泛型接口等
List<T> 换成 List<Student> list = new ArrayList<Student>();
这个时候list集合就只能装Student类型的值了,你就比喻成家里的装物箱,原本装物箱啥东西都可以往里放,里边的东西装杂了,你去找或取就不方便;这时你就把装物箱分类进行装不同的物品,你想想分类后你要找物品不就容易多啦

应该没有List<?>的,有List<? extends T>这样的
List<T>的意思是List的元素都是T这个类型的,List<? extends T>的意思是List的元素是T或者T的子类

List<T>和List<?>为什么都可以做方法的参数~

我给你说说他们的区别,你就应该明白了,List 通常指的是泛型的一种情况,例如:List表示String参数的类型的集合。
而List的使用是在不确定返回的集合泛型是什么类型的情况下所采用的一种方式。?表示是无限制的通配符。参数是可以任何的类型。List list =new List();
T t = new T();T可以在同一个类中可以进行重复的使用,而?则不能达到这样的效果。

是的,List 中的T就是泛型,就是放你要放入List中的数据类型;
比如:List ls=new ArrayList();
ls 中放的就是Persion对象!


#勾应咬# c#中的集合属于引用类型还是值类型
(19538097075): 引用类型

#勾应咬# java中Collections问题
(19538097075): 我给你看个例子你就知道了 这里有一个Person类,里面有firstName and surename2个成员.你的类要实现那个Comparable接口.然后在compareTo函数里决定如果排序,在这个例子里是按照surename排序,surename相同的就按照firstName排...

#勾应咬# java实现分页
(19538097075): 这里有一个,当时我用Hibernate做的,如果有啥不明白的,继续留言 index是偏移,具体可以这样计算:(当前页数 - 1)*每页显示的条数 count是你每页要显示多少条 你用的时候,直接把T换成是你需要查找的类,就可以啦 public List&lt;T&gt; ...

#勾应咬# .net程序
(19538097075): 首先说一下,这个题目出的有问题. 比较一个元素在泛型集合中是否存在,用的IEquable&lt;T&gt;接口,而IComparable&lt;T&gt;只是用来比较大小的.如果在你的泛型T中不实现IEquable&lt;T&gt;接口的话,肯定会在比较的时候出错(List&lt;T&gt;.Contains方法).如果逐个取出来再进行判断,代码就写死了. 而且这个题目还应该有上下文,如果只这么出一道题的话,出题的一定没有考虑周全. 我可以明确的告诉你,用最原始的迭代还是循环(for or foreach)的方式去判定,排序和没排序一点也不会增加查找的速度.

#勾应咬# c#中怎么将泛型的List和ArrayList相互转化?
(19538097075): ArrayList a; List&lt;MyClass&gt; l; 1.自定义函数: IEnumerable&lt;T&gt; CastToList(ArrayList a) { foreach(object item in a) { if (item is T) yield } } l = CastToList(a).ToList(); 或者 l = new List(CastToList(a)); 或者 l.AddRange(CastToList(a)); 2.3.0...

#勾应咬# C# 做闹钟有点小问题
(19538097075): 可用List&lt;T&gt; 存放,插入的时候按照时间来排序, xml 序列化到硬盘来保存. 打开的时候进行反序列化操作,得到 List,取前四个表现在界面上就可以了.

#勾应咬# Struts2<s:iterator>标签循环迭代对象中的list问题
(19538097075): 首先,你的上层 iterator 要指定 id&lt;s:iterator value="#request.list" id="list"&gt; &lt;!-- 都忘了内层还要不要id ,你自己试试 --&gt; &lt;s:iterator value="#list.hobbyList"&gt; &lt;!-- 如果指定了id 则写成,id.name --&gt; &lt;s:property value...

#勾应咬# C#中,如何将一个结构体的成员组成顺序表数据中的一个成员?例如:
(19538097075): 顺序表需要自己写?c#里面的顺序表不就是泛型LIST么?List&lt;Person&gt; p = new List&lt;Person&gt;();、你要查询的时候直接用p[0]就可以直接访问了吧?这样不就行了?里面的属性,方法比你定义的多,不够再自己加嘛.

#勾应咬# java声明问题:List<String> list=new ArrayList<String>();为甚麽要声明为List 而不是ArrayList<String>?
(19538097075): List是集合最大的父类,它包含了ArrayList.如果直接声明为ArrayList&lt;String&gt; list=new ArrayList&lt;String&gt;()这个也没有问题.而声明成:List&lt;String&gt; list=new ArrayList&lt;String&gt;();这样的形式使得list这个对象可以有多...

#勾应咬# 求教java中Collections中sort泛型的问题.
(19538097075): &lt;T extends Comparable&lt;? super T&gt;&gt; 是定义T的类型,必须扩展自Comparable&lt;? super T&gt; 即T必须是一个Comparable能比较的对象. 就是说传入的List&lt;T&gt; 中的T类型,必须继承自Comparable,即必须具有有效的compareTo方法. 自定义的class A{},没有compareTo,就不能List&lt;A&gt; a传入这个Collections.sort(a)方法. 该方法无返回值