JAVA 中的集合框架
2018-06-18 03:51:26来源:未知 阅读 ()
JAVA中的集合类是一种工具类,就像是容器,储存任意数量的具有共同属性的对象。
集合的作用:
集合其实就时用来盛装其他对象的容器,我们之前学过数组,从这点功能来讲,他们的功能似乎差不多,我们为什么要使用集合?
JAVA集合框架体系结构:
1 package com.lx; 2 3 import java.util.HashSet; 4 import java.util.Set; 5 6 //学生类 7 public class Student { 8 private String name; 9 private String id; 10 private Set<Course> courses; 11 12 public Student(String name, String id) { 13 this.courses = new HashSet<Course>(); 14 this.name = name; 15 this.id = id; 16 } 17 18 public Set<Course> getCourses() { 19 return courses; 20 } 21 22 public void setCourses(Set<Course> courses) { 23 this.courses = courses; 24 } 25 26 public String getName() { 27 return name; 28 } 29 30 public void setName(String name) { 31 this.name = name; 32 } 33 34 public String getId() { 35 return id; 36 } 37 38 public void setId(String id) { 39 this.id = id; 40 } 41 }
1 package com.lx; 2 3 //课程类 4 public class Course { 5 private String id; 6 private String name; 7 8 public Course(String newId, String newName) { 9 // TODO Auto-generated constructor stub 10 this.id = newId; 11 this.name = newName; 12 } 13 14 public String getId() { 15 return id; 16 } 17 18 public void setId(String id) { 19 this.id = id; 20 } 21 22 public String getName() { 23 return name; 24 } 25 26 public void setName(String name) { 27 this.name = name; 28 } 29 }
1 package com.lx; 2 3 import java.util.ArrayList; 4 import java.util.Arrays; 5 import java.util.Iterator; 6 import java.util.List; 7 8 //备选课程类 9 public class ListTest { 10 // 存放备选课程的容器 11 public List<Course> coursesToSelect; 12 13 public ListTest() { 14 // TODO Auto-generated constructor stub 15 this.coursesToSelect = new ArrayList<Course>(); 16 } 17 18 public static void main(String[] args) { 19 ListTest l1 = new ListTest(); 20 l1.testAdd(); 21 Course cr1 = l1.coursesToSelect.get(0); 22 if (l1.coursesToSelect.contains(cr1)) { 23 System.out.println("课程" + cr1.getName() + "的索引位置" + l1.coursesToSelect.indexOf(cr1)); 24 } 25 } 26 27 // 用于向coursesToSelect中添加备选课程 28 public void testAdd() { 29 Course cr1 = new Course("1", "数据结构"); 30 /** 31 * 添加方法① 创建一个课程对象,并通过调用add方法 添加到备选课程List中 32 */ 33 coursesToSelect.add(cr1); 34 35 /** 36 * 添加方法② 向集合指定位置添加课程对象 37 */ 38 Course cr2 = new Course("2", "C语言"); 39 coursesToSelect.add(0, cr2); 40 41 /** 42 * 添加方法③ 使用数组一次性添加多个课程对象 43 */ 44 Course[] course = { new Course("3", "离散数学"), new Course("4", "汇编语言") }; 45 coursesToSelect.addAll(Arrays.asList(course)); 46 47 /** 48 * 添加方法④ 使用数组一次性添加多个课程对象到指定集合位置 49 */ 50 Course[] course2 = { new Course("5", "高等数学"), new Course("6", "大学英语") }; 51 coursesToSelect.addAll(2, Arrays.asList(course2)); 52 } 53 54 /** 55 * 使用get(i)方法 取出List中的元素 56 */ 57 public void testGet() { 58 // size()返回列表中的元素数 59 int size = coursesToSelect.size(); 60 System.out.println("有如下课程待选:"); 61 for (int i = 0; i < size; i++) { 62 Course cr = coursesToSelect.get(i); 63 System.out.println("课程:" + cr.getId() + cr.getName()); 64 } 65 } 66 67 /** 68 * 使用迭代器来遍历List 69 */ 70 71 public void testIterator() { 72 Iterator<Course> it = coursesToSelect.iterator(); 73 System.out.println("有如下课程待选:"); 74 while (it.hasNext()) { 75 Course cr = it.next(); 76 System.out.println("课程:" + cr.getId() + cr.getName()); 77 } 78 } 79 80 /** 81 * 使用foreach方法访问集合元素: 82 */ 83 public void testForeach() { 84 for (Course cr : coursesToSelect) { 85 System.out.println("课程:" + cr.getId() + cr.getName()); 86 } 87 } 88 89 /** 90 * 修改List中的元素,实现学生选课中的课程修改 set() 用来指定元素替换列表中指定元素的位置 91 */ 92 93 public void testModify() { 94 coursesToSelect.set(4, new Course("7", "毛概")); 95 } 96 97 /** 98 * 删除List中的元素,实现学生选课中的课程删除 在remove()方法里可以写一个集合中对象的位置,也可以写一个集合中对象的引用, 99 * 更可以传入一个数组的引用来删除多个集合中存放的对象 100 */ 101 public void testRemove() { 102 Course cr = coursesToSelect.get(1); 103 coursesToSelect.remove(cr); 104 coursesToSelect.remove(1); 105 106 Course[] course = { coursesToSelect.get(2), coursesToSelect.get(3) }; 107 // 同时删除位置4和位置5上的元素 108 coursesToSelect.removeAll(Arrays.asList(course)); 109 } 110 111 }
(2) 泛型
集合的元素,可以是任意类型对象的引用,如果把某个对象放入集合,则会忽略它的类型,就会把它当做Object类型处理
1 package com.lx; 2 3 import java.util.ArrayList; 4 import java.util.List; 5 6 //测试泛型 7 public class TestGeneric { 8 // 带有泛型 Course的 List类型的属性 9 public List<Course> course; 10 11 public TestGeneric() { 12 // TODO Auto-generated constructor stub 13 this.course = new ArrayList<Course>(); 14 } 15 16 public void testAdd() { 17 // 测试添加 18 Course cr1 = new Course("1", "大学语文"); 19 course.add(cr1); 20 /** 21 * 泛型集合中不能添加泛型固定的类型以外的对象,否则会报错 22 */ 23 } 24 25 }
1 package com.lx; 2 3 import java.util.HashSet; 4 import java.util.Set; 5 6 //学生类 7 public class Student { 8 private String name; 9 private String id; 10 private Set<Course> courses; 11 12 public Student(String name, String id) { 13 this.courses = new HashSet<Course>(); 14 this.name = name; 15 this.id = id; 16 } 17 18 public Set<Course> getCourses() { 19 return courses; 20 } 21 22 public void setCourses(Set<Course> courses) { 23 this.courses = courses; 24 } 25 26 public String getName() { 27 return name; 28 } 29 30 public void setName(String name) { 31 this.name = name; 32 } 33 34 public String getId() { 35 return id; 36 } 37 38 public void setId(String id) { 39 this.id = id; 40 } 41 }
1 package com.lx; 2 3 // 课程类 4 public class Course { 5 private String id; 6 private String name; 7 8 public Course(String newId, String newName) { 9 // TODO Auto-generated constructor stub 10 this.id = newId; 11 this.name = newName; 12 } 13 14 public String getId() { 15 return id; 16 } 17 18 public void setId(String id) { 19 this.id = id; 20 } 21 22 public String getName() { 23 return name; 24 } 25 26 public void setName(String name) { 27 this.name = name; 28 } 29 }
1 //备选课程类 2 public class ListTest { 3 // 存放备选课程的容器 4 public List<Course> coursesToSelect; 5 6 public ListTest() { 7 // TODO Auto-generated constructor stub 8 this.coursesToSelect = new ArrayList<Course>(); 9 } 10 11 public static void main(String[] args) { 12 ListTest l1 = new ListTest(); 13 l1.testAdd(); 14 l1.testListContains(); 15 } 16 17 // 用于向coursesToSelect中添加备选课程 18 public void testAdd() { 19 Course cr1 = new Course("1", "数据结构"); 20 /** 21 * 添加方法① 创建一个课程对象,并通过调用add方法 添加到备选课程List中 22 */ 23 coursesToSelect.add(cr1); 24 25 /** 26 * 添加方法② 向集合指定位置添加课程对象 27 */ 28 Course cr2 = new Course("2", "C语言"); 29 coursesToSelect.add(0, cr2); 30 31 /** 32 * 添加方法③ 使用数组一次性添加多个课程对象 33 */ 34 Course[] course = { new Course("3", "离散数学"), new Course("4", "汇编语言") }; 35 coursesToSelect.addAll(Arrays.asList(course)); 36 37 /** 38 * 添加方法④ 使用数组一次性添加多个课程对象到指定集合位置 39 */ 40 Course[] course2 = { new Course("5", "高等数学"), new Course("6", "大学英语") }; 41 coursesToSelect.addAll(2, Arrays.asList(course2)); 42 } 43 44 /** 45 * 测试List的contains方法 46 */ 47 public void testListContains() { 48 49 // 取得备选课程的第1个元素 50 Course cr1 = coursesToSelect.get(0); 51 System.out.println("取得课程" + cr1.getName()); 52 System.out.println("判断备选课程中是否包含课程" + cr1.getName() + ":" + coursesToSelect.contains(cr1)); 53 54 // 创建一个新的课程对象,id和name和cr1对象完全相同 55 Course cr2 = new Course(cr1.getId(), cr1.getName()); 56 System.out.println("新创建课程:" + cr2.getName()); 57 System.out.println("判断备选课程中是否包含课程" + cr2.getName() + ":" + coursesToSelect.contains(cr2)); 58 } 59 }
运行结果:
1 @Override 2 public boolean equals(Object obj) { 3 if (this == obj) 4 return true; 5 if (obj == null) 6 return false; 7 if (getClass() != obj.getClass()) 8 return false; 9 Course other = (Course) obj; 10 if (id == null) { 11 if (other.id != null) 12 return false; 13 } else if (!id.equals(other.id)) 14 return false; 15 if (name == null) { 16 if (other.name != null) 17 return false; 18 } else if (!name.equals(other.name)) 19 return false; 20 return true; 21 }
我们重新测试List的contains方法
运行结果:
运行结果:
hashCode()方法它返回的是对象的哈希码的值,当我们调用set.contains()方法时,其实是先调用每一个元素它的hashCode方法来返回哈希码,如果他的哈希码相等的情况下,再调用equals方法去判断是否相等,只有在这两个方法所返回值都相等的情况下,才认定这个hashSet包含某个元素,所以我们要要重写他的hashCode方法。
2 如果课程序列包含某门课程,如何判断该课程的索引位置:
1 public static void main(String[] args) { 2 ListTest l1 = new ListTest(); 3 l1.testAdd(); 4 Course cr1 = l1.coursesToSelect.get(0); 5 if (l1.coursesToSelect.contains(cr1)) { 6 System.out.println("课程" + cr1.getName() + "的索引位置" + l1.coursesToSelect.indexOf(cr1)); 7 } 8 } 9 }
输出结果:
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
下一篇:简单的CRUD(二)
- 国外程序员整理的Java资源大全(全部是干货) 2020-06-12
- 2020年深圳中国平安各部门Java中级面试真题合集(附答案) 2020-06-11
- 2020年java就业前景 2020-06-11
- 04.Java基础语法 2020-06-11
- Java--反射(框架设计的灵魂)案例 2020-06-11
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash