集合框架Map

集合框架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.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值