重新搞一波 复习巩固

简单记录 慕课网 imooc Java工程师

List Set Map

集合框架

疑问:

为什么使用集合,而不用数组?

我也不知道,那为什么要使用数组呢?

我们需要存储一组(类型相同)的元素的时候,使用数组来保存的。(数组具有固定的大小,存储数据类型是单一的。)

但数组一旦定义,长度不能再变化。想保存动态的数据那怎么办呢?那就需要集合框架了,集合大小可动态扩展,可根据需要改变集合的大小,是存放引用类型数据的容器 。

集合应用场景

  • 无法预测存储数据的数量

  • 同时存储具有一对一关系的数据

  • 需要进行数据的增删改查

  • 数据重复问题

Set不允许插入重复的元素

集合框架的体系结构

Collection -> List -> ArrayList、LinkedList

Collection -> Queue -> LinkedList

Collection -> Set -> HashSet

Map -> HashMap

List(列表)

  • List是元素有序并且可以重复的集合,称为序列

  • List可以精确的控制每个元素的插入位置,或删除某个位置的元素

  • List的两个主要实现类是ArrayList和LinkedList

ArrayList

  • ArrayList底层是由数组实现的

  • 动态增长,以满足应用程序的需求

  • 在列表尾部插入或删除非常有效

  • 更适合查找和更新元素

  • ArrayList中的元素可以为null

案例

案例:用ArrayList存储编程语言的名称,并输出。

名称包括“Java”、“C++”、“C“、”Go“、和”Swift“

ListDemo.java

  1. package list;
  2. import java.util.ArrayList;
  3. import java.util.List;
  4. /**
  5. * @author Liu Awen Email:willowawen@gmail.com
  6. * @create 2018-12-18 11:40 AM
  7. */
  8. public class ListDemo {
  9. public static void main(String[] args) {
  10. // 用ArrayList存储编程语言的名称,并输出
  11. List list=new ArrayList();
  12. list.add("Java");
  13. list.add("C");
  14. list.add("C++");
  15. list.add("Go");
  16. list.add("Swift");
  17. //输出列表中元素的个数
  18. System.out.println("列表中元素的个数为:"+list.size());
  19. //遍历输出所有编程语言
  20. System.out.println("**************************************");
  21. for(int i=0;i<list.size();i++){
  22. System.out.print(list.get(i)+",");
  23. }
  24. //移除列表中的C++
  25. System.out.println();
  26. //list.remove(2);
  27. list.remove("C++");
  28. System.out.println("**************************************");
  29. System.out.println("移除C++以后的列表元素为:");
  30. for(int i=0;i<list.size();i++){
  31. System.out.print(list.get(i)+",");
  32. }
  33. }
  34. }

案例 公告管理

需求

  • 公告的添加和显示
  • 在指定位置处插入公告
  • 删除公告
  • 修改公告

公告类属性

  • 编号id
  • 标题title
  • 创建人creator
  • 创建时间createTime

公告类方法

  • 构造方法
  • 获取和设置属性值的方法

Notice.java

  1. package list;
  2. import java.util.Date;
  3. /**
  4. * @author Liu Awen Email:willowawen@gmail.com
  5. * @create 2018-12-20 06:46 AM
  6. */
  7. public class Notice {
  8. private int id;//ID
  9. private String title;//标题
  10. private String creator;//创建人
  11. private Date createTime;//创建时间
  12. public Notice(int id, String title, String creator, Date createTime) {
  13. super();
  14. this.id = id;
  15. this.title = title;
  16. this.creator = creator;
  17. this.createTime = createTime;
  18. }
  19. public int getId() {
  20. return id;
  21. }
  22. public void setId(int id) {
  23. this.id = id;
  24. }
  25. public String getTitle() {
  26. return title;
  27. }
  28. public void setTitle(String title) {
  29. this.title = title;
  30. }
  31. public String getCreator() {
  32. return creator;
  33. }
  34. public void setCreator(String creator) {
  35. this.creator = creator;
  36. }
  37. public Date getCreateTime() {
  38. return createTime;
  39. }
  40. public void setCreateTime(Date createTime) {
  41. this.createTime = createTime;
  42. }
  43. }

Result

  1. D:\Environments\jdk-11.0.2\bin\java.exe -javaagent:D:\Java\ideaIU-2019.2.win\lib\idea_rt.jar=2602:D:\Java\ideaIU-2019.2.win\bin -Dfile.encoding=UTF-8 -classpath D:\IdeaProjects\imooc_Java_Engineer\out\production\Collection ArrayList.ArrayListDemo
  2. 列表中元素的个数为:7
  3. **************************************
  4. Java,C,C++,Go,Swift,Python,JavaScript,
  5. **************************************
  6. 移除C++以后的列表元素为:
  7. Java,C,Go,Swift,Python,JavaScript,
  8. Process finished with exit code 0

