1.集合框架Map方法归类
2.Map两种遍历方式
3.Map的去重复以及排序
4.运用Map统计字符串出现的次数(面试题)
Map中存放的都是一组组映射关系(Key==value) Map中的key不要求有序,不允许重复。value同样不要求有序,但可以重复。 最常见的Map实现类是HashMap, 储存方式是哈希表,优点是查询指定元素效率高。 在集合中是允许嵌套的 在map集合中key值不能重复,但是value值可以
1.集合框架Map方法归类
HashMap<String, Object> map=new HashMap<>();
map.put("java01", 1);
map.put("java02", 2);
map.put("java03", 3);
map.put("java04", 3);
1、增加
map.put(K key, V value)
map.putAll(Map<? extends K,? extends V> m)
2、删除
map.clear()
map.remove(Object key)
3、判断
map.containsKey(Object key)
map.containsValue(Object value)
map.isEmpty()
4、获取
map.get(Object key)
map.size()
map.values()
关于put:
1: 添加元素的同时 他可以编辑原有的元素
如果说集合中没有key对应的value,那么就往集合中添加元素
如果说集合中对应的key有values值,则代表替换原有的值
2: 返回替换前原有的value值
Object obj=map.put("java04", "*");
返回的是你之前传进的value值
2.Map两种遍历方式
第一种:map.entrySet
Set<Entry<String, Object>> entrySet = map.entrySet();
for (Entry<String, Object> entry : entrySet) {
System.out.println(entry.getKey()+"=="+entry.getValue());
}
System.out.println("-------------------------");
第二种:map.keySet
Set<String> keySet = map.keySet();
for (String key : keySet) {
System.out.println(key+"=="+map.get(key));
}
3.Map的去重复 和排序
Map
Hashtable:底层是哈希表数据结构,不可以存入null键null值,该集合石线程同步的,jdk1.0,效率低
HashMap:底层是哈希表数据结构,允许使用null值和null键,该集合是不同步的。将Hashtable替代;jdk1.2,效率高
TreeMap:底层是二叉树数据结构,线程不同步,可以用于给Map集合中的键进行排序
排序:先写一个实体类 实现comparable接口
Map<Student, String> map = new TreeMap<>();
map.put(new Student("liuting",18), "beijing");
map.put(new Student("wangwang",56), "changcha");
map.put(new Student("goudan",28), "dongjin");
map.put(new Student("xuayangyang",18), "hulunbeier");
map.put(new Student("liuting",18), "beijing");
map.put(new Student("liuting",18), "beijing");
Set<Entry<Student, String>> entrySet = map.entrySet();
for (Entry<Student, String> entry : entrySet) {
System.out.println(entry.getKey()+"==="+entry.getValue());
}
//重写
@Override
public int hashCode() {
return this.getName().hashCode()+this.getAge()*39;
}
//判重equals 不然还是原来的数
@Override
public boolean equals(Object obj) {
Student stu=(Student) obj;
return this.getAge()==stu.getAge()&&this.getName().equals(stu.getName());
}
//按年龄进行排序
@Override
public int compareTo(Student o) {
int num=this.getAge()-o.getAge();//主要条件
if(num==0) {
return this.getName().compareTo(o.getName());//次要条件
}
return num;
}
//排序 按名字首字母排序
class StuComp implements Comparator<Student>{
@Override
public int compare(Student o1, Student o2) {
int num=o1.getName().compareTo(o2.getName());
if(num==0) {
return o1.getAge()-o2.getAge();
}
return num;
}
4.运用Map统计字符串出现的次数(面试题)
/**
*
* 思考
* 统计 排序
*
* 统计功能
*
* 1.将字符串转为字符数组 将这个字符串中的字符串中的字符当作map集合中的map,
* 将字符的次数作为value值
*
*
* 2.当字符出现第一次的时候,用它在集合中寻找,返回值必然为null,之后将该字符对应的值改为1
*
* 3.如果不是第一次出线值不为null 就应该加一;
*/
//定义一个值
public static void main(String[] args) {
String str="ajuhoarhoaloriouehjfuvkajdfbhoiaehp";
str=cishu(str);
System.out.println(str);
}
//字符串统计的功能
public static String cishu(String str) {
char[] charArray = str.toCharArray();
//创建一个集合
Map<Character, Integer>map=new HashMap<>();//map集合中的泛型要使用包装类或者是引用数据类型
//遍历
for (char c : charArray) {
Integer value = map.get(c);
if(value==null) {
map.put(c, 1);//该字符对应的值不为null
}else {
map.put(c, ++value);
}
}
StringBuffer和String的区别
String:会开辟一个行的空间
StringBuffer:不会开辟新的空间;从而性能更优
StringBuffer sb=new StringBuffer();
for(Map.Entry<Character, Integer> entry:map.entrySet()) {
sb.append(entry.getKey()+"("+entry.getValue()+")");
}
return sb.toString();
}