1. 泛型的简介
泛型,即“参数化类型”。一提到参数,最熟悉的就是定义方法时有形参,然后调用此方法时传递实参。那么参数化类型怎么理解呢?顾名思义,就是将类型由原来的具体的类型参数化,类似于方法中的变量参数,此时类型也定义成参数形式(可以称之为类型形参),然后在使用/调用时传入具体的类型(类型实参)。为什么要是用泛型呢??泛型一半是用在集合上,比如现在吧一个字符串类型的值放入到集合里面,这个时候,这个值放入到集合之后,失去本身的类型,只能说是object类型,这个时候,比如想要对这个值进行类型转换,很容易出现转换错误,怎么解决这个问题呢,可以使用泛型来解决。
2在集合上如何使用泛型
*常用集合 list set map
*泛型语法 集合名<String> 比如List<String>
*在泛型里面写是一个对象,String,不能写基本的数据类型,比如int
**写基本的数据类型对应包装类
byte --Byte
short--Short
int--Integer
long--Long
float--Float
double--Double
char--Character
boolean--Boolean
*list上使用泛型
list的三种实现ArrayList linkedList Vector
代码如下:
@Test
public void Testdemo(){
//泛型使用在list上
ArrayList<String> list = new ArrayList<String>();
list.add("aaa");
list.add("bbb");
list.add("ccc");
//遍历数组
//增强for循环
for (String string : list) {
//string 为每一个元素
System.out.println(string);
}
System.out.println("================");
//for循环
for (int i = 0; i < list.size(); i++) {
String s = list.get(i);
System.out.println(s);
}
System.out.println("================");
//迭代器遍历数组
Iterator<String> itlist = list.iterator();
while(itlist.hasNext()){
System.out.println(itlist.next());
}
}
在set上使用泛型
@Test
public void SetDemo(){
//两种遍历方式,一种是增强for循环,一种是迭代器
//泛型使用在set上
//set的特点是不能有重复,而且排列无序
Set<String>hashset = new HashSet<>();
hashset.add("qqq");
hashset.add("www");
hashset.add("eee");
hashset.add("qqq");
//遍历数组
//增强for循环
System.out.println("#############");
for (String string : hashset) {
System.out.println(string);
}
System.out.println("##############");
//迭代器遍历数组
Iterator<String>setit = hashset.iterator();
while(setit.hasNext()){
System.out.println(setit.next());
}
}
在map上使用泛型
@Test
public void MapDemo() {
Map<String, String> map = new HashMap<String, String>();
map.put("aaa", "111");
map.put("bbb", "222");
map.put("ccc", "333");
// 得到所有key
Set<String> keys = map.keySet();
for (String key : keys) {
String value = map.get(key);
System.out.println(key + ":" + value);
}
// 林外一种方法得到key和value的值
System.out.println("=========");
// 得到KEY和value的关系
Set<Entry<String, String>> sets1 = map.entrySet();
// 遍历sets1
for (Entry<String, String> entry : sets1) {
String keyv = entry.getKey();
String valuev = entry.getValue();
System.out.println(keyv + ":" + valuev);
}
}
3.使用泛型方法需要定义一个类型
*使用大写字母表示T:这个T表示任意的类型
*写在 返回值之前也就是void之前
*表示定义了一个类型,这个类型是T
在下面就可以使用这个类型T了
public static <T> void swap1(T[] arr,int a,int b){
T temp = arr[a];
arr[a] = arr[b];
arr[b] = temp;
}