黑马程序员—16—java基础:有关map结合的学习笔记和心得体会

 ------- <a href="http://www.itheima.com" target="blank">android培训</a><a href="http://www.itheima.com" target="blank">java培训</a>、期待与您交流! ----------

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

2.  2.1 添加:

put(k  key, v  value)

putAll(Map<? extends  k,?  extends v> m)

2.2 删除

clear()

remove(Object key)

2.3 判断

containsValue(Object value)

containsKey(Object key)

isEmpty()

2.4 获取

get(Object key)

size()

values()

例子:

import java.util.*

class  MapDemo

{

public static void main(String[] args) 

{

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

map.put("01","zhangsan1");

map.put("02","zhangsan2");

map.put("03","zhangsan3");

System.out.println("containsKey"+map.containsKey("022"));

System.out.println("remove"+map.remove("02"));

System.out.println("get"+map.get("03"));

map.put("04"null);

System.out.println("get"+map.get("04"));

//可以通过get方法的返回值来判断一个键是否存在。通过返回null来判断。

Collection<String> coll = map.values();//获取map集合中所有的值。

System.out.println(coll);

System.out.println(map);

}

}

entrySet()

keySet()

3.  map

Hashtable:底层是哈希表数据结构,不可以存入null键和null值,该集合时线程 同步的,jdk1.0,效率底。

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

TreeMap:底层是二叉树数据结构,线程不同步,可以用于给Map集合中的键进行 排序。

  MapSet很像。其实Set底层就是使用了Map集合。

4.  map的结合两种取出方式:

set<k> keySet:map中所有的键存入到set集合。因为set具备迭代器,所有可以迭代

方式取出所有的键,在根据get方法,获取每一个键对应的值。

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

例子:

import java.util.*

class  MapDemo

{

public static void main(String[] args) 

{

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

map.put("01","zhangsan1");

map.put("02","zhangsan2");

map.put("03","zhangsan3");

map.put("04""zhangsan4");

Set<String> keySet = map.keySet();//先获取map集合的所有键的Set集合,keySet()

Iterator<String> it = keySet.iterator();

while(it.hasNext())

{

String key = it.next();

String value = map.get(key);//有了键可以通过map集合的get方法获取其对应的值。

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

}

}

}

5.  set<Map.Entry<k,v>> entrySet:map集合中的映射关系存入到了set集合中,而这个

关系的数据类型局势:Map.Entry

Map.Entry 其实Entry也是一个接口,它是Map接口的一个内部接口

例子

import java.util.*

class  MapDemo

{

public static void main(String[] args) 

{

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

map.put("01","zhangsan1");

map.put("02","zhangsan2");

map.put("03","zhangsan3");

map.put("04""zhangsan4");

Set<Map.Entry<String,String>> entrySet = map.entrySet();//map集合中的映射                                //关系取出,存入到Set集合中。

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

while(it.hasNext())

{

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

String key =me.getKey ();

String value = me.get(key);

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

}

}

}

6.  什么时候使用map

当数据之间存在这映射关系时,就要map集合。

7.  把数组变成List集合有什么好处?

可以使用集合的思想和方法来操作数组中的元素。

例子

List<String> list = Arrays.asList(arr);//把数组转变为集合

sop(contanins:+list.contains(cc));//用集合的方法判断数组中是否存在cc元素。

sop(list);

注意:将数组变成集合,不可以使用集合的增删方法,因为数组的长度是固定的。

可以使用containsgetindexof(),subList()等方法。

8.  如果数组中的元素都是对象,那么变成集合时,数组中的元素就直接转变成集合的元素,  如果数组中的元素都是基本数据类型,那么会将该数组作为集合中的元素存在。

9. 集合变数组:

指定类型的数组到底要定义多长呢?

当指定类型的数组长度小于了集合的size,那么该方法内部会创建一个新的数组,长度

为集合的size,当指定类型的数组长度大于了集合的size,就不会新创建了数组,而是 使用传递进来的数组,所以创建一个刚刚好的数组最优。

为什么要将集合变数组?

为了限定对元素的操作。不需要增删了。

10. 高级for循环:把迭代器取代了,简化代码

格式:

for(数据类型 变量名:被遍历的集合(Collection)或者数组)

{

}

例子:

import java.util.*;

class ForEachDemo

{

public static void main(String[] args) 

{

ArrayList<String> a1 = new ArrayList<String>();

a1.add(abc1);

a1.add(abc2);

a1.add(abc3);

for(String s : a1)

{

System.out.println(s);

}

}

}

11.  对集合进行遍历:

高级循环只能获取集合元素,但是不能对集合进行操作。

迭代器除了遍历,还可以进行remove集合中元素的动作。

如果是用ListIterator,还可以在遍历过程中对集合进行增删改查动作。

传统for和高级for有什么区别呢?

高级for有一个局限性,必须有被遍历的目标。

建议在遍历数组的时候,还是用传统for,因为传统for可以定义角标。

12.  jdk1.5后新特性:

可变参数:

其实就是上一种数组参数的简写形式,不用每一次都手动的建立数组对象,只要将

要操作的元素作为参数传递即可,隐式将这些参数封装成了数组。

例子:

class ForEachDemo

{

public static void main(String[] args) 

{

shoe(1,2,5,4,8,8);

}

public static void show(int ... arr)//int后面三个点可变参数

{

System.out.println(arr.length);

}

}

在使用时:可变参数一定要定义在参数列表的最后面。

13. 静态导入

当类名重名时,需要指定具体的包名,当方法重名时,指定具备所属对象或者类

import static java.util.Arrays.*;//导入的是Arrays这个类中的所有静态成员,当程序

中用到Arrays工具类中的方法时,不需要在写Arrays+方法  可以直接写方法

如:import static java.lang.System.*;导入了System类中所有静态成员,

输出语句可以直接写:out.println()

14.  学习心得体会

掌握map的增删改查,了解map的特殊之处,

了解什么时候用map

当数据之间存在这映射关系时,就要map集合。

学会用增强for循环

 

 ------- <a href="http://www.itheima.com" target="blank">android培训</a><a href="http://www.itheima.com" target="blank">java培训</a>、期待与您交流! ----------

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值