#本章目标
1.掌握集合框架包含的内容
2.掌握ArrayList和LinkedList的使用
3.掌握HashMap的使用
4.掌握Iterator的使用
5.掌握泛型集合的使用
#为什么使用集合框架
如果并不知道程序运行时会需要多少对象,或者需要 更复杂方式存储对象——可以使用Java集合框架。
#Java集合框架包的内容
在Java中关于集合框架它提供了一套性能优良、使用方便的接口和类,它们位于java.util包中
接口:Collection有两个分支分别为List和Set
在List中我们会使用到ArrayList和LinkedList两种
在Set中我们会使用到Hashset
除了collection我们还用Map接口
在Map接口中我们使用HashMap
这些接口有不同的地方:
Collection 接口存储一组不唯一,无序的对象
List 接口存储一组不唯一,有序(插入顺序)的对象
Set 接口存储一组唯一,无序的对象
Map接口存储一组键值对象,提供key到value的映射
#List接口的实现类
ArrayList实现了长度可变的数组,在内存中分配连续的空间。遍历元素和随机访问元素的效率比较高
LinkedList采用链表存储方式。插入、删除元素时效率比较高
#ArrayList集合类
通过前面所学先创建宠物类和狗类。也可以直接创建狗类。前者可以使用多态后者不可。
package entity;
public abstract class Pet {
private String name;
private int health;
private int love;
public Pet() {
}
public Pet(String name, int health, int love) {
this.name = name;
this.health = health;
this.love = love;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getHealth() {
return health;
}
public void setHealth(int health) {
this.health = health;
}
public int getLove() {
return love;
}
public void setLove(int love) {
this.love = love;
}
public abstract void print();
}
package entity;
public class Dog extends Pet {
private String strain;
public Dog() {
super();
}
public Dog(String name, int health, int love, String strain) {
super(name, health, love);
this.strain = strain;
}
public String getStrain() {
return strain;
}
public void setStrain(String strain) {
this.strain = strain;
}
@Override
public void print() {
System.out.println(super.getName() + "\t" + this.strain);
}
}
package demo;
import java.util.ArrayList;
import entity.Dog;
public class Test01 {
public static void main(String[] args) {
ArrayList list = new ArrayList(); // 实例化ArrayList集合
list.add(new Dog("欧欧", 100, 0, "雪纳瑞")); // add代表添加数据,将狗狗信息加入到集合中
list.add(new Dog("亚亚", 100, 0, "拉布拉多"));
list.add(new Dog("菲菲", 100, 0, "拉布拉多"));
list.add(new Dog("美美", 100, 0, "雪纳瑞"));
System.out.println("共计有" + list.size() + "条狗狗。");
System.out.println("分别是:");
for (Object obj : list) { // 使用foreach语句输出狗狗信息
Dog d = (Dog) obj;
d.print();
}
}
}
#学习List中提供的remove()、contains()方法
package demo;
import java.util.ArrayList;
import entity.Dog;
import entity.Pet;
public class Test02 {
public static void main(String[] args) {
ArrayList list = new ArrayList();
list.add(new Dog("欧欧", 100, 0, "雪纳瑞"));
list.add(new Dog("亚亚", 100, 0, "拉布拉多"));
Dog ff = new Dog("菲菲", 100, 0, "拉布拉多"); //删除指定的狗狗
list.add(ff);
Dog mm = new Dog("美美", 100, 0, "雪纳瑞"); // 查询指定的狗狗是否还在
list.add(mm);
System.out.println("删除之前共计有" + list.size() + "只狗狗。\n");
// 删除集合里的对象
list.remove(0); // 根据集合的下标(索引,从0开始)进行删除即为第一个
list.remove(ff); // 根据指定对象进行删除
System.out.println("删除之后还有" + list.size() + "只狗狗。");
System.out.println("分别是:");
for (Object obj : list) {
Pet p = (Pet) obj;
p.print();
}
if (list.contains(mm)) { // 判断集合中是否有“美美”对象,contians表示是否存在(某某),返回值为true false
System.out.println("\n集合中包含美美的信息");
} else {
System.out.println("\n集合中不包含美美的信息!");
}
}
}
Map接口
package demo;
import java.util.HashMap;
import java.util.Map;
public class Test03 {
public static void main(String[] args) {
// 实例化Map集合
Map countries = new HashMap();
// 存入集合数据 使用key value
countries.put("US", "美利坚合众国");
countries.put("RU", "俄罗斯联邦");
countries.put("CN", "中华人民共和国");
countries.put("FR", "法兰西共和国");
System.out.println("CN对应的国家是:"+countries.get("CN").toString()); // .get是获取集合中关于cn的值,toString是将找到的数据转化为String类型
System.out.println("Map中共有"+countries.size()+"组数据"); // size显示出集合内数据的总数
System.out.println("Map中包含FR的key吗?" + countries.containsKey("FR")); // containkey查找集合中关于FR的key是否存在,存在返回true否则false
countries.remove("FR"); // 根据KEY删除键值对
System.out.println("Map中包含FR的key吗?" + countries.containsKey("FR"));
System.out.println(countries.keySet().toString()); // 输出key集
System.out.println(countries.values().toString()); // 输出value集
System.out.println(countries.toString());
countries.clear(); // 清空Map集合
System.out.println("已清空Map中的数据!");
}
}
#如何遍历Map集合?
1.使用迭代器 Iterator实现遍历
2.增强for循环
以上面的为例子实现遍历输出所有数据
// 迭代器遍历
for (Iterator iterator = countries.keySet().iterator(); iterator.hasNext();) {
String key = (String) iterator.next(); // 迭代器遍历key
System.out.println(key);
}
for (Iterator iterator = countries.values().iterator(); iterator.hasNext();) { // 迭代遍历value集合
String value = (String) iterator.next();
System.out.println(value); // 迭代器遍历value
}
// 增强for循环
for (Object key : countries.keySet()) {
System.out.println(key);
}
for (Object value : countries.values()) {
System.out.println(value);
}