肖sir__Java集合框架__15

1.1 集合介绍
数组回顾:
Java中数组可以保存多个对象,但数组长度不可变。如果需要保存数量变化的数据,数组就无法满足需求。并且数组无法保存具有映射关系的数据,如成绩表为语文=79,数学=80。
在Java中为了保存数量不确定的数据,以及保存具有映射关系的数据,Java 提供了集合类。集合类主要负责保存其他数据,因此集合类也被称为容器类。Java 所有的集合类都位于 java.util 包下,提供了一个表示和操作对象集合的统一构架,包含大量集合接口,以及这些接口的实现类和操作它们的算法。
数组和集合的区别:
1,数组元素既可以是基本类型的值,也可以是对象,而集合中只能保存对象。
2,数组的长度是固定的,集合的长度是动态的
 
集合框架介绍
Java 集合类型分为 Collection 和 Map,它们是 Java 集合的根接口

 

 

集合框架介绍
Collection接口基本结构

 

 

Map接口基本结构

 

 

1.4 集合框架介绍
Collection接口基本结构

 

 

1.5 集合框架介绍
Java集合接口的作用

 

1.6 类和类之间的关系介绍
在Java中类与类之间的关系通常使用UML图来表示
类之间的关系有6种:
实现(Realize)
泛化(Generalize)
关联(Associate)
聚合(Aggregate)
组合(Compose)
依赖(Dependency)
关系强度(耦合度)由高到低为:泛化=实现>组合>聚合>关联>依赖。
 
1.7 类和类之间的关系介绍
1.8 类和类之间的关系介绍
1.9 类和类之间的关系介绍

 

 

2.1 List集合
List 是一个有序、可重复的集合,集合中每个元素都有其对应的顺序索引。List 集合
允许使用重复元素,可以通过索引来访问指定位置的集合元素。
List 实现了Collection接口,它两个常用的实现类:ArrayList 类和 LinkedList 类
1,ArrayList
该类实现了List的接口,实现了可变大小的数组,随机访问和遍历元素时,提供更好的性能。该类也是非同步的,在多线程的情况下不要使用。ArrayList插入删除效率低。
2,LinkedList
该类实现了List接口,允许有null(空)元素。主要用于创建链表数据结构,该类没有同步方法,如果多个线程同时访问一个List,则必须自己实现访问同步,解决方法就是在创建List时候构造一个同步的List。LinkedList 查找效率低
 
2.2 List集合
集合遍历,例如:ArrayList
List<String> list=new ArrayList<String>();
list.add("1");
list.add("2");
list.add("3");
//第一种遍历方法使用 For-Each 遍历 List
for (String str : list) { //也可以改写 for(int i=0;i<list.size();i++) 这种形式
System.out.println(str);
}
//第二种遍历 使用迭代器进行相关遍历
Iterator<String> ite=list.iterator();
while(ite.hasNext())//判断下一个元素之后有值
{
System.out.println(ite.next());
}
 
2.3 List集合
List练习题:
1,往ArrayList集合中添加三个商品信息,包括商品编号、名称和价格,然后遍历集
合输出这些商品信息。
2,开发设计一个仓库管理系统,系统有四个功能,1,入库商品,2,出库商品,3,查询
商品,4,统计商品数量。通过控制台输入来操作系统
 
3.1 Map集合
Map 是一种键-值对(key-value)集合,Map 集合中的每一个元素都包含一个键
(key)对象和一个值(value)对象。用于保存具有映射关系的数据。
Map里key 和 value 都可以是任何引用类型的数据。Map 的 key 不允许重复,value可以重复,即同一个 Map 对象的任何两个 key 通过 equals 方法比较总是返回 false。
Map 中的 key 和 value 之间存在单向一对一关系,即通过指定的 key,总能找到唯一的、确定的 value。从 Map 中取出数据时,只要给出指定的 key,就可以取出对应的 value。
Map接口主要有两个实现类:HashMap 类和 TreeMap 类。其中,HashMap 类按
哈希算法来存取键对象,而 TreeMap 类可以对键对象进行排序。
 
 
3.2 Map集合
遍历Map,例如:HashMap
Map<String, String> map = new HashMap<String, String>();
map.put("1", "value1");
map.put("2", "value2");
map.put("3", "value3");
//第一种:普遍使用,二次取值,通过Map.keySet遍历key和value
for (String key : map.keySet()) {
System.out.println("key= "+ key + " and value= " + map.get(key));
}
//第二种:推荐,尤其是容量大时,通过Map.entrySet遍历key和value
for (Map.Entry<String, String> entry : map.entrySet()) {
System.out.println("key= " + entry.getKey() + " and value= " + entry.getValue());
}
 
3.3 Map集合
Map练习题:
1,使用HashMap设计一个学校学员管理系统,系统有增加,删除,修改,查询,统计(统计可以按班级来统计,也可以统计全部人数) 共5个功能。使用学号作为key,学生类student作为value,学生的信息有姓名,年龄,性别,学号,班级。通过控制台录入学员信息。
 
4.1 Set集合
Set 集合类似于一个罐子,程序可以依次把多个对象“丢进”Set 集合,而 Set 集合通常不能记住元素的添加顺序。也就是说 Set 集合中的对象不按特定的方式排序,只是简单地把对象加入集合。Set 集合中不能包含重复的对象,并且最多只允许包含一个 null 元素。
Set 实现了 Collection 接口,它主要有两个常用的实现类:HashSet 类和 TreeSet类。
HashSet是无序的,TreeSet是有序的。
说明:如果向 Set 集合中添加两个相同的元素,则后添加的会覆盖前面添加的元素,即在 Set 集合中不会出现相同的元素。
 