NoticeTest.java

  1. package list;
  2. import java.util.ArrayList;
  3. import java.util.Date;
  4. /**
  5. * @author Liu Awen Email:willowawen@gmail.com
  6. * @create 2018-12-21 11:47 AM
  7. */
  8. public class NoticeTest {
  9. public static void main(String[] args) {
  10. // 创建Notice类的对象,生成三条公告
  11. Notice notice1 = new Notice(1, "欢迎来到慕课网!", "管理员", new Date());
  12. Notice notice2 = new Notice(2, "请同学们按时提交作业!", "老师", new Date());
  13. Notice notice3 = new Notice(3, "考勤通知!", "老师", new Date());
  14. // 添加公告
  15. ArrayList noticeList = new ArrayList();
  16. noticeList.add(notice1);
  17. noticeList.add(notice2);
  18. noticeList.add(notice3);
  19. // 显示公告
  20. System.out.println("公告的内容为:");
  21. for (int i = 0; i < noticeList.size(); i++) {
  22. System.out.println(i + 1 + ":" + ((Notice) (noticeList.get(i))).getTitle());
  23. }
  24. System.out.println("**************************************");
  25. // 在第一条公告后面添加一条新公告
  26. Notice notice4 = new Notice(4, "在线编辑器可以使用啦!", "管理员", new Date());
  27. noticeList.add(1, notice4);
  28. // 显示公告
  29. System.out.println("公告的内容为:");
  30. for (int i = 0; i < noticeList.size(); i++) {
  31. System.out.println(i + 1 + ":" + ((Notice) (noticeList.get(i))).getTitle());
  32. }
  33. System.out.println("**************************************");
  34. // 删除按时提交作业的公告
  35. noticeList.remove(2);
  36. // 显示公告
  37. System.out.println("删除公告后的内容为:");
  38. for (int i = 0; i < noticeList.size(); i++) {
  39. System.out.println(i + 1 + ":" + ((Notice) (noticeList.get(i))).getTitle());
  40. }
  41. //将第二条公告改为:Java在线编辑器可以使用啦!
  42. System.out.println("**************************************");
  43. //修改第二条公告中title的值
  44. notice4.setTitle("Java在线编辑器可以使用啦!");
  45. noticeList.set(1, notice4);
  46. System.out.println("修改后公告的内容为:");
  47. for (int i = 0; i < noticeList.size(); i++) {
  48. System.out.println(i + 1 + ":" + ((Notice) (noticeList.get(i))).getTitle());
  49. }
  50. }
  51. }
  52. package ArrayList;
  53. import java.util.ArrayList;
  54. import java.util.Date;
  55. /**
  56. * @author Liu Awen Email:willowawen@gmail.com
  57. * @create 2018-12-19 11:47 AM
  58. */
  59. public class NoticeTest {
  60. public static void main(String[] args) {
  61. // 创建Notice类的对象,生成三条公告
  62. Notice notice1 = new Notice(1, "欢迎来到慕课网!", "管理员", new Date());
  63. Notice notice2 = new Notice(2, "请同学们按时提交作业!", "老师", new Date());
  64. Notice notice3 = new Notice(3, "考勤通知!", "老师", new Date());
  65. // 添加公告
  66. ArrayList noticeList = new ArrayList();
  67. noticeList.add(notice1);
  68. noticeList.add(notice2);
  69. noticeList.add(notice3);
  70. // 显示公告
  71. System.out.println("公告的内容为:");
  72. for (int i = 0; i < noticeList.size(); i++) {
  73. System.out.println(i + 1 + ":" + ((Notice) (noticeList.get(i))).getTitle());
  74. }
  75. System.out.println("**************************************");
  76. // 在第一条公告后面添加一条新公告
  77. Notice notice4 = new Notice(4, "在线编辑器可以使用啦!", "管理员", new Date());
  78. noticeList.add(1, notice4);
  79. // 显示公告
  80. System.out.println("公告的内容为:");
  81. for (int i = 0; i < noticeList.size(); i++) {
  82. System.out.println(i + 1 + ":" + ((Notice) (noticeList.get(i))).getTitle());
  83. }
  84. System.out.println("**************************************");
  85. // 删除按时提交作业的公告
  86. noticeList.remove(2);
  87. // 显示公告
  88. System.out.println("删除公告后的内容为:");
  89. for (int i = 0; i < noticeList.size(); i++) {
  90. System.out.println(i + 1 + ":" + ((Notice) (noticeList.get(i))).getTitle());
  91. }
  92. //将第二条公告改为:Java在线编辑器可以使用啦!
  93. System.out.println("**************************************");
  94. //修改第二条公告中title的值
  95. notice4.setTitle("Java在线编辑器可以使用啦!");
  96. noticeList.set(1, notice4);
  97. System.out.println("修改后公告的内容为:");
  98. for (int i = 0; i < noticeList.size(); i++) {
  99. System.out.println(i + 1 + ":" + ((Notice) (noticeList.get(i))).getTitle());
  100. }
  101. }
  102. }

