IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 数据结构与算法 -> Java基础——Map接口 -> 正文阅读

[数据结构与算法]Java基础——Map接口

Map接口是和Collection同等级的根接口,它表示一个键值对(key-value)的映射,每一个key对应一个value,查找Map中的数据,总是根据key来获取,所以key是不可重复的。

1.Map接口

Map集合的特点:

1)Map集合是双边队列的,通过键值对(key-value)来进行存储数据

2)key值不能重复,value值可以重复

Map集合下面常用的方法:

增加:put(K key, V value);存放的是一个键值对的数据

putAll(Map<? extends K> k, Map<? extends V> v);将一个map集合存放到另一个map集合

删除:remove(Object k);通过键删除整个键值对,并返回被删除的值

修改:put(K key, V value); key存在的时候,就修改。当key不存在时,就添加

查询:boolean isEmpty();是否为空,map集合为空就返回true,不为空就返回false

boolean containsKey();是否包含这个键

boolean containsValue();是否包含这个值

V get(Object k);通过键获取值

Collection<V> values();获取map集合中所有的value值,返回的是Collection集合

Set<Map.entry<K, V>>entrySet()`;将键值对实体成一个Set集合

示例

public class Test {
public static void main(String[] args) {
HashMap<String, String> map = new HashMap<String, String>();
map.put("01", "哈哈");
map.put("02", "嘻嘻");
map.put("03", "嘿嘿");
map.put("03", "呵呵");
System.out.println(map);
HashMap<String, String> map1 = new HashMap<String, String>();
map1.put("07", "呼呼");
map1.put("08", "哦哦");
map1.put("01", "哈哈哈");
map.putAll(map1);
System.out.println(map);
System.out.println(map.remove("07"));
System.out.println(map);
map.put("01", "哈哈");
System.out.println(map);
System.out.println(map.isEmpty());
System.out.println(map.size());
System.out.println(map.containsKey("08"));
System.out.println(map.containsValue("嘿嘿嘿"));

Set<String> set = map.keySet();
System.out.println(set);
System.out.println(map.get("01"));
Collection<String> collection = map.values();
System.out.println(collection);

Set<Map.Entry<String, String>> set1 = map.entrySet();
System.out.println(set1);
for (Entry<String, String> entry : set1) {
System.out.println(entry.getKey());
System.out.println(entry.getValue());
        }
    }
}

2.Map的子类

1)HashMap<K, V> 底层是哈希表数据结构,基于hash值进行存储的,依靠key,要保证键的唯一性,需要覆盖hashCode方法,和equals方法。

示例

class Person {
	private String name;
	private int age;
	Person() {
 
	}
	public Person(String name, int age) {
 
		this.name = name;
		this.age = age;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public int getAge() {
		return age;
	}
	public void setAge(int age) {
		this.age = age;
	}
	@Override
	public int hashCode() {
		return this.name.hashCode() + age * 37;
	}
	@Override
	public boolean equals(Object obj) {
		if (obj instanceof Person) {
			Person p = (Person) obj;
			return this.name.equals(p.name) && this.age == p.age;
		} else {
			return false;
		}
	}
	@Override
	public String toString() {
		return "Person@name:" + this.name + " age:" + this.age;
	}
}
public class Test {
	public static void main(String[] args) {
		HashMap<Person, String> hm = new HashMap<Person, String>();
		hm.put(new Person("jack", 20), "1001");
		hm.put(new Person("rose", 18), "1002");
		hm.put(new Person("lucy", 19), "1003");
		hm.put(new Person("hmm", 17), "1004");
		hm.put(new Person("ll", 25), "1005");
		System.out.println(hm);
		System.out.println(hm.put(new Person("rose", 18), "1006"));
 
		Set<Entry<Person, String>> entrySet = hm.entrySet();
		Iterator<Entry<Person, String>> it = entrySet.iterator();
		while (it.hasNext()) {
			Entry<Person, String> next = it.next();
			Person key = next.getKey();
			String value = next.getValue();
			System.out.println(key + " = " + value);
		    }
	    }
    }
}

2)TreeMap<K, V> 基于二叉树进行存储的,存储的形式也是key,实现了SortedMap接口会对key值进行排序。

示例

class Student implements Comparable<Student>{
private String name;
private int age;
public Student(String name, int age) {
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
@Override
public String toString() {
return "Student [name=" + name + ", age=" + age + "]";
}
@Override
public int compareTo(Student o) {
int n1 = this.age - o.age;
int n2 = this.name.compareTo(o.name);
       if (n1 == 0) {
           return n2;
      } else {
           return n1;
      }
    }
}

public class Test {
public static void main(String[] args) {
Student stu1 = new Student("张三", 12);
Student stu3 = new Student("李四", 20);
Student stu2 = new Student("王五", 23);
Student stu4 = new Student("马六", 13);
Student stu5 = new Student("赵二", 13);

TreeMap<Student, String> treeMap = new TreeMap<Student, String>();
treeMap.put(stu1, "踏实");
treeMap.put(stu2, "勤奋");
treeMap.put(stu3, "刻苦");
treeMap.put(stu4, "愚钝");
treeMap.put(stu5, "懒散");
System.out.println(treeMap);
}

}

  数据结构与算法 最新文章
【力扣106】 从中序与后续遍历序列构造二叉
leetcode 322 零钱兑换
哈希的应用:海量数据处理
动态规划|最短Hamilton路径
华为机试_HJ41 称砝码【中等】【menset】【
【C与数据结构】——寒假提高每日练习Day1
基础算法——堆排序
2023王道数据结构线性表--单链表课后习题部
LeetCode 之 反转链表的一部分
【题解】lintcode必刷50题<有效的括号序列
上一篇文章      下一篇文章      查看所有文章
加:2022-02-05 21:57:54  更:2022-02-05 21:59:30 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/26 17:36:45-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码