目录
一、Map集合概述
⬇特点&遍历方式
⬇Map接口和Collection接口的不同
⬇HashMap与Hashtable之间的区别
二、Map集合的功能概述
a:添加元素功能
b:删除元素功能
c:判断功能
d:获取元素功能
⬇案例:统计字符串各字母出现的次数
三、泛型的作用
四、集合框架工具类
一、Map集合概述
⬇特点&遍历方式
-
特点:无序、以键值对的形式存储元素,键不能重复,值可以重复
-
特点:无序、以键值对的形式存储元素,键不能重复,值可以重复
- 遍历方式:keySet entrySet
源代码:
package com.hemingxiang.Map; import java.util.HashMap; import java.util.Hashtable; import java.util.Map; import java.util.Map.Entry; import java.util.Set; public class Demo1 { public static void main(String[] args) { Mapmap=new HashMap<>(); //以键,值对的形式存储 map.put("a", 1); map.put("b", 2); map.put("c", 3); map.put("d", 4); map.put("e", 5); System.out.println(map); //删除 Object remove = map.remove("b"); System.out.println(map+"t删除为第"+remove+"位"); //修改 同样调用put方法 map.put("c", 32); System.out.println(map); //查询 单个 System.out.println("查询单个"+map.get("c")); //查询所有 特点二 //1.先拿到map集合中所有的key Set key = map.keySet();//拿到所有键 //将key遍历 for (Object obj : key) { System.out.println("键"+obj+"值"+map.get(obj)); } System.out.println("----------------------------------"); //2.拿到映射关系 Set > entrySet = map.entrySet(); for (Entry entry : entrySet) { System.out.println("键"+entry.getKey()+"值"+entry.getValue()); } } } 源码运行效果:
⬇Map接口和Collection接口的不同
- Map是双列的(是双列集合的根接口),Collection是单列的(是单列集合的根接口)
- Map的键唯一,Collection的子体系Set是唯一的
- Map集合的数据结构值针对键有效,跟值无关;如:TreeMap:键是用二叉树算法,HashMap:键是hash算法, Collection集合的数据结构是针对元素有效
⬇HashMap与Hashtable之间的区别
-
HashMap非同步(V put(k key, v value)) 线程不安全
-
Hashtable同步(public synchonized V put(k key, v value)) 线程安全 同步既排队
二、Map集合的功能概述
a:添加元素功能
- V put(K key,V value):添加元素。
- 如果键是第一次存储,就直接存储元素,返回null
- 如果键不是第一次存储,就用值把以前的值替换掉,返回以前的值
b:删除元素功能
- void clear():移除所有的键值对元素
- V remove(Object key):根据键删除键值对元素,并把值返回
c:判断功能
- boolean containsKey(Object key):判断集合是否包含指定的键
- boolean containsValue(Object value):判断集合是否包含指定的值
- boolean isEmpty():判断集合是否为空
d:获取元素功能
- Set
> entrySet():获取映射关系 - V get(Object key):根据键获取值
- Set
keySet():获取集合中所有键的集合 - Collection
values():获取集合中 * int size():返回集合中的键值对的个数所有值的集合
⬇案例:统计字符串各字母出现的次数
- Map是双列的(是双列集合的根接口),Collection是单列的(是单列集合的根接口)
- Map的键唯一,Collection的子体系Set是唯一的
- Map集合的数据结构值针对键有效,跟值无关;如:TreeMap:键是用二叉树算法,HashMap:键是hash算法, Collection集合的数据结构是针对元素有效
HashMap非同步(V put(k key, v value)) 线程不安全
Hashtable同步(public synchonized V put(k key, v value)) 线程安全 同步既排队
二、Map集合的功能概述
a:添加元素功能
- V put(K key,V value):添加元素。
- 如果键是第一次存储,就直接存储元素,返回null
- 如果键不是第一次存储,就用值把以前的值替换掉,返回以前的值
b:删除元素功能
- void clear():移除所有的键值对元素
- V remove(Object key):根据键删除键值对元素,并把值返回
c:判断功能
- boolean containsKey(Object key):判断集合是否包含指定的键
- boolean containsValue(Object value):判断集合是否包含指定的值
- boolean isEmpty():判断集合是否为空
d:获取元素功能
- Set
> entrySet():获取映射关系 - V get(Object key):根据键获取值
- Set
keySet():获取集合中所有键的集合 - Collection
values():获取集合中 * int size():返回集合中的键值对的个数所有值的集合
⬇案例:统计字符串各字母出现的次数
- V put(K key,V value):添加元素。
- 如果键是第一次存储,就直接存储元素,返回null
- 如果键不是第一次存储,就用值把以前的值替换掉,返回以前的值
b:删除元素功能
- void clear():移除所有的键值对元素
- V remove(Object key):根据键删除键值对元素,并把值返回
c:判断功能
- boolean containsKey(Object key):判断集合是否包含指定的键
- boolean containsValue(Object value):判断集合是否包含指定的值
- boolean isEmpty():判断集合是否为空
d:获取元素功能
- Set
> entrySet():获取映射关系 - V get(Object key):根据键获取值
- Set
keySet():获取集合中所有键的集合 - Collection
values():获取集合中 * int size():返回集合中的键值对的个数所有值的集合
⬇案例:统计字符串各字母出现的次数
- boolean containsKey(Object key):判断集合是否包含指定的键
- boolean containsValue(Object value):判断集合是否包含指定的值
- boolean isEmpty():判断集合是否为空
d:获取元素功能
- Set
> entrySet():获取映射关系 - V get(Object key):根据键获取值
- Set
keySet():获取集合中所有键的集合 - Collection
values():获取集合中 * int size():返回集合中的键值对的个数所有值的集合
⬇案例:统计字符串各字母出现的次数
源代码:
package com.hemingxiang.Map;
import java.util.HashMap;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Set;
public class Demo2 {
public static void main(String[] args) {
//统计字符串各字母出现的次数
String str="sjfjlujkpfmjwpkjmslpls";
char[] cs = str.toCharArray();
//添加一个map容器
Map map=new HashMap();//如要将字母出现的次
//数按照26个字母先后顺序排序把HashMap改为TreeMap<>();即可
for (char c : cs) {
Integer value=map.get(c);
if(value==null) {
map.put(c, 1);
}
else {
map.put(c, value+1);
}
Set> entrySet = map.entrySet();
for (Entry entry : entrySet) {
System.out.println(entry.getKey()+" : "+entry.getValue());
}
}
}
}
代码运行出来的结果:s:3 j:5 f:2 l:3 u:1 k:2 p:3 m:2 w:1
细心的朋友一定已经注意到这里提到的调式器吧!是的,这个案例借助到了调式器的帮助,下面看图,更形象看一下怎么用吧樂
三、泛型的作用
①提高代码健壮性;不健壮的代码,在运行时才会把错误暴露出来
②将运行期出现的异常转换为编译错误;错误代码,将潜在问题暴露出来,早预防早治疗
想要了解更多去看看这个博主⬇⬇⬇⬇https://blog.csdn.net/s10461/article/details/53941091?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522165476955916782350910600%2522%252C%2522scm%2522%253A%252220140713.130102334..%2522%257D&request_id=165476955916782350910600&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~top_positive~default-1-53941091-null-null.142^v11^control,157^v13^control&utm_term=%E6%B3%9B%E5%9E%8B&spm=1018.2226.3001.4187https://blog.csdn.net/s10461/article/details/53941091?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522165476955916782350910600%2522%252C%2522scm%2522%253A%252220140713.130102334..%2522%257D&request_id=165476955916782350910600&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~top_positive~default-1-53941091-null-null.142%5Ev11%5Econtrol,157%5Ev13%5Econtrol&utm_term=%E6%B3%9B%E5%9E%8B&spm=1018.2226.3001.4187
四、集合框架工具类
①提高代码健壮性;不健壮的代码,在运行时才会把错误暴露出来
②将运行期出现的异常转换为编译错误;错误代码,将潜在问题暴露出来,早预防早治疗
想要了解更多去看看这个博主⬇⬇⬇⬇https://blog.csdn.net/s10461/article/details/53941091?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522165476955916782350910600%2522%252C%2522scm%2522%253A%252220140713.130102334..%2522%257D&request_id=165476955916782350910600&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~top_positive~default-1-53941091-null-null.142^v11^control,157^v13^control&utm_term=%E6%B3%9B%E5%9E%8B&spm=1018.2226.3001.4187https://blog.csdn.net/s10461/article/details/53941091?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522165476955916782350910600%2522%252C%2522scm%2522%253A%252220140713.130102334..%2522%257D&request_id=165476955916782350910600&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~top_positive~default-1-53941091-null-null.142%5Ev11%5Econtrol,157%5Ev13%5Econtrol&utm_term=%E6%B3%9B%E5%9E%8B&spm=1018.2226.3001.4187
Collections ---->aslist排序;toArray集合转数组
看源码:
package com.hemingxiang.Map;
import java.util.Arrays;
import java.util.List;
public class Demo4 {
public static void main(String[] args) {
//字符串数组
String[] arr = {"a","b","c","d"};
List ls = Arrays.asList(arr);//排序
System.out.println(ls);
//数组转集合
//ls.add("e");
//集合转数组
Object[] array = ls.toArray();
System.out.println(ls.size());
}
}
输出结果:
(先看一个错误❗❗)
Arrays---->sort排序;toString
看源码:
package com.hemingxiang.Map;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
import java.util.Collections;
import java.util.List;
public class Demo5 {
public static void main(String[] args) {
List list = new ArrayList<>();
list.add(new Person("b", 16));
list.add(new Person("c", 18));
list.add(new Person("a", 17));
list.add(new Person("d", 15));
//Collections.sort(list);
Collections.sort(list, (x,y)->x.getName().compareTo(y.getName()));
System.out.println(list);
Integer[] arr= {3,6,9,5,4,8};
Arrays.sort(arr);//升序
System.out.println("升序"+Arrays.toString(arr));
Arrays.sort(arr, (x,y) -> y - x);//降序
System.out.println("降序"+Arrays.toString(arr));
}
}
class Person {
private String name;
private int 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;
}
public Person(String name, int age) {
super();
this.name = name;
this.age = age;
}
public Person() {
super();
}
@Override
public String toString() {
return "Person [name=" + name + ", age=" + age + "]";
}
//重写Comparable
}
使上方字母按顺序倒序输出效果图:
获取实体类的数值,错误演示:
也可以不同实现Comparable接口⬇⬇
升降序:



