双列集合Map-------HashMap和TreeMap

Map是双列集合的顶层接口,所有子接口的基础方法都在这个接口里面进行了定义,顾名思义,Map相当于对一类地图式的数据进行存储,我们使用地图的时候,地图上的点和真实世界的点进行了一一对应,在Map中,我们利用键值对来对数据进行存储。 

Map

Map的特点 

Map是双列结合的顶层接口,并不属于Collection体系,它与Collection体系共同组合了集合体系

Map中的数据都是以键值对的形式存储,一个键值(key)对应一个值(value)

Map中存储的键值对中键是不可以重复的,保证了数据的唯一性,但是不同的键对应的值是可以相同的

Map的常用方法

在代码种中进行介绍,都在注释里了:

public static void main(String[] args) {
		
		//因为Map是一个接口,所以利用多态来引用一个实现子类来进行操作,这里用泛型来规定这里面的数据类型
		Map<String,Integer> m = new HashMap();
		
		//put方法,来对Map中进行数据的存入
		m.put("路飞", 13);
		m.put("索隆", 14);
		m.put("山治", 14);
		m.put("乔巴", 12);
		System.out.println(m);
		
		Map<String,Integer> mm = new HashMap<>();
		mm.put("娜美", 15);
		mm.put("罗宾", 16);
		System.out.println(mm);
		
		//putAll方法,将另一个map添加到这个map中
		m.putAll(mm);
		System.out.println(m);
		
		//isEmpty方法,查看这个集合是否为空
		System.out.println(m.isEmpty());
		
		//size方法,查看元素个数
		System.out.println(m.size());
		
		//clear方法,清空Map集合
		mm.clear();
		System.out.println(mm);
		
		//containsKey判断map中是否有这个key值
		System.out.println(m.containsKey("娜美"));
		
		//containsValue判断map中是否有这个value值
		System.out.println(m.containsValue(14));
		
		//keySet方法,将key值装入一个set集合
		Set<String> keySet = m.keySet();
		System.out.println(keySet);
		
		//entrySet将map中数据以键值对的形式返回到一个set集合中
		//Set集合中有一个类变量Entry,里面也是一个双列集合
		Set<Entry<String, Integer>> entrySet = m.entrySet();
		System.out.println(entrySet);
	}

输出结果

{山治=14, 乔巴=12, 索隆=14, 路飞=13}
{罗宾=16, 娜美=15}
{山治=14, 罗宾=16, 乔巴=12, 娜美=15, 索隆=14, 路飞=13}
false
6
{}
true
true
[山治, 罗宾, 乔巴, 娜美, 索隆, 路飞]
[山治=14, 罗宾=16, 乔巴=12, 娜美=15, 索隆=14, 路飞=13]

HashMap

hashiMap是map集合中最常用的子类,上述方法的演示也是利用hashMap集合进行演示的,底层是一个哈希表,利用hash表对键值对进行不唯一存储,非线程安全,且允许有键值对存在

常用方法已经在上述检验过,这里我们对hashMap的遍历进行演示

利用keySet()方法转化为set集合进行遍历

                Set<String> keySet = m.keySet();
		Iterator<String> iterator = keySet.iterator();
		while(iterator.hasNext()) {
			String next = iterator.next();
			Person person = m.get(next);
			System.out.print(next+"...."+person);
		}

利用entrySet()方法转化为Map.Entry<String, Person>对象调用getKey()方法和getValue()方法进行遍历

                private static void method2(Map<String, Person> m) {
		Set<Map.Entry<String, Person>> entrySet = m.entrySet();
		for(Map.Entry<String, Person> mm:entrySet) {
			System.out.print(mm.getKey()+"...."+mm.getValue());
		}
	}

 利用上一种方法获得对象再用迭代器进行遍历

                private static void method3(Map<String, Person> m) {
		Set<Entry<String, Person>> entrySet = m.entrySet();
		Iterator<Entry<String, Person>> iterator = entrySet.iterator();
		while(iterator.hasNext()) {
			Entry<String, Person> next = iterator.next();
			System.out.print(next.getKey()+"...."+next.getValue());
		}
	}

 


TreeMap

TreeMap没有什么特别的方法,不过里面也是有Tree的特点,利用红黑树进行有序存储,这里同样也是利用重写compareTo方法来进行自定义排序


 LinkedHashSet和LinkedHashMap

两个子类有着相同的特点是存取顺序都一样,他们的底层是利用哈希表和链表进行去重有序哈希存储

存储过程为:当进行元素存储的时候,先进行哈希值的判断,如果不一致这时候直接进行存储,每进行一次存储,都是由链表来进行记录地址位置,然后如果哈希值不一样,再利用equals方法进行比较,如果相同那么直接放弃存取,如果不相同,通过散列函数和冲突函数进行计算这个数据的位置,得到位置后,也是用链表进行记录地址。当进行取元素的时候,直接利用链表来进行取出元素。

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值