泛型
泛型的引入
public class GenericDemo {
public static void main(String[] args) {
List list = new ArrayList();
list.add(11);
list.add("aaa");
list.add('a');
list.add(true);
for(Object obj :list) {
String str = (String)obj;
System.out.println(str.length());
}
}
因为在集合中所有的元素都是Object类型,不能去使用元素的具体类型的独有的方法。要使用的话需要进行类型转换,类型转换有会出现classCastException
在通常集合的使用中,我们在集合中存储的元素的类型,还是以同种类型为主。混杂类型的存储是较为少见
在创建集合的时候,去指定集合中所存储的数据的具体类型:泛型
泛型的定义
泛型又称为参数化类型。以集合为例:在声明的时候,将集合中保存的元素的类型以一种参数的形式来指定,再具体使用的时候,再根据实际的使用情况传入要存储的数据的类型
泛型在集合中的使用:
package org.lanqiao.generic.demo;
public class Student {
private String name;
private Integer age;
public Student() {
super();
// TODO Auto-generated constructor stub
}
public Student(String name, Integer age) {
super();
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + ((age == null) ? 0 : age.hashCode());
result = prime * result + ((name == null) ? 0 : name.hashCode());
return result;
}
@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
Student other = (Student) obj;
if (age == null) {
if (other.age != null)
return false;
} else if (!age.equals(other.age))
return false;
if (name == null) {
if (other.name != null)
return false;
} else if (!name.equals(other.name))
return false;
return true;
}
@Override
public String toString() {
return "Student [name=" + name + ", age=" + age + "]";
}
}
package org.lanqiao.generic.demo;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Set;
public class GenericDemo {
public static void main(String[] args) {
List<String> list = new ArrayList<String>();
list.add("aaa");
list.add("11");
list.add("bb");
for(String s : list) {
System.out.println(s.length());
}
System.out.println("------------Map中泛型的使用-------------");
Map<String ,String> map = new HashMap<String ,String>();
map.put("1","aa");
map.put("2", "bb");
map.put("3", "cc");
//获取map的健集 再通过键获取值
/*Set<String> set = map.keySet();
for(String str : set) {
String value = map.get(str);
System.out.println(value);
}*/
Set<Map.Entry<String, String>> set =map.entrySet();
/*for(Map.Entry<String, String> me :set) {
String key = me.getKey();
String value = me.getValue();
System.out.println(key +"--"+value );
}*/
Iterator<Map.Entry<String, String>> iter = set.iterator();
while(iter.hasNext()) {
Map.Entry<String , String> entry = iter.next();
System.out.println(entry.getKey() +"--"+entry.getValue());
}
System.out.println("------------使用泛型存储自定义类型-------------");
Set<Student> s = new HashSet<Student>();
Student stu1 = new Student("aaa",21);
Student stu2 = new Student("bb",22);
Student stu3 = new Student("cc",20);
Student stu4 = new Student("dd",18);
s.add(stu1);
s.add(stu2);
s.add(stu3);
s.add(stu4);
/*for(Student stu : s) {
System.out.println(stu);
}*/
Iterator<Student> iterStu = s.iterator();
while(iterStu.hasNext()) {
Student ss = iterStu.next();
System.out.println(ss.getName()+"--"+ss.getAge());
}
// jdk7泛型的新特点:
List<String> l = new ArrayList<>();
}
}
jdk7泛型的新特点
List<String> l = new ArrayList<>();