Map集合(TreeMap)的使用

Map集合

Map概念:

特点:无序,键值对,键不能重复,值可以重复,

键重复则覆盖,没有继承Collection接口

扩容:初始容量16,负载因子0.75,扩容增量1倍

遍历:
先获取所有键的Set集合,再遍历(通过键获取值)
取出保存所有Entry的Set,再遍历此Set即可

HashMap概念:

**特点:**线程不安全,最常用,速度快

内部采用数组来存放数据
在这里插入图片描述

基本原理
put执行过程&HashMap的实现
package com.binbin.jaEE;

import java.util.HashMap;
import java.util.Iterator;

import org.junit.Before;
import org.junit.Test;

public class JaEE03 {
     
	  private HashMap< Integer , Object> map=new HashMap<Integer, Object>();
	@Before
	 public void Hashmap() {
	   map.put(1, "李四");
	   map.put(1, "张三");
	   map.put(2, "老六");
	   map.put(4, "老刘");
	   map.put(3, "乔乔");
	 }
	 @Test
	public void Test() {
		Iterator<Integer> it = map.keySet().iterator();
		  while(it.hasNext()) {
			  int key=it.next();
			  System.out.println(key);//测试输出
		  }
	}
	 
}
⭐堆内存

1.8jkd之前的红黑树示意图

在这里插入图片描述

流程图中绿色标出的部分为JDK8新增的处理逻辑,目的是在Table[i]中的Node节点数量大于8时,通过红黑树提升查找速度。

Table数组中的的Node

⭐1.8jdk之后红黑树结构示意图

在这里插入图片描述

⭐红黑树理解解析

这是一个简单的红黑树 的理解很简单 (其实它的逻辑就是 往第一个数据 开始 比它大 就往 (右排)比它小就往(左排))所以当我们 再利用它找数据的时候 就会很快

比如:我们要找 那个 “21” 它比"8"大 所以它就往右边找 只需要三步就可以找到

在这里插入图片描述

⭐⭐这是红黑树的 编辑官网Red/Black Tree Visualization (usfca.edu)

HashTable
线程安全,不太常用

HashTable的实现

 @Test
	 public void Test02() {
		 Map<Integer, Object>table=new Hashtable<Integer, Object>();
		 table.put(1, "李四");
		 table.put(1, "张三");
		 table.put(2, "老六");
		 table.put(4, "老刘");
		 table.put(3, "乔乔");
		 Iterator<Integer> it = table.keySet().iterator();
		 while(it.hasNext()) {
			 int key=it.next();
			 System.out.println(key);
		 }
	 }
//此方法也携带 (去重效果)但是输出结果以 升序的方式

输出结果

在这里插入图片描述

TreeMap
特性:

​ key值按一定的顺序排序

​ 添加或获取元素时性能较HashMap, 因为需求维护内部的红黑树,用于保证key值的顺序

实现方式:
	 @Test
  public void Test03() {
      //new Comparator  在括号里 new 一个这个 就是 比较器  可以用来排序
	  TreeMap<Integer, Object>Treemap=new TreeMap<Integer, Object>(new Comparator<Integer>() {
		@Override
		public int compare(Integer o1, Integer o2) {
			// TODO Auto-generated method stub
			return o1-o2;//这里是设定一个升序的方法
		}
	
	  });
	  Treemap.put(1, "李四");
	  Treemap.put(1, "张三");
	  Treemap.put(2, "老六");
	  Treemap.put(4, "老刘");
	  Treemap.put(3, "乔乔");
	Iterator<Integer> it = Treemap.keySet().iterator();
	while(it.hasNext()) {
		int ket=it.next();
		System.out.println(Treemap.get(it));
	}
  }
排序方法:
  • Comparator (java.lang.Comparable)
  • Comparable (java.util.Comparator)
LinkedHashMap
  • ​ 继承HashMap ,LinkedHashMap是有序的,且默认为插入顺序。当我们希望有顺序地去存储key-value时,就需要使用LinkedHashMap了
实现方法:
 Map<String, String> linkedHashMap = new LinkedHashMap<>();

        linkedHashMap.put("name1", "josan1");

        linkedHashMap.put("name2", "josan2");

        linkedHashMap.put("name3", "josan3");

        Set<Entry<String, String>> set = linkedHashMap.entrySet();

        Iterator<Entry<String, String>> iterator = set.iterator();

        while(iterator.hasNext()) {
            Entry entry = iterator.next();
           String key = (String) entry.getKey();

            String value = (String) entry.getValue();

            System.out.println("key:" + key + ",value:" + value);

       }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

冷亿!

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值