当使用泛型类或接口时,传递数据中,泛型类型不确定,可以通过通配符表示<?>表示。但一旦使用泛型的通配符后,只能使用Object类中的共性方法,集合中元素自身方法无法使用。
通配符的基本使用泛型的通配符:不知道使用什么类型来接收的时候,此时可以使用 ? ,?表示未知通配符
此时只能接收数据,不能往集合中存储数据。
【参考代码】
package FanXing;
import javax.swing.text.html.HTMLDocument;
import java.util.ArrayList;
import java.util.Iterator;
/*
泛型的通配符:
?:代表数据类型
使用方式:
不能在创建对象时使用
只能作为方法的传递参数使用
*/
public class Generic {
public static void main(String[] args) {
ArrayList<Integer>list01 = new ArrayList<>();
list01.add(123);
list01.add(456);
ArrayList<String>list02 = new ArrayList<>();
list02.add("小明");
list02.add("小红");
// ......还有很多其它类型
printArray(list01);
printArray(list02);
/*
定义一个方法,能遍历所有类型的ArrayList集合
这时候我们不知道ArrayList集合使用的是什么类型,可以使用泛型的通配符:?来代表数据类型
注意:泛型没有继承的概念
*/
}
public static void printArray(ArrayList<?>list){
// 使用迭代器遍历集合
Iterator<?> it = list.iterator();
while(it.hasNext()){
Object obj = it.next();//it.next()取出的元素是Object类。Object类 可以接收任意的数据类型
System.out.println(obj);
}
}
} 通配符高级使用-----受限泛型
之前设置泛型的时候,实际上是可以可以任意设置的,只要是类就可以设置。但在Java的泛型中可以指定一个泛型的上限和下限。
泛型的上限:
格式:类型名称<? extends E >对象名称 代表的泛型只能是E类型的子类/本身
意义:只能接收该类型及其子集
泛型的下限:
格式:类型名称<? super E >对象名称 代表的泛型只能是E类型的父类/本身
意义:只能接收该类型及其父类
比如:Object类、String类、Number类、Integer类,其中Number类是Integer的父类。
四:Java常见数据结构集合是基于数据结构做出来的,不同的集合底层采用不同的数据结构。不同的数据结构,功能和作用是不一样的。
数据结构是指数据以什么方式组织在一起。不同的数据结构,增删查的性能是不一样的。
41栈栈:stack,又称堆栈,它是运算受限的线性表,只能在栈的受限一端进行插入和删除操作。
特点:先进后出
4.2队列队列:queue,简称队,它同栈由于也是运算受限的线性表,只能在表的一端进行插入操作,而在表的另一端进行删除操作。
特点:先进先出
4.3数组数组:Array,是个有序的元素序列,数组在内存中开辟一段连续的空间。
特点:
查询快:随机存取,通过索引可以快速访问元素