集合框架Map的所有子类
- |--map
-
- |--HashMap
-
- |--HashTable
- |--TreeMap
- 遍历map的几种方法
Map 是一种键-值对(key-value)集合,Map 集合中的每一个元素都包含一个键对象和一个值对象。其中,键对象不允许重复,而值对象可以重复。
文章图片
-----Map集合共性方法
1.添加
put(K key,V value)
//添加元素,如果出现添加时,相同的键,后者覆盖前者,put方法会返回被覆盖的键
putAll(Map extends K,? extends V> m)
2.删除
clear()
remove(Object key)
3.判断
containsValue(Object key)
containsKey(Object key)
isEmpty()
4.获取
get(Object key)/可以用get方法的返回的值判断一个键是否存在,通过返回null判断
size()
values()//获取map集合中所有的值
5.两种取出map集合的方式 :
1.keySet():返回map集合的所有键的Set集合,
Set
//先获取map集合的所有键的Set集合,keySet();
Set keySet=map.keySet();
//有了Set集合,就可以获取其迭代器
Iterator it=keySet.iterator();
while(it.hasNext()) {
String key=it.next();
//有了键可以通过map集合的get方法获取其对应的值
String value=https://www.it610.com/article/map.get(key);
System.out.println("key:"+key+"value:"+value);
}
2.entrySet():返回map集合中的映射关系的Set集合,Set
//将Map集合中的映射关系取出,存入到Set集合中。
Set> entrySet=map.entrySet();
Iterator> it2=entrySet.iterator();
while(it2.hasNext()) {
Map.Entry me=it2.next();
System.out.println(me.getKey()+","+me.getValue());
}
//Map.Entry 其实Entry也是一个接口,它是Map结构中的一个内部接口
Set底层就是使用了Map集合
|–map Map集合:该集合存储键值对,一对一往里存,而且要保证键的唯一性。
key:键 value:值
|–HashMap |–HashMap:底层是哈希表数据结构,允许使用null键null值,该集合是非同步的。JDK1.2 效率高
案例:
package 黑马集合框架Map;
import java.util.*;
/*
每一个学生都有对应的归属地
学生Student,地址String
学生属性:姓名,年龄。
注意:姓名和年龄相同的视为同一个学生。
保证学生的唯一性1.描述学生
2.定义map容器,将学生作为键,地址作为值,存入。
3.获取map集合中的元素
*/
public class MapTest {
public static void main(String[] args) {
HashMap hm=new HashMap();
hm.put(new Student("lisi1",21), "beijing");
hm.put(new Student("lisi1",21), "tianjing");
hm.put(new Student("lisi2",22), "shanghai");
hm.put(new Student("lisi3",23), "nanjing");
hm.put(new Student("lisi4",24), "wuhan");
//第一种取出方式 keySet
//Set keySet=hm.keySet();
//Iterator it=keySet.iterator();
Iterator it=hm.keySet().iterator();
while(it.hasNext()){
Student key=it.next();
String Value=https://www.it610.com/article/hm.get(key);
//根据键获取值
System.out.println("key:"+key+"Value:"+Value);
}//第二种取出方式 entrrySet
Set> entrySet=hm.entrySet();
Iterator> iter=entrySet.iterator();
while(iter.hasNext()) {
Map.Entry me=iter.next();
Student stu=me.getKey();
String addr=me.getValue();
System.out.println(stu+"...."+addr);
} }
}
class Student implements Comparable//让元素具备比较性
{
private String name;
private int age;
Student(String name,int age){
this.name=name;
this.age=age;
}
public int compareTo(Student s) {//让元素具备比较性
int num=new Integer(this.age).compareTo(s.age);
if(num==0)
return this.name.compareTo(s.name);
return num;
}
/*
TreeSet排序的第一种方式(默认顺序):让元素自身具备比较性
实现Comparable接口强制让元素(学生类)具备比较性
覆盖接口中的compareTo方法
*/
public int hashCode()
{
return name.hashCode()+age*34;
}
public boolean equals(Object obj)
{
if(!(obj instanceof Student))
throw new ClassCastException("类型不匹配");
Student s=(Student)obj;
return this.name.equals(s.name) && this.age==s.age;
}
/*
HashSet如何保证元素的唯一性:
通过元素的两个方法,hasCode和equals来完成
如果元素的HashCode值相同,才会判断equals是否为true
如果元素的HashCode值不同,不会调用equals。
注意:对于判断元素是否存在,以及删除等操作,依赖的方法是元素的hasCode和equals方法
*/
public String getName() {
return name;
}
public int getAge() {
return age;
}
public String toString()
{
return name+":"+age;
}
}
|–HashTable
|–HashTable:底层是哈希表数据结构,不可以存入null键null值,该集合是同步的 JDK1.0 效率低
|–TreeMap |–TreeMap:底层是二叉树数据结构,线程不同步,可以用于给mao集合中的键进行排序
案例:
package 黑马集合框架Map;
import java.util.*;
/*
练习:
"sdfgzxcvasdfxcvdf"获取该字符串中的字母出现的次数希望打印结果:a(1)c(2)
通过结果发现,每一个字母都有对应的关系
说明字母和次数之间都有映射关系注意:当发现有映射关系时,可以选择map集合
因为map集合中存放的就是映射关系思路:
1.将字符串转换成字符数组,因为要对每一个字母进行操作
2.定义一个map集合,因为打印结果的字母有顺序,所以使用TreeMap集合
3.遍历字符数组
将每一个字母作为键去查map集合
如果返回null,将该字母和1存入到map集合中
如果返回不是null,说明该字母在map集合已经存在并有对应的次数。
那么就获取该次数并进行自增,然后将该字母和自增后的次数存入到map集合中,覆盖原来键所对应的值
4.将map集合中的数据变成指定的 字符串形式 返回
*/
public class MapTest3 { public static void main(String[] args) {
String result=countChar("sdfgzxcvasdfxcvdf");
System.out.println(result);
}
public static String countChar(String str1) {
char[] str=str1.toCharArray();
//将字符串转换成字符数组
TreeMap tm=new TreeMap();
//创建TreeMap
int count=0;
for(int i=0;
i.length;
i++) {//遍历
Integer value=https://www.it610.com/article/tm.get(str[i]);
//获取次数if(value!=null)//代码优化
count=value;
tm.put(str[i], ++count);
count=0;
//if(value==null){//没有该键
//tm.put(str[i], 1);
//}
//else {
//tm.put(str[i], ++value);
//次数++
//}
}//取出存入到字符串缓冲区StringBuffer,最后toString输出字符串
StringBuffer sb=new StringBuffer();
Set> entrySet=tm.entrySet();
Iterator> it=entrySet.iterator();
while(it.hasNext()) {
Map.Entry me=it.next();
sb.append(me.getKey()+"("+me.getValue()+")\t");
}
return sb.toString();
//返回字符串
}}
遍历map的几种方法 方法一:普通的foreach循环,使用keySet()方法,遍历key
for(Integer key:map.keySet()){
System.out.println("key:"+key+" "+"Value:"+map.get(key));
方法二:把所有的键值对装入迭代器中,然后遍历迭代器
Iterator> it=map.entrySet().iterator();
while(it.hasNext()){
Map.Entry entry=it.next();
System.out.println("key:"+entry.getKey()+" "
+"Value:"+entry.getValue());
}
方法三:分别得到key和value
for(Integer obj:map.keySet()){
System.out.println("key:"+obj);
}for(String obj:map.values()){
System.out.println("value:"+obj);
}
方法四,entrySet()方法
Set> entries=map.entrySet();
for (Map.Entry entry:entries){
System.out.println("key:"+entry.getKey()+" "
+"value:"+entry.getValue());
}
【Java笔记|集合框架Map,HashMap,TreeMap【JAVA基础】】总结:
其实主要就两种方法,
第一种是通过
keySet()
方法,获得key,然后再通过map.get(key)方法,把参数key放入即可得到值;第二种是先转为为Set类型,用
entrySet()
方法,其中set中的每一个元素值就是map的一个键值对,也就是Map.Entry推荐阅读
- 源码阅读|HashMap原理及常见考点
- Java15新特性及代码示例
- 计算机视觉算法工程师|算法工程师15——数据结构与算法加强版
- 数据结构|数据结构与算法—— 树
- Python系列|数据结构与算法笔记(五)——队列(FIFO队列、双端队列)
- python|Python数据结构与算法(3.3)——队列
- 人脸识别|从人脸识别到唇语识别,图像识别技术发展现状
- 程序人生|外包干了五年,已经快寄了...
- java|java 代码封装_封装 java代码