Java基础(23)——集合Map、HashMap、LinkedHashMap、TreeMap详解


版权声明

  • 本文原创作者:清风不渡
  • 博客地址:https://blog.csdn.net/WXKKang

一、Map

1、Map

(1)数据结构

  映射可以看到一张多行两列的表格,每一列是“key”,第二列是"value"。例如,使用Map集合管理人员信息:
在这里插入图片描述
  Key是Value的核心特征表示。例如,使用name来区分不同的Person,可以认为name是Person的核心特征。key 和value是一一对应的。

  Map与Collection 比较:
  1、在集合框架中,Map与Collection 是并列存在的,互相没有继承关系
  2、Map存储单位是key/value对,Collection 存储单位是单个对象
  3、Map存储元素使用put方法,Collection使用add方法
  4、Map集合没有直接迭代的方法,而是先转成Set集合,在通过迭代获取元素
  5、Map集合中key要保证唯一性, 所有key组成一个Set集合。

(2)基本操作

  Map是一种按照键(key)存储元素的容器,键(key)可以是任意类型的对象,所有Value按key存储和获取,主要方法如下:
在这里插入图片描述
  示例代码:

package cn.com;

import java.util.HashMap;
import java.util.Map;

public class Demo {

	public static void main(String[] args) {
		//创建一个空的map1
		Map<String, Integer> map1 = new HashMap<String, Integer>();
		//向map1中添加元素
		map1.put("jack", 20);
		map1.put("rose", 19);
		map1.put("lucy", 20);
		map1.put("java", 21);
		//输出集合
		System.out.println("map1的初始元素:"+map1);
		//添加重复的键时返回原有的value
		System.out.println(map1.put("jack", 30));
		
		//创建一个空的map2
		Map<String, Integer> map2 = new HashMap<String, Integer>();
		//向map2中添加元素
		map2.put("小张", 20);
		map2.put("小李", 19);
		//将map2的内容加到map1中
		map1.putAll(map2);
		//打印现在的map1
		System.out.println("添加map2元素后的map1集合:"+map1);
		
		//通过指定的key对象获取value对象
		System.err.println("value="+map1.get("jack"));
		//获取容器大小
		System.out.println("容器大小:"+map1.size());
		//判断集合是否为空
		System.out.println("集合是否为空:"+map1.isEmpty());
		//key是否存在
		System.out.println("containskey:"+map1.containsKey("jack"));
		//value是否存在
		System.out.println("containskey:"+map1.containsValue(20));
		//指定key,返回删除的键值对映射的值
		System.out.println("value:"+map1.remove("java"));
		//清空map集合
		map1.clear();
		System.out.println("map1:"+map1);
	}		
}

(3)遍历操作

  遍历map集合有三种方法,展示如下:

package cn.com;

import java.util.Collection;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Set;

public class Demo {

	public static void main(String[] args) {
		//创建一个空的map1
		Map<String, Integer> map1 = new HashMap<String, Integer>();
		//向map1中添加元素
		map1.put("jack", 20);
		map1.put("rose", 19);
		map1.put("lucy", 20);
		map1.put("java", 21);
		
		//使用keySet
		Set<String> keySet = map1.keySet();
		Iterator<String> iterator1 = keySet.iterator();
		while(iterator1.hasNext()) {
			String key1 = iterator1.next();
			Integer value1 = map1.get(key1);
			System.out.println("key="+key1+",value="+value1);
		}
		
		//使用values()方法
		Collection<Integer> values = map1.values();
		Iterator<Integer> iterator2 = values.iterator();
		while(iterator2.hasNext()) {
			Integer value2 = iterator2.next();
			System.out.println("value="+value2);
		}
		
		//使用Map.Entry对象
		Set<Entry<String,Integer>> entrySet = map1.entrySet();
		Iterator<Entry<String, Integer>> iterator3 = entrySet.iterator();
		while(iterator3.hasNext()) {
			Entry<String, Integer> next = iterator3.next();
			System.out.println("key="+next.getKey()+",value="+next.getValue());
		}
	}		
}

2、HashMap

  HashMap是使用最广泛的Map实现,它的底层是哈希表数据结构实现存储,不支持多线程同步,可以存入null键、null 值,示例如下:

package cn.com;

import java.util.HashMap;

public class Demo {

	public static void main(String[] args) {
		//创建一个空的map1
		HashMap<String, Integer> map1 = new HashMap<String, Integer>();
		//向map1中添加元素
		map1.put("jack", 20);
		map1.put("rose", 19);
		map1.put("lucy", 20);
		map1.put("java", 21);
		System.out.println(map1);
	}		
}

  其他操作与上面相同

3、LinkedHashMap

  LinkedHashMap底层使用链表实现,示例如下:

package cn.com;

import java.util.LinkedHashMap;

public class Demo {

	public static void main(String[] args) {
		//创建一个空的map1
		LinkedHashMap<String, Integer> map1 = new LinkedHashMap<String, Integer>();
		//向map1中添加元素
		map1.put("jack", 20);
		map1.put("rose", 19);
		map1.put("lucy", 20);
		map1.put("java", 21);
		System.out.println(map1);
	}		
}

4、TreeMap

  HashMap中的所有数据都是无序存放的,在TreeMap中按照Key 进行排序。要求Key必须实现Comparable接口,具体要求见TreeSet中的实现要求。

二、工具类

1、Collections

  Collections不是Collection接口的实现类,它是一个工具类,其中所有方法都是静态的。
  请注意:Collections 和Collection的区别

(1)List集合操作

  只适用于List集合的工具方法。
在这里插入图片描述

(2)其他工具操作

在这里插入图片描述

2、示例

package cn.com;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;

public class Demo {

	public static void main(String[] args) {
		ArrayList<Integer> list = new ArrayList<Integer>();
		list.add(4);
		list.add(3);
		list.add(1);
		list.add(2);
		list.add(3);
		
		//排序
		Collections.sort(list);
		//将List转换为数组
		Object[] ins = list.toArray();
		System.out.println(Arrays.toString(ins)); 
		//折半查找的前提是排序好的元素
		System.out.println(Collections.binarySearch(list,8)); // 找不到,返回插入点-1
		
		//反序集合输出
		Collections.reverse(list);
		System.out.println(list);
		//求最值
		System.out.println(Collections.max(list));
		//fil()使用指定的元素替换指定集合中的所有元素
		// Collections.fill(list,5);
		System.out.println(list);

		//将数组转换为集合.
		Integer is[] = new Integer[]{6,7,8};
		List<Integer> list2 = Arrays.asList(is);
		list.addAll(list2);
		System.out.println(list);

		
	}		
}
发布了82 篇原创文章 · 获赞 36 · 访问量 3377

猜你喜欢

转载自blog.csdn.net/WXKKang/article/details/103386897