Result

  1. D:\Environments\jdk-11.0.2\bin\java.exe -javaagent:D:\Java\ideaIU-2019.2.win\lib\idea_rt.jar=1934:D:\Java\ideaIU-2019.2.win\bin -Dfile.encoding=UTF-8 -classpath D:\IdeaProjects\imooc_Java_Engineer\out\production\Collection ArrayList.NoticeTest
  2. 公告的内容为:
  3. 1:欢迎来到慕课网!
  4. 2:请同学们按时提交作业!
  5. 3:考勤通知!
  6. **************************************
  7. 公告的内容为:
  8. 1:欢迎来到慕课网!
  9. 2:在线编辑器可以使用啦!
  10. 3:请同学们按时提交作业!
  11. 4:考勤通知!
  12. **************************************
  13. 删除公告后的内容为:
  14. 1:欢迎来到慕课网!
  15. 2:在线编辑器可以使用啦!
  16. 3:考勤通知!
  17. **************************************
  18. 修改后公告的内容为:
  19. 1:欢迎来到慕课网!
  20. 2:Java在线编辑器可以使用啦!
  21. 3:考勤通知!
  22. Process finished with exit code 0

Set

Set是元素无序并且不可以重复的集合,被称为集。

HashSet

  • HashSet是Set的一个重要实现类,称为哈希集

  • HashSet中的元素无序并且可以重复

  • HashSet中只允许一个null元素

  • 具有良好的存取和查找性能

案例

  • 用HashSet存储多个表示颜色的英文单词,并输出

  • 单词包括:

    ”blue“、”red“、”black“、”yellow“、和”white“

WordDemo.java

  1. package set;
  2. import java.util.HashSet;
  3. import java.util.Iterator;
  4. import java.util.Set;
  5. /**
  6. * @author Liu Awen Email:willowawen@gmail.com
  7. * @create 2018-12-20 12:02 PM
  8. */
  9. public class WordDemo {
  10. public static void main(String[] args) {
  11. // 将英文单词添加到HashSet中
  12. Set set = new HashSet();
  13. // 向集合中添加元素
  14. set.add("blue");
  15. set.add("red");
  16. set.add("black");
  17. set.add("yellow");
  18. set.add("white");
  19. // 显示集合的内容
  20. System.out.println("集合中的元素为:");
  21. Iterator it = set.iterator();
  22. // 遍历迭代器并输出元素
  23. while (it.hasNext()) {
  24. System.out.print(it.next() + " ");
  25. }
  26. System.out.println();
  27. // 在集合中插入一个新的单词
  28. // set.add("green");
  29. set.add("green");
  30. it = set.iterator();
  31. // 遍历迭代器并输出元素
  32. System.out.println("**************************");
  33. System.out.println("插入新元素后的输出结果为:");
  34. while (it.hasNext()) {
  35. System.out.print(it.next() + " ");
  36. }
  37. System.out.println();
  38. set.add("white");
  39. it = set.iterator();
  40. // 遍历迭代器并输出元素
  41. System.out.println("**************************");
  42. System.out.println("插入重复元素后的输出结果为:");
  43. while (it.hasNext()) {
  44. System.out.print(it.next() + " ");
  45. }
  46. //插入失败,但是不会报错
  47. }
  48. }

Result

  1. D:\Environments\jdk-11.0.2\bin\java.exe -javaagent:D:\Java\ideaIU-2019.2.win\lib\idea_rt.jar=4266:D:\Java\ideaIU-2019.2.win\bin -Dfile.encoding=UTF-8 -classpath D:\IdeaProjects\imooc_Java_Engineer\out\production\Collection set.WordDemo
  2. 集合中的元素为:
  3. red blue white black yellow
  4. **************************
  5. 插入新元素后的输出结果为:
  6. red green blue white black yellow
  7. **************************
  8. 插入重复元素后的输出结果为:
  9. red green blue white black yellow
  10. Process finished with exit code 0

