java EE 2019 11 15关于map集合

Map集合

//特点 存储的键值对(键映射到值的对象 一个映射不能包含重复的键
//每个键最多只能映射一个值)
//Map和Collection的区别
//Collection 只能存单一的元素 单列集合
//Map 双列集合
//基本功能
//添加功能
// V put(K key,V value):添加键和值元素
//删除功能
// V remove (Object Key) 删除指定的键
// Void clear():暴力删除
//判断 功能:
//Boolean ContainsKey(Object key)判断是否包含指定的键
//Boolean ContainsValue(Object value)判断是否包含指定的值
//Boolean isEmpty();判断集合是否为空
//int size() 获取键值对个数
//获取功能
//V get(Object key);根据键获取值
//SetKeySet() 获取所有键的集合
//Collection values获取所有的值的集合
//Set<Map.Entry<K,V>>entrySet();获取键值对象

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





public class MapCode {

	public static void main(String[] args) {
		//创建map集合 
		Map<String,String> map=new HashMap<String,String>();
		//添加元素
		//键如果在Map出现第一次返回null
		//键如果重复了 后面值会覆盖前面的 返回时以前的值 赵敏
		map.put(" 梁西华","大华");
		map.put("杰瑞","汤姆");
		map.put("米奇","米妮");
		map.put("蓝皮鼠","大脸猫");
		map.put("张无忌","赵敏");
		map.put("张无忌","周芷若");//会把赵敏覆盖
		//输出没有固定的顺序
		//删除返回对应键值 而且 键值和键都会删除
		System.out.println("删除后:"+map.remove("杰瑞"));
		//删除后:汤姆
		System.out.println(map.containsKey("米奇"));
		System.out.println(map.containsValue("大脸猫"));
		System.out.println(map.get("米奇"));
		//米妮
		System.out.println(map.get("周琦"));
		//null
		
		System.out.println(map);
		//获取所有的键放入Set  set中
		Set<String> set=map.keySet();
		//增强for  遍历set中的键
		for(String key:set) {
			//拿键获取值
			String value=map.get(key);
		    System.out.println(key+"----"+value);
		    //达到一个遍历的结果
		}
		
		//另一种遍历方式  Set<Map.Entry<K,V>>entrySet();获取键值对象
		//不太用  没上面好用  了解就行
      //Collection<V> values() :获取所有的值的集合
		Collection<String> val=map.values();
		for(String va:val) {
			  System.out.println(va);
		}
		
		}
	}

//}

HashMap集合
底层基于哈希表 不保证顺序恒久不变

package Map;

import java.util.HashMap;
import java.util.Set;

public class HashMapDemo {

	public static void main(String[] args) {
		//创建一个HashMap集合对象
		HashMap<Integer,String>hm=new HashMap<Integer,String>();
		//添加元素
		hm.put(4,"美国");
		hm.put(6,"日本");
		hm.put(9,"德国");
		hm.put(4,"英国");
		hm.put(6,"法国");
		//遍历
		Set<Integer> set=hm.keySet();
		for(Integer key:set) {
			String value=hm.get(key);
			System.out.println(key+"   "+value);
		}
	}

}
//4   英国  覆盖了美国
//6   法国
//9   德国  顺序也不保持不变

Hashmap 与自定义类的两种情况
情况一

package Map;

import java.util.HashMap;
import java.util.Set;

public class MapStudent {
public static void main(String[] args) {
	//创建HashMap集合对象
	HashMap<String,Student> map=new HashMap<String,Student>();
	//创建几个学生对象
	Student s1=new Student("柯南",5);
	Student s2=new Student("新一",18);
	Student s3=new Student("小兰",19);
	Student s4=new Student("基德",20);
	Student s5=new Student("小五郎",40);
	//添加元素
	map.put("221",s1);
	map.put("241",s2);
	map.put("2231",s3);
	map.put("2213",s4);
	map.put("2211",s5);
	//遍历
	Set<String> set=map.keySet();
	//增强for
	for(String key :set) {
		Student value=map.get(key);
		System.out.println(key+"-----"+value.getName()+"-----"+value.getAge());
	}
}
}

情况二

import java.util.HashMap;
import java.util.Set;

