map集合练习

20 篇文章 2 订阅
package com.hrf.map;

import java.util.Collection;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Set;

public class HashMapTest {

	public static void main(String[] args) {
		/*Map中可以放键值对,也就是每个元素都包含键对象和值对象,
		 * Map比较常见的是hashMap,hashMap对键对象的存取和hashSet一样,采用的是哈希算法
		 * 所以如果使用自定义类作为Map的对象,必须重写equals和hashCode方法,但是很少使用类作为key
		 * Map即无序也不能重复.
		 * */
		Map map = new HashMap();
		map.put("1", "张三1");
		map.put("2", "张三2");
		map.put("5", "张三3");
		map.put("4", "张三4");
		map.put("4", "张三5");//如果键相等,最后来的会覆盖他前面的所以输出的是{1=张三1, 2=张三2, 3=张三3, 4=张三5}
		System.out.println(map);
//		普通循环
		Set set = map.entrySet();
		Object[] array = set.toArray();
		for (int i = 0; i < set.size(); i++) {
			System.out.println(array[i]);
		}
//		加强for循环
		for (Object o : array) {
			System.out.println(o);
		}
//		利用迭代
		Iterator it = set.iterator();
		while(it.hasNext()) {
			System.out.println(it.next());
		}
//		获取key
		Set key = map.keySet();
		System.out.println(key);
//		获取value
		Collection values = map.values();
		System.out.println(values);
//		获取key-value
		Iterator it1 = map.entrySet().iterator();
		while(it1.hasNext()) {
			Map.Entry entry = (Entry) it1.next();
			System.out.println("key = "+ entry.getKey() +"\t"+"value = "+entry.getValue());
		}
//		简单的灵活性低
		
	}

}

package com.hrf.map;

import java.util.HashMap;
import java.util.Map;

public class HashMap2Test {

	public static void main(String[] args) {
//		hashMap,采用自定义类作为key,必须去重,重写equals和hashCode方法,没有重写就返回两个值
//		创建对象
		Person p1 = new Person(1001);
		Person p2 = new Person(1001);
//		自定义类作为key
		Map map = new HashMap();
		map.put(p1, "张三");
		map.put(p2, "张三2");
//		输出
		System.out.println(map);
		
		
	}
	
	static class Person{
		private Integer id;

		public Person(Integer id) {
			super();
			this.id = id;
		}

		public Person() {
			super();
		}

		public Integer getId() {
			return id;
		}

		public void setId(Integer id) {
			this.id = id;
		}

		@Override
		public String toString() {
			return "Person [id=" + id + "]";
		}

		@Override
		public int hashCode() {
			// TODO Auto-generated method stub
			return id.hashCode();
		}

		@Override
		public boolean equals(Object obj) {
			// TODO Auto-generated method stub
			return id.equals(((Person)obj).id);
		}
		
		
	}

}

package com.hrf.map;

import java.util.Map;
import java.util.TreeMap;

public class TreeMapTest {

	public static void main(String[] args) {
		// treeMap可以对Map中的key进行排序,
//		如果map中的key采用的是自定义类那么需要实现Comparable和Comparator接口完成排序.
//		使用Comparator保证类特别干净
//		treeSet底层是treeMap
//		创建对象
		Person p1 = new Person(1001);
		Person p2 = new Person(1002);
		Person p3 = new Person(1003);
//		自定义类作为key,jdk8以上的标准,保证类是干净的
		Map map = new TreeMap((x,y)->((Person)x).id-((Person)y).id);
		
		map.put(p1, "张三");
		map.put(p2, "张三2");
		map.put(p3, "张三3");
//		输出
		System.out.println(map);
		

	}
	static class Person{
		private Integer id;

		public Person(Integer id) {
			super();
			this.id = id;
		}

		public Person() {
			super();
		}

		public Integer getId() {
			return id;
		}

		public void setId(Integer id) {
			this.id = id;
		}

		@Override
		public String toString() {
			return "Person [id=" + id + "]";
		}
		@Override
		public int hashCode() {
			// TODO Auto-generated method stub
			return id.hashCode();
		}

		@Override
		public boolean equals(Object obj) {
			// TODO Auto-generated method stub
			return id.equals(((Person)obj).id);
		}
		
	}

}

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值