案例:宠物猫信息管理

需求

  • 添加和现实宠物猫信息
  • 查询某只宠物猫的信息并输出
  • 修改宠物猫的信息
  • 删除宠物猫信息

属性

  • 名字 name
  • 年龄 month
  • 品种 species

方法

  • 构造方法

  • 过去和设置属性值的方法

  • 其他方法

Cat.java

  1. package set;
  2. /**
  3. * @author Liu Awen Email:willowawen@gmail.com
  4. * @create 2018-12-20 12:07 PM
  5. */
  6. public class Cat {
  7. private String name; //名字
  8. private int month; //年龄
  9. private String species;//品种
  10. //构造方法
  11. public Cat(String name, int month, String species) {
  12. super();
  13. this.name = name;
  14. this.month = month;
  15. this.species = species;
  16. }
  17. //getter与setter方法
  18. public String getName() {
  19. return name;
  20. }
  21. public void setName(String name) {
  22. this.name = name;
  23. }
  24. public int getMonth() {
  25. return month;
  26. }
  27. public void setMonth(int month) {
  28. this.month = month;
  29. }
  30. public String getSpecies() {
  31. return species;
  32. }
  33. public void setSpecies(String species) {
  34. this.species = species;
  35. }
  36. @Override
  37. public String toString() {
  38. return "[姓名:" + name + ", 年龄:" + month + ", 品种:" + species + "]";
  39. }
  40. @Override
  41. public int hashCode() {
  42. final int prime = 31;
  43. int result = 1;
  44. result = prime * result + month;
  45. result = prime * result + ((name == null) ? 0 : name.hashCode());
  46. result = prime * result + ((species == null) ? 0 : species.hashCode());
  47. return result;
  48. }
  49. @Override
  50. public boolean equals(Object obj) {
  51. //判断对象是否相等,相等则返回true,不用继续比较属性了
  52. if(this==obj)
  53. return true;
  54. //判断obj是否是Cat类的对象
  55. if(obj.getClass()==Cat.class){
  56. Cat cat=(Cat)obj;
  57. return cat.getName().equals(name)&&(cat.getMonth()==month)&&(cat.getSpecies().equals(species));
  58. }
  59. return false;
  60. }
  61. }

CatTest.java

  1. package set;
  2. import java.util.HashSet;
  3. import java.util.Iterator;
  4. import java.util.Set;
  5. /**
  6. * @author Liu Awen Email:willowawen@gmail.com
  7. * @create 2018-12-20 13:08 PM
  8. */
  9. public class CatTest {
  10. public static void main(String[] args) {
  11. // 定义宠物猫对象
  12. Cat huahua = new Cat("花花", 12, "英国短毛猫");
  13. Cat fanfan = new Cat("凡凡", 3, "中华田园猫");
  14. // 将宠物猫对象放入HashSet中
  15. Set<Cat> set = new HashSet<Cat>();
  16. set.add(huahua);
  17. set.add(fanfan);
  18. // 显示宠物猫信息
  19. Iterator<Cat> it = set.iterator();
  20. while (it.hasNext()) {
  21. System.out.println(it.next());
  22. }
  23. // 再添加一个与花花属性一样的猫
  24. Cat huahua01 = new Cat("花花", 12, "英国短毛猫");
  25. set.add(huahua01);
  26. System.out.println("**********************************");
  27. System.out.println("添加重复数据后的宠物猫信息:");
  28. it = set.iterator();
  29. while (it.hasNext()) {
  30. System.out.println(it.next());
  31. }
  32. System.out.println("**********************************");
  33. // 重新插入一个新宠物猫
  34. Cat huahua02 = new Cat("花花二代", 2, "英国短毛猫");
  35. set.add(huahua02);
  36. System.out.println("添加花花二代后的宠物猫信息:");
  37. it = set.iterator();
  38. while (it.hasNext()) {
  39. System.out.println(it.next());
  40. }
  41. System.out.println("**********************************");
  42. // 在集合中查找花花的信息并输出
  43. if (set.contains(huahua)) {
  44. System.out.println("花花找到了!");
  45. System.out.println(huahua);
  46. } else {
  47. System.out.println("花花没找到!");
  48. }
  49. // 在集合中使用名字查找花花的信息
  50. System.out.println("**********************************");
  51. System.out.println("通过名字查找花花信息");
  52. boolean flag = false;
  53. Cat c = null;
  54. it = set.iterator();
  55. while (it.hasNext()) {
  56. c = it.next();
  57. if (c.getName().equals("花花")) {
  58. flag = true;// 找到了
  59. break;
  60. }
  61. }
  62. if (flag) {
  63. System.out.println("花花找到了");
  64. System.out.println(c);
  65. } else {
  66. System.out.println("花花没找到");
  67. }
  68. // 删除花花二代的信息并重新输出
  69. for (Cat cat : set) {
  70. if ("花花二代".equals(cat.getName())) {
  71. set.remove(cat);
  72. break; }
  73. }
  74. System.out.println("**********************************");
  75. System.out.println("删除花花二代后的数据");
  76. for(Cat cat:set){
  77. System.out.println(cat);
  78. }
  79. //删除集合中的所有宠物猫信息
  80. System.out.println("**********************************");
  81. boolean flag1=set.removeAll(set);
  82. if(set.isEmpty()){
  83. System.out.println("猫都不见了。。。");
  84. }else{
  85. System.out.println("猫还在。。。");
  86. }
  87. }
  88. }

