一、基本介绍:
1、引入:
(1)前面我们保存多个数据使用的是数组,但数组不足的地方有:
1)长度开始时必须指定,而且一旦指定,不能更改
2)保存的必须为同一类型的元素
3)使用数组进行增加元素的示意代码—比较麻烦
(2)集合
1)可以动态保存任意多个对象,使用比较方便!
2)提供了一系列方便的操作对象的方法:add、remove、set、get等
3)使用集合添加,删除新元素的示意代码—简洁了
2、java的集合类很多,主要分为两大类:
3、快速入门
package Collection_;import java.util.ArrayList;
import java.util.HashMap;public class Collection01 {@SuppressWarnings({"all"})public static void main(String[] args) {//单列集合,存放的是一个对象ArrayList arrayList=new ArrayList();arrayList.add("jack");arrayList.add("tom");//双列集合,存放的是键值对 K-VHashMap hasMap=new HashMap();hasMap.put("N01","Beijing");hasMap.put("N02","Shanghai");}
}
二、Collection接口和常用方法:
1、Collection接口实现类的特点:
(1)Collection实现子类可以存放多个元素,每个元素可以是Object
(2)有些Collection的实现类,可以存放重复的元素,有些不可以
(3)有些Collection的实现类,有些是有序的(List),有些不是有序的(Set)
(4)Collection接口没有直接地实现子类,是通过它的子接口Set和List来实现的
2、Collection接口常用方法:
package Collection_;import java.util.ArrayList;public class List_ {@SuppressWarnings({"all"})public static void main(String[] args) {ArrayList list=new ArrayList();list.add("jack");list.add(10);list.add(true);System.out.println("lsit="+list);//lsit=[jack, 10, true]list.remove(true);System.out.println("lsit删掉true了吗:"+list);//lsit删掉true了吗:[jack, 10]System.out.println("list是否包含jack:"+list.contains("jack"));//list是否包含jack:trueSystem.out.println("list包含的元素个数:"+list.size());//list包含的元素个数:2System.out.println("list是否为空:"+list.isEmpty());//list是否为空:falselist.clear();System.out.println("list是否已经清空:"+list);//list是否已经清空:[]ArrayList list2=new ArrayList();list2.add("tom");list2.add("smith");list.addAll(list2);System.out.println("list把list2的元素全部添加:"+list);//list把list2的元素全部添加:[tom, smith]System.out.println("在list中查找list2的全部元素:"+list.containsAll(list2));//在list中查找list2的全部元素:truelist.removeAll(list2);System.out.println("把list中list2的元素全部删掉:"+list);//把list中list2的元素全部删掉:[]}
}
3、Collection接口遍历元素方式:
(1)方式一:使用Iterator(迭代器)
1)Iterator对象称为迭代器,主要用于遍历Collection集合中的元素
2)所有实现了Collection接口的集合类都有一个Iterator()方法,用以返回一个实现了Iterator接口的对象,即可以返回一个迭代器
3)Iterator仅用于遍历集合,Iterator本身并不存放对象
4)
5)
package Collection_;import java.awt.print.Book;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;
import java.util.Objects;public class CollectionIterator {@SuppressWarnings({"all"})public static void main(String[] args) {Collection col=new ArrayList();col.add(new Book1("三国演义","罗贯中",10.1));col.add(new Book1("小李飞刀","古龙",5.1));col.add(new Book1("红楼梦","曹雪芹",34.6));//遍历col集合输出//1、先得到col对应的迭代器//2、使用while循环,快捷键:itit,//Ctrl+J可以查看更多的快捷键//3、当退出while循环后,这时iterator迭代器,指向最后的元素,iterator.next();报错//4、如果希望再次遍历,需要重置迭代器Iterator iterator=col.iterator();while(iterator.hasNext()){//判断是否还有数据//返回下一个元素,类型是Object,编译类型是Object,// 但运行类型取决于col集合里添加的内容,可能是Book1,也可能是StringObject obj=iterator.next();System.out.println("obj="+obj);}iterator=col.iterator();//重置迭代器System.out.println("=========第二次遍历========");while(iterator.hasNext()){Object obj=iterator.next();System.out.println("obj="+obj);}}
}
class Book1{private String name;private String author;private double price;public Book1(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 +'}';}
}
//obj=Book{name='三国演义', author='罗贯中', price=10.1}
//obj=Book{name='小李飞刀', author='古龙', price=5.1}
//obj=Book{name='红楼梦', author='曹雪芹', price=34.6}
//=========第二次遍历========
//obj=Book{name='三国演义', author='罗贯中', price=10.1}
//obj=Book{name='小李飞刀', author='古龙', price=5.1}
//obj=Book{name='红楼梦', author='曹雪芹', price=34.6}
(2)方式二:for循环增强
1)特点:增加for就是简化版的iterator,本质一样,只能用于遍历集合或数组
2)基本语法:
for(元素类型 元素名:集合名式数组名){访问元素;
}
package Collection_;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 Book1("三国演义","罗贯中",10.1));col.add(new Book1("小李飞刀","古龙",5.1));col.add(new Book1("红楼梦","曹雪芹",34.6));//1、在Collection集合中使用增强for//2、增强for,底层仍然是迭代器,所以增加for就是简化版的iterator//3、增强for的快捷键是Ifor(Object book:col){System.out.println("bool="+book);}}
}
//bool=Book{name='三国演义', author='罗贯中', price=10.1}
//bool=Book{name='小李飞刀', author='古龙', price=5.1}
//bool=Book{name='红楼梦', author='曹雪芹', price=34.6}
(3)练习题:
//我的代码:
package Collection_;import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;public class CollectionExercise {@SuppressWarnings({"all"})public static void main(String[] args) {Dog dog1=new Dog("jack",1);Dog dog2=new Dog("tom",2);Dog dog3=new Dog("smith",3);ArrayList list=new ArrayList();list.add(dog1);list.add(dog2);list.add(dog3);System.out.println("用迭代器来遍历:");Iterator iterator=list.iterator();while (iterator.hasNext()) {Object next = iterator.next();System.out.println(list);}System.out.println("用增强for循环来遍历:");for (Object dog :list) {System.out.println(list);}}
}
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 void setName(String name) {this.name = name;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}@Overridepublic String toString() {return "Dog{" +"name='" + name + '\'' +", age=" + age +'}';}
}
//用迭代器来遍历:
//[Dog{name='jack', age=1}, Dog{name='tom', age=2}, Dog{name='smith', age=3}]
//[Dog{name='jack', age=1}, Dog{name='tom', age=2}, Dog{name='smith', age=3}]
//[Dog{name='jack', age=1}, Dog{name='tom', age=2}, Dog{name='smith', age=3}]
//用增强for循环来遍历:
//[Dog{name='jack', age=1}, Dog{name='tom', age=2}, Dog{name='smith', age=3}]
//[Dog{name='jack', age=1}, Dog{name='tom', age=2}, Dog{name='smith', age=3}]
//[Dog{name='jack', age=1}, Dog{name='tom', age=2}, Dog{name='smith', age=3}]
//改进:list.add(new Dog("jack",1));list.add(new Dog("tom",2));list.add(new Dog("smith",3));