前言
|ू・ω・` )
Map的方法使用跟Set的使用没有很大的区别,最大的区别就在于:
Map集合中存放的都是一组组映射关系
都是以一个建对一个值
- HashMap(底层结构:哈希表数据结构,效率高)
Map<String, Object> mp = new HashMap<>();
- TreeMap(底层结构:二叉树结构,可以进行排序)
Map<student, String> map = new TreeMap<>();
应用一(HashMap):
需求:学生作为键,地址作为值进行存储,名字年龄相同则被认定为一个人
重写好**hashCode()方法和equals()**方法
应用一(TreeMap):
需求:按年龄进行排序
应用二
需求:统计字符串中字符出现次数,比如:(sjsdfsfsdfsfsdfsdfssdsa)
这个我们需先理清楚思路:
统计:
- 将字符串转换为字符数组,将这个字符串中的字符当作map的key值,将出现的次数作为values
- 当字符第一次出现后,要去这个集合查找,若没有的话返回为null,那么就将values设置为1
- 如果说不是第一次,那么就返回不为null,就将values++;
ok,看代码
public static void main(String[] args) {
String str ="sjsdfsfsdfsfsdfsdfssdsa";
System.out.println(charach(str));
}
public static StringBuffer charach(String str) {
Map<Character, Integer> map = new TreeMap<>();
char[] charArray = str.toCharArray();
for (char c : charArray) {
Integer get = map.get(c);
if(get==null) {
map.put(c, 1);
}
else {
map.put(c, ++get);
}
}
StringBuffer sbf = new StringBuffer();
Set<Entry<Character, Integer>> entrySet = map.entrySet();
for (Entry<Character, Integer> entry : entrySet) {
sbf.append(entry.getKey()+"("+entry.getValue()+")");
}
return sbf;
}
根据次数排序
Set的用法和Map是差不多的主要在于他们的方法:
- 增加
put(K key, V value)
putAll(Map<? extends K,? extends V> m)
- 删除
clear()
remove(Object key)
- 判断
containsKey(Object key)
containsValue(Object value)
isEmpty()
- 获取
get(Object key)
size()
values()
//遍历时所要用到的
entrySet()
keySet()
题外(Collections和Arrays)
Collections:是集合框架中的工具类,方法是静态的
如下一些:
- Collections.sort(List list);按自然顺序排序
- Collections.reverse(List list); 强行将按自然顺序排列的顺序逆转,可以自己加入比较器,按自定义比较方法逆转。
- Collections.shuffle(List<?> list);使用默认随机源对指定列表进行替换。
Arrays:是集合框架中的工具类,方法是静态的
如下一些:
- Arrays.sort();排序
- Arrays.binarySearch();二分查找
- Arrays.equals();两个数组相等的判定:两个数组包含相同数量的元素,并且两个数组中的所有相应元素都是相等的。
题外 集合框架拓展(增强for循环、可变参数、静态导入)
- 增强for循环
概念:实际上有很多人都用过的,但是不知道叫什么,
也就是我们经常用的foreach遍历
普通for循环的遍历方式
for(int i = 0 ; i<arr.length ; i++){
System.out.println("元素:"+ arr[i]);
}
//使用增强for循环实现
for(int item :arr){
System.out.println("元素:"+ item);
}
其实:增强for循环底层也是使用了迭代器获取的
- 可变参数
概念:如果在写一个方法时,不清楚自己到底要写多少参数时,就可以用到可变参数了
因为可变参数,会自动变化:
如:
public static void main(String[] args) {
printarr("first","second");
}
public static void printarr(String...str){
for(String string:str){
System.out.println(string); //输出 first second
}
}
每个方法最多一个变长参数,并且该参数的位置是方法的的最后
**注意,虽然这种方法可以重载,但是系统调用时会优先调用固定参数的方法
-
静态导入
概念:就是导入某个包里所有的静态成员
如:
import static java.util.system;