public class MapStudent1 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub

		//创建HashMap集合对象
		HashMap<Student,String> map=new HashMap<Student,String>();
		//创建几个学生对象
		Student s1=new Student("柯南",5);
		Student s2=new Student("新一",18);
		Student s3=new Student("小兰",19);
		Student s4=new Student("基德",20);
		Student s5=new Student("新一",18);
		//添加元素
		map.put(s1,"1");
		map.put(s2,"2");
		map.put(s3,"3");
		map.put(s4,"4");
		map.put(s5,"5");
		//遍历
		Set<Student> set=map.keySet();
		//增强for
		for(Student key :set) {
			String value=map.get(key);
			//注意 要进行重写hashCode和equals
			
			
			//小兰-----19-----3
			//新一-----18-----5
			//柯南-----5-----1
			//新一-----18-----2
			//基德-----20-----4
			//没有覆盖掉
			System.out.println(key.getName()+"-----"+key.getAge()+"-----"+value);
		}
	}
	}
//重写后
//基德-----20-----4
//新一-----18-----5
//小兰-----19-----3
//柯南-----5-----

学生类就不给出了

LinkedHashMap :
哈希表:元素唯一
链表:有序性

TreeMap:
可以自己构造方法排序

    
import java.util.Comparator;
import java.util.Set;
import java.util.TreeMap;

public class TreeMapdemo {

	public static void main(String[] args) {
		TreeMap<Student, String> tm = new TreeMap<Student, String>(new Comparator<Student>() {

			@Override
			public int compare(Student s1, Student s2) {

                   //比较年龄
				int num=s1.getAge()-s2.getAge();
				//年龄一样就比较名字
				int num2=(num==0)?
				
				(s1.getName().compareTo(s2.getName())):num;
				return num2;
			}

});
		Student s1 = new Student("鸣人", 28) ;
		Student s2 = new Student("樱木花道", 35) ;
		Student s3 = new Student("藤原拓海", 35) ;
		Student s4 = new Student("山治", 26) ;
		Student s5 = new Student("比鲁斯", 38) ;
		Student s6 = new Student("柯南", 35) ;
		//添加元素
		tm.put(s1, "火影") ;
		tm.put(s2, "篮球") ;
		tm.put(s3, "ae86") ;
		tm.put(s4, "海贼") ;
		tm.put(s5, "七龙珠") ;
		tm.put(s6, "侦探") ;
		//遍历
		Set<Student> set=tm.keySet();
		for(Student key:set) {
			String value=tm.get(key);
			System.out.println(key.getName()+"---"+key.getAge()+"---"+value);
		}
}
}
//按年龄从小到大排序
山治---26---海贼
鸣人---28---火影
柯南---35---侦探
樱木花道---35---篮球
藤原拓海---35---ae86
比鲁斯---38---七龙珠

Arraylist中嵌套hashmap

import java.util.ArrayList;
import java.util.HashMap;
import java.util.Set;

public class ArrayListCludeHashMapTest {

	public static void main(String[] args) {
		// TODO Auto-generated method stub

		//创建一个大集合
				ArrayList<HashMap<String, String>>   array = 
							new ArrayList<HashMap<String,String>>() ;
				
				//第一个子集合
				HashMap<String, String> hm1 = new HashMap<String, String>() ;
				hm1.put("中国 ", "亚洲") ;
				hm1.put("美国 ", "北美") ;
				
				//添加到大集合中
				array.add(hm1) ;
				
				HashMap<String, String> hm2 = new HashMap<String, String>() ;
				hm2.put("智利 ", "南美洲") ;
				hm2.put("赞比亚", "非洲;") ;
				array.add(hm2) ;
				
				HashMap<String, String> hm3 = new HashMap<String, String>() ;
				hm3.put("富士山", "日本") ;
				hm3.put("西安", "陕西") ;
				array.add(hm3) ;
				
				//遍历集合
				for(HashMap<String, String> hm :array) {
					
					//通过hm对象 获取所有的键的集合
					Set<String> set = hm.keySet() ;
					//增强for
					for(String key: set) {
						//通过键或者值
						String value = hm.get(key) ;
						System.out.println(key+"---"+value);
					}
				}
			}
		}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值