1 Map接口
1.1 介绍
Map,也称为键值对(key-value)。
Map中的集合不能包含重复的键,值可以重复;每个键只能对应一个值。
Map中常用的集合为HashMap,LinkedHashMap。
1.2 常用集合介绍
1)HashMap< k, v >
- 存储结构:哈希表
- 特点:元素存取顺序并不一致
2)LinkedHashMap< k, v >
- 存储结构:哈希表+链表
- 特点:元素存取顺序一致
1.3 Map接口中常用方法
V get(Object key) // 获取键所对应的值
V put(K key, V value) // 向集合中添加键值对
V remove(Object key) // 删除键和对应的值
注意:put方法中,有两种情况,
- 若指定的key在集合中不存在时,则把键值对添加到集合中。
- 若指定的key在集合中存在时,则会把原来key对应的值替换成新值。
示例:
// 创建map对象
Map<String, String> mMap = new HashMap<String, String>();
// 向map中添加元素
mMap.put("zhangsan", "woman");
mMap.put("lisi", "man");
mMap.put("wangwu", "man");
System.out.println(mMap); // {lisi=man, zhangsan=woman, wangwu=man}
// 会返回原来的值
System.out.println(mMap.put("lisi", "woman")); // man
System.out.println(mMap); // {lisi=woman, zhangsan=woman, wangwu=man}
// 获取指定key的value
String msString = mMap.get("wangwu");
System.out.println(msString); // man
// 根据key删除元素,会返回对应的值
System.out.println(mMap.remove("lisi")); // woman
System.out.println(mMap); // {zhangsan=woman, wangwu=man}
1.4 Map集合遍历
1)方法一:键找值,通过元素的键,获取对应的值。
示例:
// 创建map对象
Map<String, String> mMap = new HashMap<String, String>();
// 向map中添加元素
mMap.put("zhangsan", "woman");
mMap.put("lisi", "man");
mMap.put("wangwu", "man");
// 1 获取map中所有key
Set<String> keySet = mMap.keySet();
// 2 遍历存放key的集合
Iterator<String> iterator = keySet.iterator();
while (iterator.hasNext()) {
String key = (String) iterator.next();
// 通过key获取相应的value
String value = mMap.get(key);
System.out.println(key + ":" + value);
}
2)方式二:键值对方式,通过集合中每个键值对对象,获取键值对对象中的键与值。
示例:
// 创建map对象
Map<String, String> mMap = new HashMap<String, String>();
// 向map中添加元素
mMap.put("zhangsan", "woman");
mMap.put("lisi", "man");
mMap.put("wangwu", "man");
// 1 获取map中的所有key与value的对应关系
Set<Map.Entry<String, String>> entrySet = mMap.entrySet();
// 2 遍历set集合
Iterator<Map.Entry<String, String>> iterator = entrySet.iterator();
while (iterator.hasNext()) {
Map.Entry<String, String> entry = (Map.Entry<String, String>) iterator.next();
String key = entry.getKey();
String value = entry.getValue();
System.out.println(key + ":" + value);
}
2 可变参数
在JDK1.5之后,如果我们定义一个方法需要接受多个参数,并且多个参数类型一致,我们可以对其简化成如下格式:
修饰符 返回值类型 方法名(参数类型... 形参名){ }
其实这个书写完全等价于:
修饰符 返回值类型 方法名(参数类型[] 形参名){ }
只是后面这种定义,在调用时必须传递数组,而前者可以直接传递数据即可。
示例:
// 定义含有可变参数的方法
public static int add(int... arr) {
int sum=0;
for (int i = 0; i < arr.length; i++) {
sum +=arr[i];
}
return sum;
}
public static void main(String[] args) {
int sum=add(34,23,54);
System.out.println(sum);
}
3 Collections集合工具集
3.1 部分方法
示例:
java.util.List<Integer> mList=new ArrayList<Integer>();
mList.add(123);
mList.add(34);
mList.add(23);
System.out.println(mList); // [123, 34, 23]
// 列表元素排序
Collections.sort(mList);
System.out.println(mList); // [23, 34, 123]
// 列表元素混洗
Collections.shuffle(mList);
System.out.println(mList); // [34, 123, 23]
4 集合继承体系的面向对象思想
- 接口:用来明确所有集合中该具有的功能
- 抽象类:把多个集合中功能相同的实现方法抽取到抽象类中实现,具体集合不再编写,继承使用即可。
- 具体类:继承抽象类,实现接口,重写所有抽象方法,达到具备指定的功能。每个具体集合类,根据自身的数据存储结构方式,对接口中的功能丰富进行不同方式的实现。