JavaMap接口原理介绍

Map接口代表映射表,存储键值对,不允许重复的key。HashMap是Map的实现,无序且允许value重复,需重写key的equals和hashCode方法。其他实现包括LinkedHashMap、TreeMap和ConcurrentHashMap,分别关注插入顺序、排序和线程安全。不同集合的初始容量、加载因子和扩容策略也有所差异。

N.1 Map接口介绍

1)Map代表了一个映射表,用于保存键值对。

map不能包含重复的key,但是value可以重复。每个key只能对应一个value。

————————————————————————

————————————————————————

————————————————————————

2)Map接口的方法

import java.util.Collection;

import java.util.Set;

public interface Map<K,V> {

int size();

boolean isEmpty();//如果此地图不包含键值映射,则返回 true

boolean containskey(Object key);

boolean containsValue (Object value);

V get (Object key);

//put不仅可以添加,还可以修改,如果是修改,那么会返回I旧value

V put (K key, V value);

//删除指定key所属的Entry,也就删除了value

V remove (Object key);

//从该地图中删除所有的映射

void clear ();

//返回一个所有key集合

Set<K> keyset ();

//返回所有values

Collection<V> values ();

/*Map.Entry<K, V>表示Entry<K, V>属于Map的一个内部类entryset();返回 类型必须是Entry<K, V>类型*/

Set<Map. Entry<K, V>> entrySet (); // 这里只是展示,所以会报红

}

N.2 HashMap

N.2.1 HashMap的元素添加

————————————————————————

————————————————————————

1)HashMap实现了Map接口,HashMap是无序的。HashMap不能包含重复的key,但是value可以重复

它不保存元素的插入顺序,在内部也不保证按照元素的大小顺序排列。

class Student implements Comparable<Student> { 这里略写请复制set接口的代码,一模一样的}

2)HashMap不允许重复的key,它通过key的equals方法来判断。作为HashMap的key必须重写equals方法,同时也要重写hashCode方法。get方法通过key来获取value

class Day1704{

public static void main(String[] args){

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

//put方法将键值对加入到映射表中

map. put ("1001", new Student (1, "zhangsan", 20));

map. put ("1002", new Student (2, "lisi", 21));

map. put ("1003", new Student (3, "wangwu", 22));//value允许重复(不管有没有重写equals方法,value都可以加入,因为map是允许value重复的)

map. put ("1004", new Student (1, "zhangsan", 20));

Student sl = map.get("1004");

System.out.println(sl );

Student s2 = map.get("1005");//Student [sno=1, name=zhangsan1]

System.out.println(s2) ;//nul1

}

}

以下是jdk1.7HashMap

N.3 LinkedHashMap

N.4 TreeMap

N.5 ConcurrentHashMap

N.6 集合容量值

lass

初始大小

加载因子

扩容倍数

底层实现

是否线程安全

同步方式

ArrayList

10

1

1.5

Object数组

线程不安全

-

Vector

10

1

2

Object数组

线程安全

synchronized

HashSet

16

0.75f

2

HashMap<E,Object>

线程不安全

-

HashMap

16

0.75f

2

Map.Entry<k,v>

线程不安全

-

HashTable

11

0.75f

2倍+1

Hashtable.Entry<k,v>

线程安全

synchronized

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

研发咨询顾问

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

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

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

打赏作者

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

抵扣说明:

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

余额充值