Result

  1. D:\Environments\jdk-11.0.2\bin\java.exe -javaagent:D:\Java\ideaIU-2019.2.win\lib\idea_rt.jar=4377:D:\Java\ideaIU-2019.2.win\bin -Dfile.encoding=UTF-8 -classpath D:\IdeaProjects\imooc_Java_Engineer\out\production\Collection set.CatTest
  2. [姓名:花花, 年龄:12, 品种:英国短毛猫]
  3. [姓名:凡凡, 年龄:3, 品种:中华田园猫]
  4. **********************************
  5. 添加重复数据后的宠物猫信息:
  6. [姓名:花花, 年龄:12, 品种:英国短毛猫]
  7. [姓名:凡凡, 年龄:3, 品种:中华田园猫]
  8. **********************************
  9. 添加花花二代后的宠物猫信息:
  10. [姓名:花花, 年龄:12, 品种:英国短毛猫]
  11. [姓名:凡凡, 年龄:3, 品种:中华田园猫]
  12. [姓名:花花二代, 年龄:2, 品种:英国短毛猫]
  13. **********************************
  14. 花花找到了!
  15. [姓名:花花, 年龄:12, 品种:英国短毛猫]
  16. **********************************
  17. 通过名字查找花花信息
  18. 花花找到了
  19. [姓名:花花, 年龄:12, 品种:英国短毛猫]
  20. **********************************
  21. 删除花花二代后的数据
  22. [姓名:花花, 年龄:12, 品种:英国短毛猫]
  23. [姓名:凡凡, 年龄:3, 品种:中华田园猫]
  24. **********************************
  25. 猫都不见了。。。
  26. Process finished with exit code 0

iterator(迭代器)

  • Iterator接口可以以统一的方式对各种集合元素进行遍历

  • hasNext()方法检测集合中是否还有下一个元素

  • next()方法返回集合中的下一个元素

Map

  • Map中的数据是以键值对(key-value)的形式存储的
  • key-value以Entry类型的对象实例存在
  • 可以通过key值快速地查找value
  • 一个映射不能包含重复的键
  • 每个键最多只能映射到一个元值

HashMap

  • 基于哈希表的Map接口的实现
  • 允许使用null值和null键
  • key值不允许重复
  • HashMap中的Entry对象是无序排列的

案例

完成一个类似字典的功能

  • 将单词以及单词中的注释存储到HashMap中
  • 显示HashMap中的内容
  • 查找某个单词的注释并显示

DictionaryDemo.java

  1. package Map;
  2. import java.util.HashMap;
  3. import java.util.Iterator;
  4. import java.util.Map;
  5. import java.util.Map.Entry;
  6. import java.util.Scanner;
  7. import java.util.Set;
  8. import java.util.*;
  9. /**
  10. * @author Liu Awen Email:willowawen@gmail.com
  11. * @create 2018-12-22 12:18 PM
  12. */
  13. public class DictionaryDemo {
  14. public static void main(String[] args) {
  15. Map<String,String> animal=new HashMap<String,String>();
  16. System.out.println("请输入三组单词对应的注释,并存放到HashMap中");
  17. Scanner console=new Scanner(System.in);
  18. //添加数据
  19. int i=0;
  20. while(i<3){
  21. System.out.println("请输入key值(单词):");
  22. String key=console.next();
  23. System.out.println("请输入value值(注释):");
  24. String value=console.next();
  25. animal.put(key, value);
  26. i++;
  27. }
  28. //打印输出value的值(直接使用迭代器)
  29. System.out.println("*****************************************");
  30. System.out.println("使用迭代器输出所有的value:");
  31. Iterator<String> it=animal.values().iterator();
  32. while(it.hasNext()){
  33. System.out.print(it.next()+" ");
  34. }
  35. System.out.println();
  36. System.out.println("*****************************************");
  37. //打印输出key和value的值
  38. //通过entrySet方法
  39. System.out.println("通过entrySet方法得到key-value:");
  40. Set<Entry<String, String>> entrySet=animal.entrySet();
  41. for(Entry<String, String> entry:entrySet){
  42. System.out.print(entry.getKey()+"-");;
  43. System.out.println(entry.getValue());
  44. }
  45. System.out.println();
  46. System.out.println("*****************************************");
  47. //通过单词找到注释并输出
  48. //使用keySet方法
  49. System.out.println("请输入要查找的单词:");
  50. String strSearch=console.next();
  51. //1.取得keySet
  52. Set<String> keySet=animal.keySet();
  53. //2.遍历keySet
  54. for(String key:keySet){
  55. if(strSearch.equals(key)){
  56. System.out.println("找到了!"+"键值对为:"+key+"-"+animal.get(key));
  57. break;
  58. }
  59. }
  60. }
  61. }

