Java Review SectionⅢ 泛型与集合

泛型类 

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

猜你喜欢

转载自blog.csdn.net/Altr1aPendrag0n/article/details/82107889