泛型的简单应用
集合可以存储任何类型的对象,但当把一个对象存入集合后,集合不会记得的这个对象的类型,也就是说把这个对象从集合中取出来的时候,编译时会把这个对象看为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());
}