day009 集合【Map、可变参数、Collections】

it2025-10-01  1

1 Map接口

1.1Map集合

       Collection中的集合,元素是孤立存在的(理解为单身),向集合中存储元素采用一个个元素的方式存储。

 Map中的集合,元素是成对存在的(理解为夫妻)。每个元素由键与值两部分组成,通过键可以找对所对应的值。

 Collection中的集合称为单列集合,Map中的集合称为双列集合。

 需要注意的是,Map中的集合不能包含重复的键,值可以重复;每个键只能对应一个值。

 Map中常用的集合为HashMap集合、LinkedHashMap集合。

 

1.2 Map集合的基本使用

Map是双列集合,里面的内容都是以键值对的形式保存的,每一个键都对应一个值。

 

Map集合的常用方法:

V put(K key, V value): 将键值对添加到Map集合中. 如果key已经存在,就会覆盖掉原来的内容。如果这个key不存在,返回值就是null。

V get(Object key): 根据key获取value。

V remove(Object key): 根据key删除整个的键值对。返回的是删除键值对的值。

 

常见实现类

HashMap(常用),LinkedHashMap

 

 

Map<K,V>: K 表示Map集合中键的数据类型, V表示值的数据类型。

定义泛型的时候,可以定义多个,多个之间使用逗号隔开就可以了。

 

1.3 遍历Map集合

1.3.1 通过keySet来遍历Map

 

我们不能直接使用迭代器遍历Map集合。

我们可以先获取到Map集合中的所有的键(key),把这些key放入到一个Set集合,然后再使用迭代器遍历这个Set集合就可以了。

 

Map集合中有一个方法,可以拿到所有的key。

Set<K> 丨 keySet():返回存放所有key的Set集合。

 

步骤(非常重要)

 1. 调用keySet方法,得到所有的key,放入到Set集合中返回。

 2. 遍历这个Set集合,拿到里面的每一个元素(每一个key)

 3. 调用map集合的get方法,根据key获取到value。

1.3.2通过entrySet来遍历Map

(1)Entry介绍

在Map类设计时,提供了一个嵌套接口:Entry。Entry将键值对的对应关系封装成了对象。即键值对对象,这样我们在遍历Map集合时,就可以从每一个键值对(Entry)对象中获取对应的键与对应的值。

(2)具体

Map集合还有另外一种遍历方式,就是通过Entry的方式去遍历。

每一个Entry对象中都保存了一个键值对,所以我们可以拿到Map集合中所有的        Entry然后再通过Entry拿到对应的键值对。

 

如何获取Map集合中的所有Entry对象?

Set<Map.Entry<K,V>> entrySet():获取到所有的Entry对象,并放入到Set集合        中返回。

 

如何通过Entry对象获取键和值?  

K getKey(): 获取Entry中的key。

V getValue():获取Entry中的value

 

entrySet遍历步骤(必须记住)

 1. 调用Map集合的entrySet,得到所有的entry对象,并放入到Set集合中返回。

 2. 遍历Set集合,得到里面的每一个Entry对象

 3. 调用这个Entry的getKey和getValue方法获取到键和值。

1.3.2 增强for遍历Map集合

增强for不能直接遍历Map集合。

 

可以调用entrySet或者keySet得到一个Set集合,再使用增强for遍历这个Set集合。

 

遍历集合(两大种,四小种)

 keySet

  迭代器

  增强for(推荐)

 entrySet

  迭代器

  增强for

Set<String> keys = map.keySet(); //使用增强for循环遍历这个Set集合 for(String key : keys) { //key表示的就是set集合中的每个元素,就是每个key //根据key获取value String value = map.get(key); System.out.println(key + "--" + value); }

1.4 HashMap

1.4.1 特点

HashMap是Map接口的一个实现类,也是最常用的一个。

特点:

 1. 无序。

 2. key不能重复。

 3. key和value允许为null。

其实HashSet内部就是HashMap,只用到了其中的key,没用value。

1.4.2 HashMap保存自定义对象

HashMap中的key和HashSet一样,通过hashCode和equals来判断对象的唯一性。

例如:HashMap<Student, String> map = new HashMap<>();

如果想要让学生姓名和年龄相同,就视为同一名学生。需要重写hashCode和equals方法。(和昨天学的HashSet一模一样)

    

HashMap的key的唯一性是根据hashCode和equals去判断的。

 

如果key已经存在,就覆盖。

1.5 LinkedHashMap

LinkedHashMap特点:

内部有一个链表,可以保证有序。

1.6 Hashtable(已经淘汰了)

1.0版本就有了,非常老,现在已经淘汰了。(注意,这个就是写成Hashtable不是HashTable,因为出现的版本太早了,那时候对命名规则不是很重视)

键不能是null。

哈希表初始容量是11。HashMap是16.

Hashtable线程安全,效率低。

1.7 properties类

Properties也是一个双列集合,里面也是使用键值对去存储数据。

特点:

  1. Properties是Map接口的实现类。所以拥有Map集合的所有的方法。

  2. Properties没有泛型,键和值都是String。

  3. Properties支持对文件的操作(重要)

   

特有方法:

  (重要)Object setProperty(String key, String value): 向Properties集合中添加键值对。

  (重要)String getProperty(String key): 根据key获取value。

  Set<String> stringPropertyNames(): 获取Properties集合中的所有的key,保存到Set集合中。  相当于keySet。

  (重要)void load(Reader reader): 可以将文件中的键值对加载到Properties集合中。

 

(重要)void load(Reader reader): 可以将文件中的键值对加载到Properties集合中。参数是Reader,可以传递BufferedReader和FileReader

 

读取文件中的键值对到Properties集合中的步骤:

 1. 创建Properties集合。

 2. 创建一个输入流对象。 绑定一个文件。

 3. 调用load方法,传递输入流对象,就可以把文件中的键值对读取到Properties集合中了。

 

文件要求:

 1. 文件一般是以properties结尾。

 2. 文件中的键值对必须要按照以下格式保存

  key=value

  key=value

  key=value

1.8 可变参数

可变参数: 就是方法的参数个数可以变量。

 

格式:

 修饰符 返回值类型 方法名(参数类型... 参数名) {

  //...

 }

 

 1. 可变参数方法在调用的时候可以传递【任意】个参数,0个,1个或者多个。

 2. 调用方法的时候,可变参数位置传递的数据的数据类型必须一致

 3. 【可变参数本质就是数组】,它的使用方式和数组一样。可以对可变参数进行遍历,也可以调用它的length属性。

 4. 如果我调用带有可变参数的方法,那么在可变参数位置也能够传递数组。

 5. 因为可变参本质是数组,所以不能和数组构成方法重载关系。

 

 

注意事项:

 1. 一个方法内最多只能有一个可变参。

 2. 如果方法中有可变参数,这个可变参数只能放到最后。

 

2 Collections工具类

Collections 是操作集合的工具类。

Collection 是单列集合的根接口。

千万不要混了

 

常用方法:

sort(List<T> list):排序。

shuffle(List<?> list):打乱顺序。

3 Arrays工具类

Arrays是操作数组的工具类

 

sort(数组)方法:对数组中的内容进行排序。内部采用的是快速排序。

toString(数组): 把数组中的内容转成字符串。

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

最新回复(0)