01.为什么要使用集合框架?
解析:如果并不知道程序运行时会需要多少对象,或者需要更复杂方式存储对象,那么可以使用Java集合框架。
如果启用集合的删除方法,那么集合中所有元素的索引会自动维护。
集合完全弥补了数组的缺陷。
02.集合框架的内容
集合框架都包含三大块内容:对外的接口,接口的实现和对集合运算的算法
01.接口:表示集合的抽象数据类型
02.实现:集合框架中接口的具体实现
03.算法:在一个实现了某个集合框架的接口的对象身上完成某种有用的计算方法
java集合框架简图:
01.Collection接口存在储存一组不唯一(允许重复),无序的对象
02.Set接口继承Collection接口,存储一组唯一(不允许重复),无序的对象
03.List接口继承Collection接口,存储一组不唯一(允许重复),有序(以元素插入的次序来放置元素,不会重新排列)的对象
04.Map接口存储一组成对的键-值对象,提供key(键)到value(值)的映射。Map中的key不要求有序,不允许重复。value同样不要求有序,但允许重复。
05.Iterator接口是负责定义访问和遍历元素的接口。
下面开始介绍:
1.List接口
List接口继承Collection接口,存储一组不唯一(允许重复),有序(以元素插入的次序来放置元素,不会重新排列)的对象
实现List接口的常用类有ArrayList和LinkedList
ArrayList对数组进行了封装,实现了长度可变的数组
LinkedList采用链表存储方式,其优点在于插入,删除元素时效率比较高
01.ArrayList集合类
package cn.day001; public class Penguin { private String name="无名氏"; private String sex="Q仔"; public Penguin() { } public Penguin(String name, String sex) { this.name = name; this.sex = sex; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getSex() { return sex; } public void setSex(String sex) { this.sex = sex; } }
测试类:
package cn.day001; import java.util.ArrayList; import java.util.Iterator; import java.util.List; //上机1 ArrayList集合类 public class Test { public static void main(String[] args) { //1.创建多个企鹅对象 Penguin penguin=new Penguin("楠楠","Q仔"); Penguin penguin2=new Penguin("花花","Q妹"); Penguin penguin3=new Penguin("哲哲","Q妹"); //2.创建Arraylist集合对象并把2个企鹅对象放到其中 List<Penguin> penguins=new ArrayList<Penguin>(); penguins.add(penguin); penguins.add(penguin2); penguins.add(penguin3); //3.输出集合中企鹅的数量 System.out.println("共计有"+penguins.size()+"只企鹅"); //4.通过遍历集合显示 for (int i = 0; i < penguins.size(); i++) { Penguin pg=(Penguin)penguins.get(i); System.out.println(pg.getName()+" "+pg.getSex()); } //5.删除集合中哲哲企鹅 penguins.remove(penguin3); //6.判断集合中是否还存在哲哲企鹅 if (penguins.contains(penguin3)) { System.out.println("存在哲哲企鹅"); }else { System.out.println("不存在哲哲企鹅"); } System.out.println(); //7.使用iterator迭代遍历 System.out.println("使用iterator遍历"); Iterator<Penguin> its=penguins.iterator(); while (its.hasNext()) { Penguin pg =its.next(); System.out.println("名字"+pg.getName()+" 性别"+pg.getSex()); } System.out.println(); //8.使用foreach遍历 System.out.println("使用foreach遍历"); for (Penguin pg : penguins) { System.out.println("名字"+pg.getName()+" 性别"+pg.getSex()); } } }
02.LinkedList集合类
package cn.day001; import java.util.LinkedList; //测试LinkedList的多个特殊方法 public class Test2 { public static void main(String[] args) { //1.创建多个企鹅对象 Penguin penguin=new Penguin("楠楠","Q仔"); Penguin penguin2=new Penguin("花花","Q妹"); Penguin penguin3=new Penguin("哲哲","Q妹"); //2.创建Arraylist集合对象并把2个企鹅对象放到其中 //List<Penguin> penguins=new ArrayList<Penguin>(); LinkedList<Penguin> penguins=new LinkedList<Penguin>(); penguins.add(penguin); penguins.add(penguin2); penguins.add(penguin3); //3.输出集合中企鹅的数量 System.out.println("共计有"+penguins.size()+"只企鹅"); //4.查看集合中第一只企鹅的昵称 Penguin firstpenguins=penguins.getFirst(); System.out.println("第一只企鹅的昵称是:"+firstpenguins.getName()); //5.查看集合中最后一只企鹅的昵称 Penguin lastpenguins=penguins.getLast(); System.out.println("最后一只企鹅的昵称是:"+lastpenguins.getName()); //6.删除第一只企鹅和最后一只企鹅 penguins.removeFirst(); penguins.removeLast(); System.out.println("删除后企鹅数"+penguins.size()); } }
2.Map接口
01.HashMap集合类
package cn.day002; import java.util.HashMap; import java.util.Iterator; import java.util.Map; import java.util.Scanner; import java.util.Set; //上机2 根据宠物昵称查找宠物 上机3 使用iterator迭代遍历 public class Test { public static void main(String[] args) { Map<String, String> pet=new HashMap<String, String>(); pet.put("嘻嘻", "狗狗"); pet.put("哈哈", "企鹅"); pet.put("呵呵", "猫猫"); Scanner input=new Scanner(System.in); System.out.println("请输入宠物昵称:"); String name=input.next(); if (pet.containsKey(name)) { String petname=pet.get(name); System.out.println(name+"对应的宠物"+petname); }else { System.out.println("对不起,没有此昵称对应的宠物"); } System.out.println(); //使用iterator迭代遍历 System.out.println("使用iterator遍历"); Set<String> keys=pet.keySet();//取出所有的key的值 Iterator<String> it=keys.iterator();//获取Iteratoer对象 while (it.hasNext()) { String key = (String) it.next();//取出key值 String pets=pet.get(key);//根据key取出对应的值 System.out.println("key值:"+key+" value值:"+pets); } } }