第二十章 Map、泛型、静态导入、可变参数、增强for、Collections
程序员文章站
2023-12-23 17:54:03
...
Map接口
Map接口概述
将键映射到值的对象。一个映射不能包含重复的键;每个键最多只能映射到一个值。
Map和Collection的区别?
1. Collection中的集合,元素是孤立存在的(理解为单身),向集合中存储元素采用一个个元素
的方式存储。
2. Map中的集合,元素是成对存在的(理解为夫妻)。每个元素由键与值两部分组成,通过键可以
找对所对应的值。
3. Collection中的集合称为单列集合,Map中的集合称为双列集合。
Map接口中常用集合概述
1)HashMap<K,V>:存储数据采用的哈希表结构,元素的存取顺序不能保证一致。
由于要保证键的唯一、不重复,需要重写键的hashCode()方法、equals()方法。
2)LinkedHashMap<K,V>:HashMap下有个子类LinkedHashMap,存储数据采用的哈希表结构+链表结构。
通过链表结构可以保证元素的存取顺序一致;通过哈希表结构可以保证的键的唯一、不重复,
需要重写键的hashCode()方法、equals()方法。
☞ 注意:Map接口中的集合都有两个泛型变量<K,V>,在使用时,要为两个泛型变量赋予数据类型。
两个泛型变量<K,V>的数据类型可以相同,也可以不同。
Map接口中的常用方法
1)put方法:将指定的键与值对应起来,并添加到集合中,方法返回值为键所对应的值
a .使用put方法时,若指定的键(key)在集合中没有,则没有这个键对应的值,返回null,并把指定的键值添加到集合中;
b. 使用put方法时,若指定的键(key)在集合中存在,则返回值为集合中键对应的值(该值为替换前的值),并把指定键所对应的值,替换成指定的新值。
2) get方法:获取指定键(key)所对应的值(value)
3) remove方法:根据指定的键(key)删除元素,返回被删除元素的值(value)。
Map集合遍历键找值方式
键找值方式:即通过元素中的键,获取键所对应的值
操作步骤与图解:
1.获取Map集合中所有的键,由于键是唯一的,所以返回一个Set集合存储所有的键
2.遍历键的Set集合,得到每一个键
3.根据键,获取键所对应的值
Entry键值对对象
在Map类设计时,提供了一个嵌套接口:Entry。Entry将键值对的对应关系封装成了对象。
即键值对对象,这样在遍历Map集合时,就可以从每一个键值对(Entry)对象中获取对应的键与对应的值。
- Entry是Map接口中提供的一个静态内部嵌套接口。
1)getKey()方法:获取Entry对象中的键
2)getValue()方法:获取Entry对象中的值
- entrySet()方法:用于返回Map集合中所有的键值对(Entry)对象,以Set集合形式返回。
Map集合遍历键值对方式
键值对方式:即通过集合中每个键值对(Entry)对象,获取键值对(Entry)对象中的键与值。
操作步骤与图解:
1.获取Map集合中,所有的键值对(Entry)对象,以Set集合形式返回。
2.遍历包含键值对(Entry)对象的Set集合,得到每一个键值对(Entry)对象
3.通过键值对(Entry)对象,获取Entry对象中的键与值。
☞ 注意:Map集合不能直接使用迭代器或者foreach进行遍历。但是转成Set之后就可以使用了。
泛型
(1)泛型概述
是一种把明确类型的工作推迟到创建对象或者调用方法的时候才去明确的特殊的类型。
(2)格式:
<数据类型>
注意:该数据类型只能是引用类型。
(3)好处:
A:把运行时期的问题提前到了编译期间
B:避免了强制类型转换
C:优化了程序设计,解决了黄色警告线问题,让程序更安全
(4)泛型的前世今生
A:泛型的由来
Object类型作为任意类型的时候,在向下转型的时候,会隐含一个转型问题
B:泛型类
C:泛型方法
D:泛型接口
E:泛型高级通配符
?
? extends E
? super E
静态导入
在导包的过程中我们可以直接导入静态部分,这样某个类的静态成员就可以直接使用了。
静态导入格式:
import static XXX.YYY;
注意事项:
A:方法必须是静态的
B:如果多个类下有同名的方法,就不好区分了,还得加上前缀。
所以一般我们并不使用静态导入,但是一定要能够看懂。
可变参数
在JDK1.5之后,如果我们定义一个方法需要接受多个参数,并且多个参数类型一致,
我们可以对其简化成如下格式:
修饰符 返回值类型 方法名(参数类型... 形参名){ }
其实这个书写完全等价与
修饰符 返回值类型 方法名(参数类型[] 形参名){ }
只是后面这种定义,在调用时必须传递数组,而前者可以直接传递数据即可。
☞ 注意:如果一个方法有多个参数,并且有可变参数,可变参数必须在最后.
增强for
(1)是for循环的一种
(2)格式:
for(元素的数据类型 变量名 : 数组或者Collection集合的对象) {
使用该变量即可,该变量其实就是数组或者集合中的元素。
}
☞ 注意:增强for循环的目标不能为null。建议在使用前,先判断是否为null。
Collections集合工具类
针对集合进行操作的工具类
1. Collection和Collections的区别
A:Collection 是单列集合的顶层接口,有两个子接口List和Set
B:Collections 是针对集合进行操作的工具类,可以对集合进行排序和查找等
2. 常见方法
A:public static <T> void sort(List<T> list)
B:public static <T> int binarySearch(List<?> list,T key)
C:public static <T> T max(Collection<?> coll)
D:public static void reverse(List<?> list)
E:public static void shuffle(List<?> list)