4.2 Set集合
Set遍历,例如:HashSet
HashSet<String> courseSet = new HashSet<String>();
String course1 = new String("Java入门教程");
String course2 = new String("Python基础教程");
String course3 = new String("C语言学习教程");
courseSet.add(course1); // 将 course1 存储到 Set 集合中
courseSet.add(course2); // 将 course2 存储到 Set 集合中
courseSet.add(course3); // 将 course3 存储到 Set 集合中
Iterator<String> it = courseSet.iterator();
while (it.hasNext()) {
System.out.println("《" + (String) it.next() + "》"); // 输出 Set 集合中的元素
}
4.3 Set集合
Set练习题:
1,设计开发一个考试成绩管理系统,系统有新增,查询,排序,统计的功能。当老师录入每名学生的
成绩后,程序将按照从低到高的排列顺序显示学生成绩。此外,老师可以查询本次考试是否有满分的
学生存在,不及格的成绩有哪些,90 分以上成绩的学生有几名。老师通过控制台操作系统。
 
4.4 Set集合
Set和List的区别
1,Set 接口实例存储的是无序的,不重复的数据。
2,List 接口实例存储的是有序的,可以重复的元素。
3,Set检索效率低下,删除和插入效率高,插入和删除不会引起元素位置改变。
4,List查找元素效率高,插入和删除效率低,插入和删除会引起其他元素位置改变。
 
5.1 Collections类
Collections 类是 Java 提供的一个操作 Set、List 和 Map 等集合的工具类。
Collections对List集合元素常用排序方法:
void reverse(List list):对指定 List 集合元素进行逆向排序。
void shuffle(List list):对 List进行随机排序(shuffle 方法模拟了“洗牌”动作)。
void sort(List list):根据元素的自然顺序对指定 List 集合的元素按升序进行排序。
void sort(List list, Comparator c):根据指定 Comparator对 List 进行排序。
void swap(List list, int i, int j):将指定 List 集合中的 i 处元素和 j 处元素进行交换。
 
5.2 Collections类
Collections常用查找、替换集合元素的方法:
int binarySearch(List list, Object key):搜索有序List 集合,获得对象在List集合中的索引。
Object max(Collection coll):根据元素的自然顺序,返回给定集合中的最大元素。
Object max(Collection coll, Comparator comp):根据 Comparator 返回给定集合中的最大元素。
Object min(Collection coll):根据元素的自然顺序,返回给定集合中的最小元素。
Object min(Collection coll, Comparator comp):根据Comparator 返回给定集合中的最小元素。
void fill(List list, Object obj):使用指定元素 obj 替换指定 List 集合中的所有元素。
int frequency(Collection c, Object o):返回指定集合中指定元素的出现次数。

5.3 Collections类
Collections练习题:
1,随机生成10个数字,分别输出最大最小元素,如果有重复元素,则统计该重复元
素在集合中出现的次数。
2,通过控制台随机输入10个数字,对输入的10个数字进行逆向,并交换最大值和最
小值的位置。
3, 用Java实现斗地主游戏,洗牌、发牌、看牌
下面提供的是牌和花色
{"♠","♣","♥","♦"};
{"2","A","K","Q","J","10","9","8","7","6","5","4","3"};
 
6.1 泛型
Java集合在使用时可能存在的问题:
1,集合对元素类型没有任何限制,这样可能引发一些问题。例如,想创建一个只能保存 Dog 对象的集合,但程序也可以轻易地将 Cat 对象“丢”进去,所以可能引发异常。
2,由于把对象“丢进”集合时,集合丢失了对象的状态信息,集合只知道它盛装的是 Object,因此取出集合元素后通常还需要进行强制类型转换。这种强制类型转换既增加了编程的复杂度,也可能引发 ClassCastException 异常。
为解决上述问题
Java在JDK5版本中引入泛型, 泛型提供了编译时类型安全检测机制,该机制允许程序
员在编译时检测到非法的类型。泛型的本质是参数化类型。
例如:集合中的泛型,List<T>,Set<T>,Map<T,V>
6.2 泛型
泛型通配符:常用的 T,E,K,V,?
?表示不确定的 java 类型
T (type) 表示具体的一个java类型
K V (key value) 分别代表java键值中的Key Value
E (element) 代表Element
说明:上面的通配符不是固定,也可以用其他字母代替,只是在开发中习惯了使用以上字母。
6.3 泛型
泛型类:public class class_name<data_type1,data_type2,…>{} 例如:
public class Stu<N, A, S> {
private N name; // 姓名
private A age; // 年龄
private S sex; // 性别
}
泛型方法:public static List<T> find(Class<T>class,int userId){} 例如:
public static <T> T demo(T book) {
return book;
}
6.4 泛型
泛型类,练习题:
1,设计一个图书馆管理系统,系统有增删改查统计功能,可以按分类统计图书的数
量,图书有分种类,种类包含编号和名称两个属性,图书有编号,名称,种类编号三
个属性。系统通过控制台进行操作。
posted @ 2022-10-01 10:34  xiaolehua  阅读(29)  评论(0编辑  收藏  举报