Result

  1. D:\Environments\jdk-11.0.2\bin\java.exe -javaagent:D:\Java\ideaIU-2019.2.win\lib\idea_rt.jar=5621:D:\Java\ideaIU-2019.2.win\bin -Dfile.encoding=UTF-8 -classpath D:\IdeaProjects\imooc_Java_Engineer\out\production\Collection Map.DictionaryDemo
  2. 请输入三组单词对应的注释,并存放到HashMap
  3. 请输入key值(单词):
  4. hello
  5. 请输入value值(注释):
  6. 你好
  7. 请输入key值(单词):
  8. world
  9. 请输入value值(注释):
  10. 世界
  11. 请输入key值(单词):
  12. Java
  13. 请输入value值(注释):
  14. Java就是Java
  15. *****************************************
  16. 使用迭代器输出所有的value
  17. Java就是Java 世界 你好
  18. *****************************************
  19. 通过entrySet方法得到keyvalue
  20. Java-Java就是Java
  21. world-世界
  22. hello-你好
  23. *****************************************
  24. 请输入要查找的单词:
  25. Java
  26. 找到了!键值对为:Java-Java就是Java
  27. Process finished with exit code 0

商品信息管理

使用HashMap对商品信息进行管理

  • 其中key为商品编号,value为商品对象

对HashMap中的商品信息进行增、删、改、查操作

分析商品信息类

属性

  • 商品编号:id

  • 商品名称:name

  • 商品价格:price

方法

  • 构造方法
  • 获取和设置属性值的方法
  • 其他方法

Goods.java

  1. package map;
  2. /**
  3. * @author Liu Awen Email:willowawen@gmail.com
  4. * @create 2018-12-21 12:51 PM
  5. */
  6. public class Goods {
  7. private String id;//商品编号
  8. private String name;//商品名称
  9. private double price;//商品价格
  10. //构造方法
  11. public Goods(String id,String name,double price){
  12. this.id=id;
  13. this.name=name;
  14. this.price=price;
  15. }
  16. //getter和setter方法
  17. public String getId() {
  18. return id;
  19. }
  20. public void setId(String id) {
  21. this.id = id;
  22. }
  23. public String getName() {
  24. return name;
  25. }
  26. public void setName(String name) {
  27. this.name = name;
  28. }
  29. public double getPrice() {
  30. return price;
  31. }
  32. public void setPrice(double price) {
  33. this.price = price;
  34. }
  35. public String toString(){
  36. return "商品编号:"+id+",商品名称:"+name+",商品价格:"+price;
  37. }
  38. }

GoodsTest.java

  1. package map;
  2. import java.util.HashMap;
  3. import java.util.Iterator;
  4. import java.util.Map;
  5. import java.util.Scanner;
  6. /**
  7. * @author Liu Awen Email:willowawen@gmail.com
  8. * @create 2018-12-21 12:52 PM
  9. */
  10. public class GoodsTest {
  11. public static void main(String[] args) {
  12. Scanner console = new Scanner(System.in);
  13. // 定义HashMap对象
  14. Map<String, Goods> goodsMap = new HashMap<String, Goods>();
  15. System.out.println("请输入三条商品信息:");
  16. int i = 0;
  17. while (i < 3) {
  18. System.out.println("请输入第" + (i + 1) + "条商品信息:");
  19. System.out.println("请输入商品编号:");
  20. String goodsId = console.next();
  21. // 判断商品编号id是否存在
  22. if (goodsMap.containsKey(goodsId)) {
  23. System.out.println("该商品编号已经存在!请重新输入!");
  24. continue;
  25. }
  26. System.out.println("请输入商品名称:");
  27. String goodsName = console.next();
  28. System.out.println("请输入商品价格:");
  29. double goodsPrice = 0;
  30. try {
  31. goodsPrice = console.nextDouble();
  32. } catch (java.util.InputMismatchException e) {
  33. System.out.println("商品价格的格式不正确,请输入数值型数据!");
  34. console.next();
  35. continue;
  36. }
  37. Goods goods = new Goods(goodsId, goodsName, goodsPrice);
  38. // 将商品信息添加到HashMap中
  39. goodsMap.put(goodsId, goods);
  40. i++;
  41. }
  42. // 遍历Map,输出商品信息
  43. System.out.println("商品的全部信息为:");
  44. Iterator<Goods> itGoods = goodsMap.values().iterator();
  45. while (itGoods.hasNext()) {
  46. System.out.println(itGoods.next());
  47. }
  48. }
  49. }

Result

  1. D:\Environments\jdk-11.0.2\bin\java.exe -javaagent:D:\Java\ideaIU-2019.2.win\lib\idea_rt.jar=8689:D:\Java\ideaIU-2019.2.win\bin -Dfile.encoding=UTF-8 -classpath D:\IdeaProjects\imooc_Java_Engineer\out\production\Collection map.GoodsTest
  2. 请输入三条商品信息:
  3. 请输入第1条商品信息:
  4. 请输入商品编号:
  5. 001
  6. 请输入商品名称:
  7. 不清楚
  8. 请输入商品价格:
  9. 100
  10. 请输入第2条商品信息:
  11. 请输入商品编号:
  12. 002
  13. 请输入商品名称:
  14. 不知道
  15. 请输入商品价格:
  16. 200
  17. 请输入第3条商品信息:
  18. 请输入商品编号:
  19. 你好呀
  20. 请输入商品名称:
  21. 300
  22. 请输入商品价格:
  23. 300
  24. 商品的全部信息为:
  25. 商品编号:001,商品名称:不清楚,商品价格:100.0
  26. 商品编号:002,商品名称:不知道,商品价格:200.0
  27. 商品编号:你好呀,商品名称:300,商品价格:300.0
  28. Process finished with exit code 0

集合总结

List 、Map、Set总结

Collection Map

List Queue Set

ArrayList LinkedList HashSet

HashMap <Key,Value>

Java常用类的方法 查找去使用

ArrayList

  • 底层由数组实现
  • 元素有序且可以重复
  • 可以动态增长,以满足应用程序的需求
  • 元素值可以为null

顺序存储

常用方法的使用

HashSet

  • 元素无序并且不可以重复
  • 只允许一个null元素

HashMap

  • 键不能重复
  • 允许使用null值和null键
  • HashMap中的Entry对象是无序排列的

Iterator 迭代器

iterator接口以统一的方法对各种集合元素进行遍历

  1. Iterator<String> it = set.iterator();
  2. while(it.hasNext()){
  3. System.out.print(it.next() + "");
  4. }

下一个数据是否还有内容 it.hasNext()

泛型

hashCode()

  1. public int hashCode(){
  2. final int prime = 31;
  3. int result = 1;
  4. result = prime * result + age;
  5. result = prime * result + ((name == null) ? 0:name.hashCode());
  6. result = prime * result + ((species == null) ? 0:name.hashCode());
  7. return result;
  8. }

equals()

  1. public boolean equals(Object obj){
  2. if(this == obj)
  3. return true;
  4. if(obj.getClass() == Cat.class){
  5. Cat cat = (Cat) obj;
  6. return cat.getName().equals(name) && (cat.getAge()==age) & cat.getSpecies().equals(species);
  7. return false;
  8. }
  9. }

参考资料

参考资料

[1]-慕课网 Java工程师就业班 - Java 零基础入门-Java集合

