Java 集合框架 03 Map、可变参数、Collections

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 集合继承体系的面向对象思想

集合继承体系图

  • 接口:用来明确所有集合中该具有的功能
  • 抽象类:把多个集合中功能相同的实现方法抽取到抽象类中实现,具体集合不再编写,继承使用即可。
  • 具体类:继承抽象类,实现接口,重写所有抽象方法,达到具备指定的功能。每个具体集合类,根据自身的数据存储结构方式,对接口中的功能丰富进行不同方式的实现。

猜你喜欢

转载自blog.csdn.net/lihaogn/article/details/81050518