泛型的简单应用
集合可以存储任何类型的对象,但当把一个对象存入集合后,集合不会记得的这个对象的类型,也就是说把这个对象从集合中取出来的时候,编译时会把这个对象看为object类型,而若是做强制类型转换的话是非常容易出错的。因此我们引入了泛型。

我们要明白的是在泛型是在程序编译期间的一种机制,而在运行期间是没有这个概念的。

Collection<String> collection = new ArrayList<>();
//<String>就可以看成一种泛型,代表这个集合类引入的Sting类的对象
//<String> 就是泛型参数,由调用者来确定。

Collection与Map是一个接口
所以其中的方法是抽象方法。并且这些抽象方法使用的时候取决于接口对应的真实对象的类型。

// 1. 实例化一个 Collection 对象. Collection 是一个接口. 必须要 new 一个对应的类作为实例才可以
        Collection<String> collection = new ArrayList<>();
        // 2. 使用 size / isEmpty
        System.out.println(collection.isEmpty());
        System.out.println(collection.size());
        // 3. 使用 add 添加元素
        collection.add("1");
        collection.add("2");
        collection.add("3");

        // 4. 再次使用 isEmpty 和 size
        System.out.println("==========================");
        System.out.println(collection.isEmpty());
        System.out.println(collection.size());

        // 5. toArray 把集合转换成数组
        //    String 也是继承自 Object . array 看似是一个 Object 数组, 其实是 String 数组.
        System.out.println("==========================");
        Object[] array = collection.toArray();
        System.out.println(Arrays.toString(array));
        System.out.println(collection);

        // 6. for each 遍历 collection

        System.out.println("==========================");
        for (String s : collection) {
            System.out.println(s);
        }

        // 7. 判定元素是否存在. contains 内部会拿参数的对象和集合中保存的对象按值比较(而不是按身份).
        System.out.println("==========================");
        boolean ret = collection.contains("1");
        System.out.println(ret);

        // 8. 使用删除方法来删除指定元素
        System.out.println("==========================");
        collection.remove("2");
        for (String s : collection) {
            System.out.println(s);
        }

        // 9. 使用 clear 来清空所有元素
        collection.clear();
        System.out.println(collection.isEmpty());
        System.out.println(collection.size());
    }

Map中是有键值对的
也就是Entry条目(key,value)可以将key理解为人的名字,value理解为人本身,一般使用代号来寻找本身。

public static void main(String[] args) {
        // 1. 实例化一个 Map
        Map<String, String> map = new HashMap<>();
        // 2. isEmpty size
        System.out.println(map.isEmpty());
        System.out.println(map.size());
        // 3. put 插入若干个键值对. key => value, 反向不行
        map.put("1", "one");
        map.put("2", "two");
        map.put("3", "three");
        map.put("4", "four");
       
        // 4. 使用 get 根据 key 找一下 value
        System.out.println(map.get("1"));
        System.out.println(map.get("5"));
        // 找到 key, 返回对应 value; 如果没找到 key, 返回默认值.
        System.out.println(map.getOrDefault("5", "five"));

        // 5. 使用 contains 判定元素是否存在
        //    containsKey 比较高效的. containsValue 比较低效的.
        System.out.println("=====================");
        System.out.println(map.containsKey("1"));
        System.out.println(map.containsValue("one"));   

        // 6. 循环遍历 Map. 此处的 Entry 表示 "条目" 一个一个的键值对
        //    对于 Map 来说, 保存的元素顺序和插入顺序无关.
        //    Map 内部对于元素顺序有自己的规则
        for (Map.Entry<String, String> entry : map.entrySet()) {
            System.out.println(entry.getKey() + ": " + entry.getValue());
        }

        // 7. clear 清空所有元素
        map.clear();
        System.out.println(map.isEmpty());
        System.out.println(map.size());
    }