技术研发汇集

【Java】 Java中HashMap和TreeMap的区别

2024-01-21  本文已影响0人  星辰大海的精灵

首先我们来了解一下Map接口

(1)Map

Map包含了一系列“键(key)-值(values)”之间的映射关系,一个Map对象可以看作是一个“键-值”对的集合,在该集合中可以通过一个键找到其对应的值。

该接口是独立于Collection接口体系的,Map体系中所有类和接口的方法都源自于Map接口。

我们使用到的实现Map接口的类主要为HashMap类和TreeMap类。

(2)HashMap

HashMap 是 Map 接口的实现类,它存储的内容是键值对(key-value)映射,其中 key、value 都可以为 null。HashMap 是无序的,即被存入到 HashMap 中的元素,在遍历 HashMap 时,其输出是无序的。

由于采用了Hash函数,对于Map的普通操作性能是稳定的,但如果使用iterator访问Map,为了获得高的运行效率最好在创建HashMap时不要将它的容量设得太大。

创建HashMap

public static void main(String[] args) {

// 创建 HashMap 集合,key 存储字符串类型,value 存储整数类型

Map<String, Integer> hashMap = new HashMap<>();

}

HashMap集合的常用方法

put(key,value); //往集合中添加元素,key 值不可重复,重复时会覆盖之前的 value 值

get(Object key); //返回指定键的值(value),若不存在则返回null

remove(Object key); //根据 key 或者 key-value 去除集合中元素,并分别返回 value 值和 Boolean 值

boolean containsKey(Object key); //如果此映射包含指定键的映射,则返回true 。

boolean containsValue(Object value); //如果此映射将一个或多个键映射到指定的值,则返回true 。

int size(); //返回集合长度

boolean isEmpty(); //判断集合是否为空

void clear(); //清除集合中的所有元素

values(); //返回一个新集合,获取集合中所有元素的 values

keySet(); //返回一个新集合,获取集合中所有元素的 key

常用方法代码示例:

public static void main(String[] args) {

// 创建 HashMap 集合,key存储字符串类型,value存储整数类型

Map<String, Integer> hashMap = new HashMap<>();

// 添加元素

hashMap.put("李四",28);

hashMap.put("张三",26);

hashMap.put("王五",26);

// 根据 key 获取 value 值

Integer zs = hashMap.get("张三");

System.out.println(zs);

// 获取所有 key 值

Set<String> strings = hashMap.keySet();

System.out.println(strings);

// 获取所有 value 值

Collection<Integer> values = hashMap.values();

System.out.println(values);

// 根据 key 去除元素

Integer ww = hashMap.remove("王五");

System.out.println(ww);

// 根据 key-value 去除元素

boolean boole = hashMap.remove("李四", 28);

System.out.println(boole);

System.out.print(hashMap);

}

结果示例:

26

[李四, 张三, 王五]

[28, 26, 26]

26

true

{张三=26}

(3)TreeMap

TreeMap类和TreeSet类相似,是基于红黑树实现的,是采用一种有序树的结构实现了Map的子接口SortedMap。该类将按键的升序的次序排列元素。

创建TreeMap

public static void main(String[] args) {

// 创建 TreeMap 集合,key 存储字符串类型,value 存储整数类型

Map<Integer, Stirng> map = new TreeMap<>();

}

TreeMap的常用方法

clear(); //清除集合中的所有元素

boolean containsKey(Object key); //如果此映射包含指定键的映射,则返回true

boolean containsValue(Object value); //如果此映射将一个或多个键映射到指定的值,则返回true

int size(); //返回集合长度

get(Object key); //返回指定键的值(value),若不存在则返回null

firstKey(); //返回当前映射中的第一个键

lastKey(); //返回当前映射中的最后一个键

(4)HashMap和TreeMap的遍历方法

1.先得到key值,再使用iterator遍历集合

TreeMap<Integer,String> map = new TreeMap<>();

map.put(1,"xixi");

map.put(2,"jiaojiao");

Set<String> t = map.getKey();

Iterator it = t.iterator();

Integer key = null; //必须先进行key值的声明

while (it.hasNext()) {

key = (Integer)it.next();

String value = map.get(key);

System.out.println(value);

}

2.先得到key值,再使用增强for进行遍历(推荐使用增强for)

TreeMap<Integer,String> map = new TreeMap<>();

map.put(1,"xixi");

map.put(2,"jiaojiao");

for(int key:map.getKey){

System.out.println(map.get(key));

}

3.直接通过value值,使用iterator遍历

TreeMap<Integer,String> map = new TreeMap<>();

map.put(1,"xixi");

map.put(2,"jiaojiao");

Collection<String> t = map.values();

Iterator it = t.Iterator();

String value = null; //必须声明

while(it.hasNext()){

value = (String)it. next();

System.out.println(value);

}

4.直接通过value值,使用增强for遍历(推荐使用增强for)

TreeMap<Integer,String> map = new TreeMap<>();

map.put(1,"xixi");

map.put(2,"jiaojiao");

for(String value:map.values()){

System.out.println(value);

}

上一篇下一篇

猜你喜欢

热点阅读