从零开始的Java开发1-5-4 ArrayListHashSetHashMap 概述与案例
Posted karshey
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了从零开始的Java开发1-5-4 ArrayListHashSetHashMap 概述与案例相关的知识,希望对你有一定的参考价值。
文章目录
集合框架的体系结构
List概述
- List是元素有序并且可以重复的集合,称为序列。
- List可以精确的控制每个元素的插入位置,或删除某个位置的元素。
- List的两个主要实现类是
ArrayList
和LinkedList
ArrayList
- ArrayList底层是由数组实现的
- 动态增长,以满足应用程序的需求
- 在列表尾部插入或删除数据非常有效
- 更适合查找和更新元素
- 元素可以为
null
案例:在List中操作String
add
size
get
remove
代码:
public static void main(String[] args)
// TODO Auto-generated method stub
// 用ArrayList存储编程语言的名称并输出:Java、C、C++、Go
List list = new ArrayList();
list.add("Java");
list.add("C");
list.add("C++");
list.add("Go");
// 输出列表中元素的个数
System.out.println(list.size());
// 遍历输出所有编程语言
for (int i = 0; i < list.size(); i++)
System.out.print(list.get(i) + " ");
System.out.println();
// 移除列表中的C++
list.remove(2);
// 移除列表中的Java
list.remove("Java");
// 查看
for (int i = 0; i < list.size(); i++)
System.out.print(list.get(i) + " ");
输出:
4
Java C C++ Go
C Go
案例:公告管理——在ArrayList中对自定义对象的操作
需求:
- 公告的添加和显示
- 在指定位置处插入公告
- 删除公告
- 修改公告
即:增删查改。
公告类属性:
- 编号 id
- 标题 title
- 创建人 creator
- 创建时间 createTime
公告类方法:
- 构造方法
- Getter Setter
公告类:
public class Notice
private int id;// ID
private String title;// 标题
private String creator;// 创建人
private Date createTime;// 创建时间
public Notice(int id, String title, String creator, Date createTime)
super();
this.id = id;
this.title = title;
this.creator = creator;
this.createTime = createTime;
public int getId()
return id;
public void setId(int id)
this.id = id;
public String getTitle()
return title;
public void setTitle(String title)
this.title = title;
public String getCreator()
return creator;
public void setCreator(String creator)
this.creator = creator;
public Date getCreateTime()
return createTime;
public void setCreateTime(Date createTime)
this.createTime = createTime;
公告测试类:
public class NoticeTest
public static void main(String[] args)
// 创建Notice类的对象,生成三条公告
Notice not1 = new Notice(1, "欢迎学习Java!", "管理员", new Date());
Notice not2 = new Notice(2, "请按时提交作业!", "老师", new Date());
Notice not3 = new Notice(3, "考勤通知!", "老师", new Date());
// 添加公告
ArrayList noticeList = new ArrayList();
noticeList.add(not1);
noticeList.add(not2);
noticeList.add(not3);
// 显示公告
System.out.println("公告内容为:");
for (int i = 0; i < noticeList.size(); i++)
// 要强制转换:因为get(i)返回的是Object,它没有getTitle方法
System.out.println((i + 1) + " " + ((Notice) (noticeList.get(i))).getTitle());
System.out.println();
// 在第一条公告后添加新公告
Notice not4 = new Notice(4, "在线编辑器可以使用了", "管理员", new Date());
noticeList.add(1, not4);
// 删除按时完成作业的公告
noticeList.remove(2);
// 显示公告
System.out.println("修改后公告内容为:");
for (int i = 0; i < noticeList.size(); i++)
// 要强制转换:因为get(i)返回的是Object,它没有getTitle方法
System.out.println((i + 1) + " " + ((Notice) (noticeList.get(i))).getTitle());
System.out.println();
//将第二条公告改为:Java在线编辑器可以使用了!
not4.setTitle("Java在线编辑器可以使用了");
// 显示公告
System.out.println("修改后公告内容为:");
for (int i = 0; i < noticeList.size(); i++)
// 要强制转换:因为get(i)返回的是Object,它没有getTitle方法
System.out.println((i + 1) + " " + ((Notice) (noticeList.get(i))).getTitle());
System.out.println();
输出:
公告内容为:
1 欢迎学习Java!
2 请按时提交作业!
3 考勤通知!
修改后公告内容为:
1 欢迎学习Java!
2 在线编辑器可以使用了
3 考勤通知!
修改后公告内容为:
1 欢迎学习Java!
2 Java在线编辑器可以使用了
3 考勤通知!
Set概述
Set
是元素无序且不可重复的集合,称为集HashSet
:是Set
的一个重要实现类,称为哈希集,具有良好的存取和查找性能,底层是HashMap
案例:在Set中操作String
用HashSet存储多个表示颜色的英文单词,并输出。
关于迭代器 Iterator
- Iterator接口可以以统一的方式对各种集合元素进行遍历
- 有两个重要的方法:
HasNext()
和next()
HasNext()
:检测集合中是否还有下一个元素next()
:返回集合中的下一个元素
由样例可见:set的插入是无序的,且不可重复。
public class SetDemo1
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("whilte");
// 显示输出
System.out.println("集合中的元素为:");
Iterator it = set.iterator();
while (it.hasNext())
System.out.print(it.next() + " ");
System.out.println();
// 在集合中插入新的单词
set.add("green");
// 再显示输出
System.out.println("插入元素后集合中的元素为:");
it = set.iterator();
while (it.hasNext())
System.out.print(it.next() + " ");
System.out.println();
// 重复插入
set.add("green");
// 再显示输出
System.out.println("插入重复元素后的集合中的元素为:");
it = set.iterator();
while (it.hasNext())
System.out.print(it.next() + " ");
// 插入失败,但是不会报错
输出:
集合中的元素为:
red blue black yellow whilte
插入元素后集合中的元素为:
red green blue black yellow whilte
插入重复元素后的集合中的元素为:
red green blue black yellow whilte
案例:宠物猫信息管理——在HashSet中对自定义对象的操作
需求:
- 添加和显示宠物猫的信息
- 查找某只宠物猫的信息并输出
- 修改宠物猫的信息
- 删除宠物猫的信息
即:增删查改。
宠物猫属性:
- 名字 name
- 年龄 month
- 品种 species
宠物猫方法:
- 构造方法
- Getter Setter 方法
- 其他方法
重写toString
,hashCode
,equals
方法可以这样:
增
没有重写hashCode
和equals
方法的情况:
宠物猫类:
public class Cat
private String name;// 名字
private int month;// 年龄
private String species;// 品种
public Cat(String name, int month, String species)
super();
this.name = name;
this.month = month;
this.species = species;
public String getName()
return name;
public void setName(String name)
this.name = name;
public int getMonth()
return month;
public void setMonth(int month)
this.month = month;
public String getSpecies()
return species;
public void setSpecies(String species)
this.species = species;
// 重写toString方法
@Override
public String toString()
return "[姓名=" + name + ", 年龄=" + month + ", 品种=" + species + "]";
测试类:
public class CatTest
public static void main(String[] args)
// 定义宠物猫对象
Cat cat1 = new Cat("花花", 1, "狸花");
Cat cat2 = new Cat("草草", 2, "英短");
// 将宠物猫对象放到HashSet中
Set set = new HashSet();
set.add(cat1);
set.add(cat2);
// 显示
System.out.println("显示输出:");
Iterator it = set.iterator();
while (it.hasNext())
System.out.println(((Cat) (it.next())).toString());
System.out.println();
// 添加重复数据
Cat cat3 = new Cat("花花", 1, "狸花");
set.add(cat3);
// 显示
System.out.println("插入重复的猫后显示输出:");
it = set.iterator();
while (it.hasNext())
System.out.println(((Cat) (it.next())).toString());
System.out.println();
//发现插入成功
输出:插入成功
显示输出:
[姓名=花花, 年龄=1, 品种=狸花]
[姓名=草草, 年龄=2, 品种=英短]
插入重复的猫后显示输出:
[姓名=花花, 年龄=1, 品种=狸花]
[姓名=花花, 年龄=1, 品种=狸花]
[姓名=草草, 年龄=2, 品种=英短]
重写了hashCode
和equals
方法的情况:
// 重写HashCode
@Override
public int hashCode()
return Objects.hash(month, name, species);
// 重写equals
@Override
public boolean equals(Object obj)
// 对象相等返回true
if (this == obj)
return true;
// 比较内容
if (obj.getClass() == Cat.class)
Cat cat = (Cat) obj;
return cat.getName().equals(name) && cat.getMonth() == month && cat.getSpecies().equals(species);
return false;
测试输出:插入失败
显示输出:
[姓名=花花, 年龄=1, 品种=狸花]
[姓名=草草, 年龄=2, 品种=英短]
插入重复的猫后显示输出:
[姓名=花花, 年龄=1, 品种=狸花]
[姓名=草草, 年龄=2, 品种=英短]
显然,重写后的才符合HashSet的要求。
查
测试类添加代码如下:
// 在集合中查找草草的信息并输出
// 通过对象查找
if (set.contains(cat2))
System.out.println("草草找到了!");
System.out.println(cat2);
else
System.out.println("草草没找到!");
// 通过名字查找
it = set.iterator();
boolean flag = false;
Cat temp;
while (it.hasNext())
temp = (Cat) (itJava开发从零开始!java游戏服务器开发教程