【Java】集合框架(List Set Map)的更多相关文章

  1. Java集合框架List,Map,Set等全面介绍

    Java集合框架的基本接口/类层次结构: java.util.Collection [I]+--java.util.List [I]   +--java.util.ArrayList [C]   +- ...

  2. 【转】Java集合框架List,Map,Set等全面介绍

    原文网址:http://android.blog.51cto.com/268543/400557 Java Collections Framework是Java提供的对集合进行定义,操作,和管理的包含 ...

  3. 34、Java集合框架List,Map,Set等全面介绍(转载)

      Java Collections Framework是Java提供的对集合进行定义,操作,和管理的包含一组接口,类的体系结构.   Java集合框架的基本接口/类层次结构: java.util.C ...

  4. java 集合框架(十六)Map

    一.概述 Map是一个包含键值对的集合,一个map不能有重复的键(key),而且每个键至多只能对应一个值.Map同Collection一样,它的所有通用实现都会提供一个转换器构造函数,接收一个Map类 ...

  5. Java集合框架之map

    Java集合框架之map. Map的主要实现类有HashMap,LinkedHashMap,TreeMap,等等.具体可参阅API文档. 其中HashMap是无序排序. LinkedHashMap是自 ...

  6. 【JAVA集合框架之Map】

    一.概述.1.Map是一种接口,在JAVA集合框架中是以一种非常重要的集合.2.Map一次添加一对元素,所以又称为“双列集合”(Collection一次添加一个元素,所以又称为“单列集合”)3.Map ...

  7. Java集合框架中Map接口的使用

    在我们常用的Java集合框架接口中,除了前面说过的Collection接口以及他的根接口List接口和Set接口的使用,Map接口也是一个经常使用的接口,和Collection接口不同,Map接口并不 ...

  8. 我所理解Java集合框架的部分的使用(Collection和Map)

    所谓集合,就是和数组类似——一组数据.java中提供了一些处理集合数据的类和接口,以供我们使用. 由于数组的长度固定,处理不定数量的数据比较麻烦,于是就有了集合. 以下是java集合框架(短虚线表示接 ...

  9. 【由浅入深理解java集合】(一)——集合框架 Collction、Map

    本篇文章主要对java集合的框架进行介绍,使大家对java集合的整体框架有个了解.具体介绍了Collection接口,Map接口以及Collection接口的三个子接口Set,List,Queue. ...

  10. 从上面的集合框架图可以看到,Java 集合框架主要包括两种类型的容器,一种是集合(Collection),存储一个元素集合,另一种是图(Map),存储键/值对映射

    从上面的集合框架图可以看到,Java 集合框架主要包括两种类型的容器,一种是集合(Collection),存储一个元素集合,另一种是图(Map),存储键/值对映射.Collection 接口又有 3 ...

随机推荐

  1. 20201207-2 openpyxl 库与模块导入

    1-1 import openpyxl # 通过文件路径,打开工作簿 wb1 = openpyxl.load_workbook('./demo_excel.xlsx') # 用 Workbook() ...

  2. 解决idea 中web项目无法正常显示的问题

  3. PHP MySQL 快速导入10万条数据

    项目背景 数据来源:所有数据均为外部导入,最大数据量在10w+ 输出数据:导出经过业务处理之后的数据 使用框架:fastadmin 涉及的问题: 1.数据读取 2.数据保存 使用数据:10w+ 解决方 ...

  4. 一步步分析:C语言如何面向对象编程

    这是道哥的第009篇原创 一.前言 在嵌入式开发中,C/C++语言是使用最普及的,在C++11版本之前,它们的语法是比较相似的,只不过C++提供了面向对象的编程方式. 虽然C++语言是从C语言发展而来 ...

  5. 工作流学习之 IDEA 使用activiti插件 出现乱码

    今天学习 工作流 (work flow ) 的时候遇到了一点小问题 就是在 activitit的插件的时候 出现了乱码,弄了很久,终于解决了,就做个总结 嘻嘻 当场懵了,我记得我改了编码呀 - (Se ...

  6. Redis缓存穿透和缓存雪崩的面试题解析

    前段时间去摩拜面试,然后,做笔试的时候,遇到了几道Redis面试题目,今天来做个总结.捋一下思路,顺便温习一下之前的知识,如果对您有帮助,左上角点下关注 ! 谢谢 文章目录 缓存穿透 缓存雪崩 大家都 ...

  7. JavaScript之函数原型链完整版

    我的上一篇文章有解释绅士原型及简单的原型链,在这里我将对原型链做完整讲述: // 函数的原型链: 把函数当对象(实例对象)来看 function Person(){} // 底层Function创建出 ...

  8. 闭关修炼180天--手写持久层框架(mybatis简易版)

    闭关修炼180天--手写持久层框架(mybatis简易版) 抛砖引玉 首先先看一段传统的JDBC编码的代码实现: //传统的JDBC实现 public static void main(String[ ...

  9. Core3.0路由配置

    前言 MSDN文档,对ASP.NETCore中的路由完整的介绍 https://docs.microsoft.com/zh-cn/aspnet/core/fundamentals/routing?vi ...

  10. ubuntu20部署php-swoole开发环境

    第1步:安装依赖 add-apt-repository ppa:ondrej/php apt install php-dev 第2步:编译安卓swoole wget https://codeload. ...