集合框架Map的介绍
1.Map集合中存放的都是一组映射关系
2.在集合中我们用的最多的一般是LIst集合和Map集合
3.增加
putput(key, value)
//在原有的键中添加value值会覆盖原有的value值
4.删除
map.clear();
//这个可以清空所有元素 运行结果是返回一个null;
HashMap<String, Object> map = new HashMap<>();
map.put("java01", 1);
Object obj=map.remove("java01");//这里会移除当前的键
System.out.println(obj);//返回一个value值
5.可以返回替换前的值
map.put("java03", 3);
map.put("java04", 3);
Object put = map.put("java04", "*");
//可以返回替换前的值
System.out.println(put);
//Map方法没有迭代器
//如下图所示
6.
//取元素有entrySet(),keySet()两种方法
//entrySet()
Set<Entry<String, Object>> entrySet = map.entrySet();
for (Entry<String, Object> entry : entrySet) {
System.out.println(entry.getKey() + "===" + entry.getValue());
}
----------------------------------------------------------
//keySet()
Set<String> keySet = map.keySet();
for (String key : keySet) {
System.out.println(key + "===" + map.get(key));
}
//在Map集合中key不能重复
集合框架Map应用
public class TreeMapDemo {
public static void main(String[] args) {
// Map<Student, String> map = new HashMap<>();
// Map<Student, String> map = new TreeMap<>();//
Map<Student, String> map = new TreeMap<>(new StuComp());//实现选择器排序
map.put(new Student("liuting", 18), "bejing");
map.put(new Student("wangwang", 43), "xingjiang");
map.put(new Student("goudan", 28), "dongjiang");
map.put(new Student("xuyangyang", 38), "hulunbeier");
map.put(new Student("liutingting", 18), "bejing");
System.out.println(map.size());//打印长度
Set<Entry<Student, String>> entrySet = map.entrySet();//调用entrySet方法
for (Entry<Student, String> entry : entrySet) {//进行遍历
System.out.println(entry.getKey() + "====" +entry.getValue());//打印键和值
}
}
}
class Student implements Comparable<Student>{
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;
}
@Override
public String toString() {
return "Student [name=" + name + ", age=" + age + "]";
}
public Student(String name, int age) {
super();
this.name = name;
this.age = age;
}
public Student() {
super();
}
private int hashcode() {
return this.getName().hashCode() + this.getAge()*39;//*39让其变大,不容易被分成一类.
}
@Override
public boolean equals(Object obj) {//判重用的
Student stu = (Student)obj;
return this.getAge() ==stu.getAge() && this.getName().equals(stu.getName());
// int num = this.getName().compareTo(stu.getName());
// Comparable以及comparator
}
@Override
public int compareTo(Student o) {
int num = this.getAge() - o.getAge();
if(num ==0) {
return this.getName().compareTo(o.getName());
}
return this.getAge() - o.getAge();
}
}
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;
}
}
Treemap的理解
1.TreeMap:查看键值时,它们会被排序,排序由Comparabel.Comparator决定
2.TreeMap特点:结果是经过排序。
3.TreeMap可以保证所有的key-value对处于有序状态
4.排序方式:
自然排序,必须实现Comparable接口.
定制排序:不需要Map的key实现Comparable接口。
统计字符串出现的次数
public class HashMapDemo {
public static void main(String[] args) {
String str = "askgfdklsalfglskagkllaskgdflkas";
str = cishu(str);
System.out.println(str);
}
/**
* 字符出现次数统计功能
* @param str
* @return
*/
private static String cishu(String str) {
char[] charArray = str.toCharArray();//字符串转换为字符数组
Map<Character, Integer> map = new TreeMap<>()+;
for (char c : charArray) {//进行遍历
Integer value = map.get(c);
if(value == null) {
map.put(c, 1);
}else {
map.put(c, ++value);
}
}
// StringBuffer跟String
StringBuffer sb = new StringBuffer();
for(Map.Entry<Character, Integer> entry:map.entrySet()) {
sb.append(entry.getKey() + "("+entry.getValue()+")");
}
return sb.toString();
}
}
统计功能
-
1.将字符串转为字符组,将这个字符串中的字符当做map集合中的Key,将出现的次数作为value值
-
2当字符第一次出现的时候,那么用它在集合中进行寻找,返回值必然为null,之后将该字符对应的值改为1
-
3.如果说该字符不是第一次出现,该字符对应值不为null,然后应该+1.