泛型类
package Chapter0827;
public class People<T,U,V> { //定义多个泛型
public T name;
public U height;
public V age;
public T getName() {
return name;
}
public void setName(T name) {
this.name = name;
}
public U getHeight() {
return height;
}
public void setHeight(U height) {
this.height = height;
}
public V getAge() {
return age;
}
public void setAge(V age) {
this.age = age;
}
public People(T name, U height, V age) {
this.name = name;
this.height = height;
this.age = age;
}
public void showDataType() {
System.out.println("name数据类型:" + name.getClass());
System.out.println("height数据类型:" + height.getClass());
System.out.println("age数据类型:" + age.getClass());
}
public void showData() {
System.out.println("name数据:" + name);
System.out.println("height数据类型:" + height);
System.out.println("age数据类型:" + age);
}
public static void main(String[] args){
People<String,Double,Integer> people=new <String>People("Jack",1.75,20);
people.showData();
people.showDataType();
System.out.println(people.getClass());
}
}
运行结果:
通配符——? (在不确定类型的时候使用)
以下,针对通配符、Object等进行实验探究:
package Chapter0827;
public class People<T, U, V> {
public T name;
public U height;
public V age;
public T getName() {
return name;
}
public void setName(T name) {
this.name = name;
}
public U getHeight() {
return height;
}
public void setHeight(U height) {
this.height = height;
}
public V getAge() {
return age;
}
public void setAge(V age) {
this.age = age;
}
public People(T name, U height, V age) {
this.name = name;
this.height = height;
this.age = age;
}
public void showDataType() {
System.out.println("name数据类型:" + name.getClass());
System.out.println("height数据类型:" + height.getClass());
System.out.println("age数据类型:" + age.getClass());
}
public void showData() {
System.out.println("name数据:" + name);
System.out.println("height数据类型:" + height);
System.out.println("age数据类型:" + age);
}
public void show0(People<?, ?, ?> people) {
System.out.println("----show0 ?---");
people.showDataType();
people.showData();
System.out.println("----show0 ?----");
}
public void show1(People<T, U, V> people) {
System.out.println("----show1 T----");
people.showDataType();
people.showData();
System.out.println("----show1 T----");
}
public void show2(People<String, Double, Integer> people) {
System.out.println("----show2 String----");
people.showDataType();
people.showData();
System.out.println("----show2 String----");
}
public void show3(People<Object, Object, Object> people) {
System.out.println("----show3 Object----");
people.showDataType();
people.showData();
System.out.println("----show3 Object----");
}
public static void main(String[] args) {
People<String, Double, Integer> people = new <String>People("Jack", 1.75, 20);
people.showData();
people.showDataType();
System.out.println(people.getClass());
people.show0(people);
people.show1(people);
people.show2(people);
people.show3(people); //使用Object指定————方法体未报错,该行标红报错
}
}
运行结果:
集合类
Collection
- List——>ArrayList(有序,允许重复)
- Set——>HashSet(无序,不允许重复)
Map——>HashMap(键值对Key,Key/Value)
- key不允许重复,重复被覆盖,不会报错
package Chapter0827;
import java.util.*;
public class CollectionDemo {
public CollectionDemo() {
}
public static void main(String[] args) {
List list = new ArrayList<>();
ArrayList<String> arrayList = new ArrayList<>();
Set set = new HashSet();
Map map = new HashMap();
}
}
迭代器(Iterator)
List接口及其实现类
List是Collection接口的子接口,可以使用Collection接口中的所有方法。因为List是有序、可重复的集合,所以List接口中又增加了一些根据索引操作集合的方法。
ArrayList——线程非安全(数据出现脏数据)
Vector——线程安全
StringBuffer——线程安全
StringBuilder——线程非安全、非线程安全
以下,迭代与ArrayList相关操作实践:
package Chapter0827;
import java.util.*;
public class CollectionDemo {
public CollectionDemo() {
}
public static void main(String[] args) {
List list = new ArrayList<>();
ArrayList<String> arrayList = new ArrayList<>();
Set set = new HashSet();
Map map = new HashMap();
arrayList.add("北京");
arrayList.add("上海");
arrayList.add("天津");
arrayList.add("青岛");
arrayList.add("济南");
//arrayList.add(1);//错误,只能添加字符串
System.out.println("-----使用foreach循环遍历-----");
for (String city : arrayList) {
System.out.println(city);
}
System.out.println("-----使用foreach循环遍历-----");
arrayList.remove(1);//节点1,第2个
System.out.println("-----使用迭代器遍历-----");
Iterator<String> iterator = arrayList.iterator();
while (iterator.hasNext()) {
System.out.println(iterator.next());
}
System.out.println("-----使用迭代器遍历-----");
}
}
运行结果:
HashMap
HashMap<Integer,String> hashMap=new HashMap<>();
hashMap.put(1,"wwww");
hashMap.put(2,"eee");
hashMap.put(3,"rrr");
hashMap.put(4,"ttt");
hashMap.put(5,"yyy");
hashMap.put(null,null);
System.out.println(hashMap.get(1));//查找键为1的元素
System.out.println(hashMap.get("aaa"));//不存在键为aaa的元素
System.out.println(hashMap.get(null));//查找键为null的元素
hashMap.remove(2);//移除键为2的元素
System.out.println(hashMap.get(2));//键为2的元素已删除,查找不到
运行结果:
HashMap方法:
Set不允许重复、Map键不允许重复
2018.8.27