系列文章目录
目录
一、集合
1.集合框架
1、集合主要分两组(单列集合、双列集合)
2、Collection 接口有两个重要的子接口 List 和 Set, 他们的实现子类都是单列集合,
- 比如实现List接口的类:ArrayList、LinkedList、vector等
- 实现Set接口的类:HashSet、TreeSet等
3、Map 接口的实现子类 是双列集合,存放 K-V
- 实现Map接口的类:HashMap、TreeMap、Hashtable、Properties、LinkedHashMap


2.为什么使用集合
在学习集合之前我们存储多个数据使用的是数组
而在使用数组时,我们也可以发现,数组的使用有主要三点不足
- 长度开始时必须指定,而且一旦指定,不能更改
- 保存的必须为同一类型的元素
- 使用数组进行增加元素的示意代码
应对业务需求,选择需要的集合,可以很好的解决数组的不足之处
- 可以动态保存任意多个对象,使用方便
- 提供了一系列方便的操作对象的方法:add remove set get 等
- 使用集合添加,删除新元素的示意代码
二、Collection
1.Collection接口实现类的特点
public interface Collection<E> extends Iterable<E>
- 有些Collection 的实现类,List可以存放重复元素,Set不可以
- 有些Collection 的实现类,有些是有序的(List),有些不是有序的(Set)
- Collection 接口没有直接的实现子类,是通过它的子类接口Set和List来实现的
2.Collection接口中的常用方法
- add:添加单个元素
- remove:删除指定元素
- contains:查找元素是否存在
- size:获取元素个数
- isEmpty:判断是否为空
- clear:清空
- addAll:添加多个元素
- containsAll:查找多个元素是否都存在
- removeAll: 删除多个元素
public static void main(String[] args){
// 以 ArrayList 为例
// add:添加单个元素
List list = new ArrayList();
list.add("jack");
list.add(10);// 存入整数,会有一个自动装箱的过程 将int类型的10 ,转成 Integer 本质:list.add(new Integer(10))
list.add(true);// list.add(new Boolen(true))
System.out.println("list" + list);
// remove:删除指定元素
list.remove(0);
System.out.println(list);
list.remove(true);
System.out.println(list);
// contains 查找元素是否存在
System.out.println(list.contains("jack"));
// size:获取元素个数
System.out.println(list.size());
// isEmpty:判断是否为空
System.out.println(list.isEmpty());
// clear:清空
list.clear();
System.out.println(list);
// addAll:添加多个元素
List list2 = new ArrayList();
list2.add("西游记");
list2.add("红楼梦");
list.addAll(list2);
System.out.println(list);
// containsAll:查找多个元素是否都存在
System.out.println(list.containsAll(list2));
// removeAll: 删除多个元素
list.removeAll(list2);
System.out.println(list);
/**
* add:添加单个元素
* remove:删除指定元素
* contains:查找元素是否存在
* size:获取元素个数
* isEmpty:判断是否为空
* clear:清空
* addAll:添加多个元素
* containsAll:查找多个元素是否都存在
* removeAll: 删除多个元素
* */
}
三、Collection 接口遍历元素
1.方式一:使用Iterator(迭代器)
- Iterator 对象称为迭代器,主要用于遍历Collection集合中的元素。
- 所有实现了Collection 接口的集合类都有一个iterator()方法,用以返回一个实现了Iterator接口的对象,即:可以返回一个迭代器
- Iterator 仅用于遍历集合,Iterator本身并不存放对象

2.使用Iterator重要细节
public static void main(String[] args) {
Collection List = new ArrayList();
List.add(new Book("三国演义","罗贯中",33.5));
List.add(new Book("小李飞刀","古龙",32.9));
List.add(new Book("红楼梦","曹雪芹",33.6));
// System.out.println("List=" + List);
// 现在需要 遍历 List集合
// 1.先得到 List 对应的 迭代器
Iterator iterat = List.iterator();
// 显示所有的快捷键的快捷键 ctrl + j
// 使用 while 循环遍历 快捷建 itit
while (iterat.hasNext()){//判断是否还有数据
// 返回下一个元素,类型为OBject
Object obj = iterat.next();
System.out.println("obj=" + obj);
}
// 细节:当退出while循环后,这时iterator 迭代器,指向最后的元素
// 如果希望再次遍历 需要重置迭代器
iterat = List.iterator();
System.out.println("第二次遍历");
while (iterat.hasNext()) {
Object obj2 = iterat.next();
System.out.println("obj2="+obj2);
}
}
}
class Book{ // 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;
}
@Override
public String toString() {
return "Book{" +
"name='" + name + '\'' +
", author='" + author + '\'' +
", price=" + price +
'}';
}
}
3.方式二:增强for
增强 for 循环 可以代替iterator迭代器,特点:增强 for 就是简化版的iterator, 本质不一样,只能用于遍历集合与数组
1. 基本语法
for(元素类型 元素名 :集合名或数组名){
访问元素
}
public static void main(String[] args){
Collection col = new ArrayList();
col.add(new Book("三国演义","罗贯中",33.5));
col.add(new Book("小李飞刀","古龙",32.9));
col.add(new Book("红楼梦","曹雪芹",33.6));
// 使用增强 for
// 底层仍然是迭代器
// 快捷键 I
for (Object book : col){
System.out.println("book="+book);
}
}
4.小练习
1.创建3个Dog{name,age}对象,放热到ArrayList中,赋给 List 引用
2.用迭代器和增强 for 循环两种方式来遍历
3.重写Dog 的toString方法,输出name 和 age
参考答案:
public static void main(String[] args) {
List List1 = new ArrayList();
List1.add(new Dog("大黄",5));
List1.add(new Dog("大白",3));
List1.add(new Dog("小黑",6));
// 迭代器
Iterator iterator = List1.iterator();
while(iterator.hasNext()){
Object ogj = iterator.next();
System.out.println("ogj="+ogj);
}
// 增强for循环
for (Object obj : List1){
System.out.println("obj="+obj);
}
}
}
class Dog {
private String name;
private int age;
public Dog(String name, int age) {
this.name = name;
this.age = age;
}
@Override
public String toString() {
return "name='" + name +
", age=" + age ;
}
1201

被折叠的 条评论
为什么被折叠?



