1.集合的理解和好处
前面我们保存多个数据使用的是数组,那么数组有不足的地方,我们分析一下
1.1数组
1)长度开始时必须指定,而且一旦指定,不能更改
2)保存的必须为同一类型的元素
3)使用数组进行增加/删除元素的示例代码-比较麻烦
1.2 集合
1)可以动态保存任意多个对象,使用比较方便!
2)提供了一系列方便的操作对象的方法:add、remove、set、get等
3)使用集合添加,删除新元素的示例代码-简洁了
2 集合的框架体系(背下来)
Java 的集合类很多,主要分为两大类,如图 :[背下来]
Collection接口和Map接口
集合主要是两组(单列集合 , 双列集合)
Collection 接口有两个重要的子接口 List Set , 他们的实现子类都是单列集合
Map 接口的实现子类 是双列集合,存放的 K-V
public class Collection_ {@SuppressWarnings({"all"})public static void main(String[] args) {//老韩解读//1. 集合主要是两组(单列集合 , 双列集合)//2. Collection 接口有两个重要的子接口 List Set , 他们的实现子类都是单列集合//3. Map 接口的实现子类 是双列集合,存放的 K-V//4. 把老师梳理的两张图记住//Collection//MapArrayList arrayList = new ArrayList();arrayList.add("jack");arrayList.add("tom");HashMap hashMap = new HashMap();hashMap.put("NO1", "北京");hashMap.put("NO2", "上海");}
}
3 Collection 接口和常用方法
3.1 Collection 接口实现类的特点
Collection 接口常用方法,以实现子类 ArrayList 来演示
public class CollectionMethod {@SuppressWarnings({"all"})public static void main(String[] args) {List list = new ArrayList();
// add:添加单个元素list.add("jack");list.add(10);//list.add(new Integer(10))list.add(true);System.out.println("list=" + list);
// remove:删除指定元素//list.remove(0);//删除第一个元素list.remove(true);//指定删除某个元素System.out.println("list=" + list);
// contains:查找元素是否存在System.out.println(list.contains("jack"));//T
// size:获取元素个数System.out.println(list.size());//2
// isEmpty:判断是否为空System.out.println(list.isEmpty());//F
// clear:清空list.clear();System.out.println("list=" + list);
// addAll:添加多个元素ArrayList list2 = new ArrayList();list2.add("红楼梦");list2.add("三国演义");list.addAll(list2);System.out.println("list=" + list);
// containsAll:查找多个元素是否都存在System.out.println(list.containsAll(list2));//T
// removeAll:删除多个元素list.add("聊斋");list.removeAll(list2);System.out.println("list=" + list);//[聊斋]
// 说明:以ArrayList实现类来演示.}
}
3.2 Collection 接口遍历元素方式 1-使用 Iterator(迭代器)
提示:在调用iterator.next()方法之前必须要调用iterator.hasNext()进行检测。若不调用且下一条记录无效,直接调用it.next()会抛出NoSuchElementException异常。
import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;public class CollectionIterator {@SuppressWarnings({"all"})public static void main(String[] args) {Collection col = new ArrayList();col.add(new Book("三国演义", "罗贯中", 10.1));col.add(new Book("小李飞刀", "古龙", 5.1));col.add(new Book("红楼梦", "曹雪芹", 34.6));//System.out.println("col=" + col);//现在老师希望能够遍历 col集合//1. 先得到 col 对应的 迭代器Iterator iterator = col.iterator();//2. 使用while循环遍历
// while (iterator.hasNext()) {//判断是否还有数据
// //返回下一个元素,类型是Object
// Object obj = iterator.next();
// System.out.println("obj=" + obj);
// }//老师教大家一个快捷键,快速生成 while => itit//显示所有的快捷键的的快捷键 ctrl + jwhile (iterator.hasNext()) {Object obj = iterator.next();System.out.println("obj=" + obj);}//3. 当退出while循环后 , 这时iterator迭代器,指向最后的元素// iterator.next();//NoSuchElementException//4. 如果希望再次遍历,需要重置我们的迭代器iterator = col.iterator();System.out.println("===第二次遍历===");while (iterator.hasNext()) {Object obj = iterator.next();System.out.println("obj=" + obj);}}
}class Book {private String name;private String author;private double price;public Book(String name, String author, double price) {this.name = name;this.author = author;this.price = price;}public String getName() {return name;}public void setName(String name) {this.name = name;}public String getAuthor() {return author;}public void setAuthor(String author) {this.author = author;}public double getPrice() {return price;}public void setPrice(double price) {this.price = price;}@Overridepublic String toString() {return "Book{" +"name='" + name + '\'' +", author='" + author + '\'' +", price=" + price +'}';}
}
3.3 Collection 接口遍历对象方式 2-for 循环增强
import java.util.ArrayList;
import java.util.Collection;public class CollectionFor {@SuppressWarnings({"all"})public static void main(String[] args) {Collection col = new ArrayList();col.add(new Book("三国演义", "罗贯中", 10.1));col.add(new Book("小李飞刀", "古龙", 5.1));col.add(new Book("红楼梦", "曹雪芹", 34.6));//老韩解读//1. 使用增强for, 在Collection集合//2. 增强for, 底层仍然是迭代器//3. 增强for可以理解成就是简化版本的 迭代器遍历//4. 快捷键方式 I
// for (Object book : col) {
// System.out.println("book=" + book);
// }for (Object o : col) {System.out.println("book=" + o);}//增强for,也可以直接在数组使用
// int[] nums = {1, 8, 10, 90};
// for (int i : nums) {
// System.out.println("i=" + i);
// }}
}
4 练习
1.创建3个Dog {name, age} 对象,放入到 ArrayList中,赋给List 引用
2.用迭代器和增强for循环两种方式来遍历
3.重写Dog的toString方法,输出name和age
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;public class Homework1 {public static void main(String[] args) {List list = new ArrayList();list.add(new Dog("狗狗1",5));list.add(new Dog("狗狗2",6));list.add(new Dog("狗狗3",5));System.out.println(list);//使用迭代器来遍历Iterator iterator = list.iterator();while (iterator.hasNext()){Object next = iterator.next();System.out.println(next);}//使用增强for循环来遍历System.out.println("增强for循环");for (Object d : list){System.out.println(d);}}
}class Dog{private String name;private int age;public Dog(String name, int age) {this.name = name;this.age = age;}public String getName() {return name;}public int getAge() {return age;}public void setName(String name) {this.name = name;}public void setAge(int age) {this.age = age;}@Overridepublic String toString() {return "Dog{" +"name='" + name + '\'' +", age=" + age +'}';}
}