20.集合

1. Map

HashSet和TreeSet: Null的问题: tree类型不可以有NULL

Map: 映射 一堆 key,value组成的: key有唯一型。value可重复

  • boolean containsKey(K key); 是否包含这个key

  • Set<Entry<K, V>> entrySet(); 获取entry组成, 去重,无序

  • Collection values(); value组成的集合

  • Set keySet: key组成的集合

  • V get(key); 根据Key获取Value

  • V put(key, value); 往Map添加一个 key,value。 key存在是覆盖

  • V remove(key); 根据key删除 key,value

  • int size(); 获取key,value的个数

2. HashMap:无序去重映射

HashSet封装的HashMap。 key的去重和无序 和hashset一样

		Map<String, String> map = new HashMap<String, String>();

		map.put("002", "日本"); // put添加一个k,v
		map.put("001", "中国");
		map.put("003", "韩国");
		System.out.println(map.size()); // 3
		if (map.containsKey("001")) { // 是否包含
			System.out.println("---");
		}
		map.put("003", "印度"); // 去重 对象类型怎么去重:
		System.out.println(map.size()); // 3
		System.out.println(map.get("003")); // 根据key获取value
		
		map.forEach((k, v) -> System.out.println(k + "@" + v)); // jdk8的遍历

		map.forEach(new BiConsumer<String, String>() {
			@Override
			public void accept(String t, String u) {
				System.out.println(t + "@" + u);
			}
		});

三种遍历方式:

3. TreeMap: 有排序,去重

去重:和排序: 根据Comparable的compareTo()确定。

TreeSet - 基于Treemap

package com.etc.lesson21;

import java.util.Map;
import java.util.TreeMap;

import lombok.AllArgsConstructor;
import lombok.NoArgsConstructor;
import lombok.ToString;

public class TestMain3 {

	public static void main(String[] args) {
		
//		TreeSet tree = new TreeSet();
//		tree.add(new A());
//		
		Map<A, String> map = new TreeMap<>();
		map.put(new A(3), "11");
		map.put(new A(1), "222");
		map.put(new A(2), "333");
		map.put(new A(0), "444");
		System.out.println();
		System.out.println(map.size());
		map.forEach((k, v) -> System.out.println(k + "@" + v));	
		
	}
}
@ToString
@AllArgsConstructor
@NoArgsConstructor
class A implements Comparable<A>{
	private int age;

	public int compareTo(A o) {
		return this.age - o.age;
	}
}

4. HashMap和 HashTable

HashTable: 线程安全, 有下标, key和value都不可以为NULL

HashMap: 线程非安全:::????

  • Collections.synchronizedMap|List(); 傻瓜式加同步锁sync锁
  • CAS-ConcurrentHashMap: 多种锁。比上面快: syn锁+reetrantlock+atomic

HashMap: 的实现;

  • 16

  • 0.75 ; 数组的扩容到13的时候开始扩容

  • 8

  • 6

  • 数组:通过f(key) =hash % 16

  • 单向链表: f(key) =hash % 16 相同的时候

  • 红黑树: 添加当节点数到 8的时候, 删除的到6变回 单向链表

在这里插入图片描述

posted @ 2021-04-11 13:01  剑心空明  阅读(3)  评论(0编辑  收藏  举报  来源