20.集合类-HashMap和TreeMap
20.1 知识点
回顾Java中集合类关系
// Collection(接口)
// __________|__________
// | |
// Set(接口) List(接口)
// ___|____ _____|_____
// | | | |
// HashSet SortedSet ArrayList LinkedList
// |
// TreeSet
// Map(接口)
// ________|_______
// | |
// HashMap TreeMap
// Map集合类似C#中的Dictionary字典
// 以键值对形式存储数据
Map接口中的方法
put(K key, V value) 添加键值对
containsKey(Object key) 判断是否存在键
containsValue(Object value) 判断是否存在值
get(Object key) 如果存在key,则返回对应值,否则返回null
keySet() 返回该集合中的所有key对象形成的Set集合
values() 返回该集合中所有value对象形成的Collection集合
size() 键值对对数
isEmpty() 是否为空
remove(Object key) 根据键移除
clear() 清空容器
HashMap和TreeMap之间的区别
相同点:他们都是以键值对形式存储数据,方法使用基本相同
不同点:
- HashMap允许有null键和null值(但是必须保持键的唯一性)
TreeMap不允许键为空 - TreeMap中的映射关系具有一定的顺序,它会帮助我们进行排序
因此在添加、删除、定位映射关系时,效率较HashMap差 - HashMap数据结构基于哈希表,TreeMap数据结构基于树
在实际使用时,建议都使用HashMap,除非需要排序的Map时才用TreeMap
HashMap和TreeMap中的常用方法
// 1.初始化
// 创建一个HashMap,键为Integer类型,值为String类型
HashMap<Integer, String> hashMap = new HashMap<>();
// 2.增
// 向HashMap中添加三个键值对
hashMap.put(1, "123");
hashMap.put(2, "234");
hashMap.put(3, "345");
// 3.删
// 从HashMap中移除键为3的条目
hashMap.remove(3);
// 4.查
// 打印键为2对应的值,预期输出: 234
System.out.println(hashMap.get(2));
// 检查HashMap中是否包含键1,是,因此打印: 存在键1
if (hashMap.containsKey(1)) System.out.println("存在键1");
// 检查HashMap中是否包含值"123",是,因此打印: 存在值123
if (hashMap.containsValue("123")) System.out.println("存在值123");
// 5.改
// 如果HashMap中包含键1,则将其对应的值改为"555"
if (hashMap.containsKey(1)) hashMap.put(1, "555");
// 打印修改后键为1对应的值,预期输出: 555
System.out.println(hashMap.get(1));
// 6.遍历
// 遍历HashMap的键,并打印对应的值
// 预期输出(顺序可能不同,因为HashMap不保证顺序):
// 555
// 234
for (Integer i : hashMap.keySet())
{
System.out.println(hashMap.get(i));
}
// 遍历HashMap的值并打印
// 预期输出(顺序可能不同,因为HashMap不保证顺序):
// 555
// 234
for (String str : hashMap.values())
{
System.out.println(str);
}
总结
Java中的Map集合类似C#中的Dictionary字典
我们在使用时,建议主要使用HashMap,它的效率高于TreeMap
20.2 知识点代码
import java.util.HashMap;
public class Lesson20_集合类_HashMap和TreeMap
{
public static void main(String[] args)
{
//知识点1:回顾Java中集合类关系
// Collection(接口)
// __________|__________
// | |
// Set(接口) List(接口)
// ___|____ _____|_____
// | | | |
//HashSet SortedSet ArrayList LinkedList
// |
// TreeSet
// Map(接口)
// ________|_______
// | |
// HashMap TreeMap
//Map集合类似C#中的Dictionary字典
//以键值对形式存储数据
//知识点2:Map接口中的方法
//1.put(K key, V value) 添加键值对
//2.containsKey(Object key) 判断是否存在键
//3.containsValue(Object value) 判断是否存在值
//4.get(Object key) 如果存在key,则返回对应值,否则返回null
//5.keySet() 返回该集合中的所有key对象形成的Set集合
//6.values() 返回该集合中所有value对象形成的Collection集合
//7.size() 键值对 对数
//8.isEmpty() 是否为空
//9.remove(Object key) 根据键移除
//10.clear() 清空容器
//知识点3:HashMap和TreeMap之间的区别
//相同点:他们都是以键值对形式存储数据,方法使用基本相同
//不同点:1.HashMap允许有null键和null值(但是必须保持键的唯一性)
// TreeMap不允许键为空
// 2.TreeMap中的映射关系具有一定的顺序,它会帮助我们进行排序
// 因此在添加、删除、定位映射关系时,效率较HashMap差
// 3.HashMap数据结构基于哈希表,TreeMap数据结构基于树
//在实际使用时,建议都使用HashMap,除非需要排序的Map时才用TreeMap
//知识点4:HashMap和TreeMap中的常用方法
//1.初始化
// 创建一个HashMap,键为Integer类型,值为String类型
HashMap<Integer, String> hashMap = new HashMap<>();
//2.增
// 向HashMap中添加三个键值对
hashMap.put(1, "123");
hashMap.put(2, "234");
hashMap.put(3, "345");
//3.删
// 从HashMap中移除键为3的条目
hashMap.remove(3);
//4.查
// 打印键为2对应的值,预期输出: 234
System.out.println(hashMap.get(2));
// 检查HashMap中是否包含键1,是,因此打印: 存在键1
if (hashMap.containsKey(1)) System.out.println("存在键1");
// 检查HashMap中是否包含值"123",是,因此打印: 存在值123
if (hashMap.containsValue("123")) System.out.println("存在值123");
//5.改
// 如果HashMap中包含键1,则将其对应的值改为"555"
if (hashMap.containsKey(1)) hashMap.put(1, "555");
// 打印修改后键为1对应的值,预期输出: 555
System.out.println(hashMap.get(1));
//6.遍历
// 遍历HashMap的键,并打印对应的值
// 预期输出(顺序可能不同,因为HashMap不保证顺序):
// 555
// 234
for (Integer i : hashMap.keySet())
{
System.out.println(hashMap.get(i));
}
// 遍历HashMap的值并打印
// 预期输出(顺序可能不同,因为HashMap不保证顺序):
// 555
// 234
for (String str : hashMap.values())
{
System.out.println(str);
}
//总结
//Java中的Map集合类似C#中的Dictionary字典
//我们在使用时,建议主要使用HashMap,它的效率高于TreeMap
}
}
转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 785293209@qq.com