------- <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:底层是哈希表数据结构,允许使用null值null键,该集合是不同步的, jdk1.2 效率高。
TreeMap:底层是二叉树数据结构,线程不同步,可以用于给Map集合中的键进行 排序。
Map和Set很像。其实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);
注意:将数组变成集合,不可以使用集合的增删方法,因为数组的长度是固定的。
可以使用contains,get,indexof(),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>、期待与您交流! ----------