黑马程序员-Map集合

Map总结:tree排序,hsah保证唯一性

Map集合特点:该集合存储键值对,一对一对往里存,而且要保证键的唯一性。

Map和Set很像,Set底层就是使用了Map集合。Map没有迭代器,要靠keySet和entrySet方法返回Set,在用迭代器。

Map

|--Hashtable:底层是哈希表数据结构,不可以存入键和值为Null.此实现是同步的。jdk1.0,效率低。------      
|--Properties:用来存储键值对型的配置文件的信息,可以和IO技术相结合。

为了成功地在哈希表中存储和获取对象,用作键的对象必须实现 hashCode 方法和 equals 方法。

|--HashMap:底层是哈希表数据结构,允许使用null值和null键,该集合是不同步的。jdk1.2,效率高

看到hash:就要想到哈希表,就要想到唯一性,就要想到元素需要覆盖hashcode方法和equals方法

|--TreeMap:底层是二叉树数据结构,线程不同步,允许使用null值和null键。

可以用于给Map集合中的键进行排序(就要想到二叉树,就要想要排序,就要想到两个接口Comparable,Comparator)。

常用方法:

添加:

v   put(k ,v)//注意;键相同时,put方法返回原来的键映射的值

void putAll(Map); 将Map中的所有映射关系存入,不是以集合的形式存入。

--|    Map<String,String> map = new
HashMap<String,String>();

Map<String,Integer> map1 = new HashMap<String,Integer>();

Map<String,String> map2 = new HashMap<String,String>();

map.putAll(map1);//报错,因为map不接受Integer类型

map.putAll(map2);

注:put方法,键相同时,后添加的键覆盖原来的键,并且返回原来的键映射的值

删除 :

void   clear() 从此映射中删除所有映射关系

V(value)  remove(Object ,key)如果存在一个键的映射关系,则将其从此映射中

删除对应键和值,并返回对应的值。不存在返回null

--|map.put("lisi","22");

System.out.println(map.remove("lisi"));//返回22

判断:boolean

containsKey(Object key) 如果此映射包含键的映射关系,则返回true

containsValue(value) 如果此映射值对应一个或多个键,则返回true

is Empty()如果此映射未包含键-值映射关系,则返回 true。

get(key)返回指定键所映射的值。同样可以判断

获取:

get( Object,key)返回指定键所映射的值。

Set  keySet() 返回此映射中所包含的键(全部)

Set<Map.Entry<K,V>>   entrySet() 返回此映射中包含的全部映射关系。

size() 获取此映射中的键-值关系数。//几对

Colection vaules()返回此映射中包含的全部值,与ketSet正好相反。注意返回值。

Map集合的两种取出方式:

Map集合取出的原理:将Map集合转成Set集合,在通过迭代器取出。

1.keyset:返回值类型:Set集合  功能:返回此映射中所包含的键(全部)

思路: 将Map中所有的键存入到Set集合中,因为Set具备迭代器。

所以可以迭代方式取出所有的键,再根据get方法,获取每一个键对应的值。

Set<Integer> keyset =
map.keySet();

Iterator<Integer> it = keyset.iterator();

