应用场景
- 无法预测存储数据的数量
- 同时存储具有一对一关系的数据
- 需要进行数据的增删
- 数据重复问题(set不允许插入重复数据)
List(列表)
- 是元素有序并且可以重复的集合
- 可以精确控制每个元素的插入或删除某个位置
- 主要实现类是ArrayList和LinkedList
ArrayList
- 底层由数组实现
- 动态增长,以满足应用程序的需求
- 在列表尾部插入或删除数据非常有效
- 更适合查找和更新元素
- ArrayList中的元素可以为null
package com.imooc.set;
import java.util.ArrayList;
import java.util.Date;
public class NoticeTest {
public static void main(String[] args) {
//创建Notice类的对象,生成三条公告
Notice notice1 = new Notice(1,"欢迎来到慕课网","管理员", new Date());
Notice notice2 = new Notice(2,"请同学们按时提交作业","老师", new Date());
Notice notice3 = new Notice(3,"考勤通知","老师", new Date());
//添加公告
ArrayList noticeList = new ArrayList();
noticeList.add(notice1);
noticeList.add(notice2);
noticeList.add(notice3);
//在第一条公告后面添加一条新公告
Notice notice4=new Notice(4,"在线编辑器可以使用啦!","管理员",new Date());
noticeList.add(1,notice4);
//显示公告
System.out.println("公告的内容为:");
for(int i = 0; i < noticeList.size(); i ++) {
System.out.println(i+1+":"+((Notice)(noticeList.get(i))).getTitle());
}
System.out.println("*******************");
//删除按时完成作业的公告
noticeList.remove(2);
//显示公告
System.out.println("删除公告后的内容为:");
for(int i = 0; i < noticeList.size(); i ++) {
System.out.println(i+1+":"+((Notice)(noticeList.get(i))).getTitle());
}
//将第二条公告改为:Java在线编辑器可以使用啦!
System.out.println("************************");
//修改第二条公告中title的值
notice4.setTitle("Java在线编辑器可以使用啦!");
noticeList.set(1,notice4);
System.out.println("修改后公告的内容为:");
for(int i = 0; i < noticeList.size(); i ++) {
System.out.println(i+1+":"+((Notice)(noticeList.get(i))).getTitle());
}
}
}
公告的内容为:
1:欢迎来到慕课网
2:在线编辑器可以使用啦!
3:请同学们按时提交作业
4:考勤通知
删除公告后的内容为:
1:欢迎来到慕课网
2:在线编辑器可以使用啦!
3:考勤通知
修改后公告的内容为:
1:欢迎来到慕课网
2:Java在线编辑器可以使用啦!
3:考勤通知
Set
HashSet
- HashSet是Set的一个重要实现类,称为哈希集
- HashSet中的元素无序并且不可以重复
- HashSet中允许一个null元素
- 具有良好的存取和查找性能
Iterator(迭代器)
Iterator接口可以以统一的方式对各种集合元素进行遍历
hasNext(方法)检测集合中是否还有下一个元素
next()方法返回集合中的下一个元素
迭代器的遍历流程
package com.imooc.set;
import java.util.HashSet;
import java.util.Iterator;
import java.util.Set;
public class WordDemo {
public static void main(String[] args) {
//将英文单词添加到HashSet中
Set set = new HashSet();
//向集合中添加元素
set.add("blue");
set.add("red");
set.add("black");
set.add("yellow");
set.add("white");
//显示集合的内容
System.out.println("集合中的元素为:");
Iterator it = set.iterator();
//遍历迭代器并输出元素
while(it.hasNext()) {
System.out.print(it.next()+" ");
}
//在集合中插入一个新的单词
//set.add("green");
//set中的插入顺序不是顺序,不允许插入重复
set.add("white");
it = set.iterator();
//遍历迭代器并输出元素
System.out.println("***************");
System.out.println("插入重复元素后的输出结果为:");
while (it.hasNext()) {
System.out.print(it.next()+ " ");
}
}
}
集合中的元素为:
red blue white black yellow ***************
插入重复元素后的输出结果为:
red blue white black yellow
案例:宠物猫信息管理
需求
添加和显示宠物猫信息
查找某只宠物猫的信息并输出
修改宠物猫的信息
删除宠物猫的信息
属性:
- 名字 name
- 年龄 month
- 品种 species
方法
- 构造方法
- 获取和设置属性值的方法
- 其他方法
package com.imooc.set;
public class Goods {
private String id;
private String name;
private double price;
//构造方法
public Goods(String id,String name,double price) {
this.id = id;
this.name = name;
this.price = price;
}
//getter 和 setter 方法
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public double getPrice() {
return price;
}
public void setPrice(double price) {
this.price = price;
}
public String toString() {
return "商品编号:"+id+",商品名称:"+name+",商品价格:"+price;
}
}
package com.imooc.set;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Scanner;
public class GoodsTest {
public static void main(String[] args) {
Scanner console = new Scanner(System.in);
// 定义HashMap对象
Map<String,Goods> goodsMap = new HashMap<String,Goods>();
System.out.println("请输入三条商品信息:");
int i = 0;
while(i<3) {
System.out.println("请输入第"+(i+1)+"条商品信息:");
System.out.println("请输入商品编号:");
String goodsId = console.next();
//判断商品编号id是否存在
if(goodsMap.containsKey(goodsId)) {
System.out.println("该商品编号已经存在。请重新输入");
continue;
}
System.out.println("请输入商品名称:");
String goodsName = console.next();
System.out.println("请输入商品价格:");
double goodsPrice = 0;
try {
goodsPrice = console.nextDouble();
} catch(java.util.InputMismatchException e) {
System.out.println("商品价格的格式不正确,不是数值型,请输入数值型数据。");
console.next();
continue;
}
Goods goods = new Goods(goodsId,goodsName,goodsPrice);
//将商品信息添加到HashMap中
goodsMap.put(goodsId, goods);
i ++;
}
//遍历Map,输出商品信息
System.out.println("商品的全部信息为:");
Iterator<Goods> itGoods = goodsMap.values().iterator();
while(itGoods.hasNext()) {
System.out.println(itGoods.next());
}
}
}
编码重复会覆盖,所以要报错
价格输入值不是数值型会报错,要设置提示重新输入
总结![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/6a3d7b4881ed085ae0c9354643ed9225.png)