while (it.hasNext()){

Integer num = it.next();

System.out.println("ker:"+num+"..."+"value:"+map.get(num));

2.entrySet:返回值类型:Set  功能:将Map集合的映射关系存入到Set集合中。

而这个关系的数据类型就是:(Map.Entry<k,v>)

Set<Map.Entry<Integer,String>> entryset = map.entrySet();

Iterator<Map.Entry<Integer,String>> it = entryset.iterator();

while (it.hasNext()){

Map.Entry<Integer,String> ma = it.next();

Integer key = ma.getKey();

String value = ma.getValue();

System.out.println("key:"+key+"   "+"value:"+value);

}

//高级for

for(Map.Entry<String, String> m:entryset){

System.out.println("..."+m);

}

Map.Entry :映射项(键-值对)

其实Entry也是一个接口。它是Map接口中一个内部接口。

Map的子类如hashMap在创建的时候用静态内部类实现了Entry.

为什么要定义在内部:1.Map集合先于它存在,它是Map内部的一部分。

2.直接访问Map,所以定义成内部。

练习1;

每一个学生都有对应的归属地 当作值,学生属性:姓名年龄当作键,

注意;姓名和年龄相同的视为同一个学生。    保证学生的唯一性。

思路:

1.描述学生

2.定义map容器,将学生做为键,归属地做为值,存入。

3.获取map集合的元素。

4.因为不知道定义的对象要放在何种集合中,所以要事先compareble,覆盖hashcode和equals

练习2

需求:对学生的年龄进行升序排序。

因为数据是以键值对形式存在。

所以要使用可以排序的Map集合。TreeMap

练习4:

"dfdfegfeghhg"获取该字符串中的字母出现的次数。

希望打印结果:a(1)c(3).....

思路:通过结果发现,每一个字母都有对应的系数。

说明字母和次数之间都有映射关系

1.将字符转换成数组,因为要对每一个字符进行操作。

2.定义一个Map集合,因为打印的字母有顺序,使用TreeMap集合。

3.便利字符数组。

将每一个字母作为键去查map集合。

如果返回null,将字母和1存入map中。

如果返回不是null,说明字母在map集合已经存在并有对应的次数。

那么就获取该次数并自增,然后将字母和自增后的次数存入。

4.将map集合中的数据变成指定的字符串形式返回。

练习4:

扩展 Map扩展,

--教室1(学生.......)

学校 --教室2(学生.......)

--教室3(学生.......)

时间: 2024-12-21 12:10:11

黑马程序员-Map集合的相关文章

黑马程序员——Map集合概述

------- <a href="http://www.itheima.com" target="blank">android培训</a>.<a href="http://www.itheima.comtarget="blank"> java培训</a>.期待与您交流! --------- 引言: Map  集合, 该集合存储键 值 对,一对一对往里存,而且要保证键的唯一性. 其中基本功能

黑马程序员——Java集合基础知识之Map

Map概念 要同时存储两个元素Key和Value,他们之间有映射关系,每个键不能重复,每个键只能映射到一个值. 当数据之间存在映射关系的时候,考虑使用Map集合. Map常用方法 如果添加的键原来有值,后添加的值会覆盖前面的值,并返回之前的值.put会返回来先添加的值,后添加的值会覆盖原有的值. Map tm =new TreeMap(); tm.put (key, value);//MAP没有add tm.remove (key) ;//去除一个key和对应的value,若不存在key返回nu

黑马程序员_集合

集合1.集合和对象数组的区别: 数组的长度不可变,集合的可变: 数组可以存储基本数据类型和对象,集合只能存储对象. 集合的框架图 集合派系的顶层接口Collection1.Collection集合存储对象的方法: add(E e)将元素存储到集合中 addAll(Collection c)将一个集合添加到另外的集合中2.Collection集合提取对象的方法: 通过迭代器iterator中的方法:hasNext()和next()来取出 Iterator it=new iterator(); wh

黑马程序员_Java集合框架

- - - - - android培训.java培训.期待与您交流! - - - - - - 集合框架:用于存储数据的容器. 特点: 对象封装数据,对象多了也需要存储.集合用于存储对象. 对象的个数确定可以使用数组.如果不确定可以用集合.因为集合是可变长度的. 集合和数组的区别: 数组是固定长度的:集合可变长度的. 数组可以存储基本数据类型,也可以存储引用数据类型:集合只能存储引用数据类型. 数组存储的元素必须是同一个数据类型:集合存储的对象可以是不同数据类型. 数据结构:就是容器中存储数据的方

黑马程序员——Java集合基础知识之Collection

集合基础知识--Collection Java中集合框架由常用的Collection接口和Map接口组成,而Collection接口又有两个子接口,是List接口和Set接口,常用的集合框架由这三个类组成. List接口的功能方法 List的使用最为简单,创建集合,通过add方法添加元素,get方法获取元素,通过迭代器获取元素.List接口存放的数据无序的,添加速度快,但是查询速度慢,因为查询的时候必须遍历,每次都重头开始,效率较低.常用实现类有ArrayList,LinkedList. Lis

黑马程序员---Java集合框架

---------------------- Android开发.java培训.期待与您交流! ---------------------- Java集合框架 集合我们都知道是用来储存对象的容器,那之前的数组不也可以储存对象么,为什么要出现集合呢? 面向对象语言对事物的体现都是以对象的形式,所以为了方便对多个对象的操作,就对对象进行存储,然而集合类中提供很多方便操作对象存储的方法,要比数组更容易操作对象,而且集合的长度是可变的,然而数组长度确实固定不变的,这样不利于对对象的间隔储存.  数组和集

黑马程序员——Java集合工具类和泛型

Collections工具类和泛型 Collections和Collection Collections和Collection是不同的,Collections是工具类,用来操作集合的,而Collection是集合接口.Collections中有一系列的静态方法用来操作集合,但是不能更改集合内容.比如不能set()不能remove()元素,可以替换全部元素或者添加同一个元素. static List<String> list =Arrays .asList("one Two three

黑马程序员——java集合框架(Map和工具类)

1.Map体系下有三个子类: HashMap    底层是哈希表数据结构,可以存入null键和null值,不同步---TreeMap    底层是二叉树数据结构,线程同步,可以用于给map集合中的键进行排序 和Set很像,Set底层是Map  添加元素时,如果出现相同键,那么厚添加的值会覆盖原有键对应的值,并且put方法会返回被覆盖的值 2.map集合的两种取出方式:  (1) keySet():将map中所有的键存入到Set集合,因为set具备迭代器                 可以以迭代

黑马程序员__集合框架总结

------Java培训期待与您交流! ------- 前言: 本文是对Java集合框架做了一个概括性的解说,目的是对Java集合框架体系有个总体认识,如果你想学习具体的接口和类的使用方法,请参看Java API文档. 一.概述 数据结构对程序设计有着深远的影响,在面向过程的C语言中,数据库结构用struct来描述,而在面向对象的编程中,数据结构是用类来描述的,并且包含有对该数据结构操作的方法. 在Java语言中,Java语言的设计者对常用的数据结构和算法做了一些规范(接口)和实现(具体实现接口