集合之Map集合。
集合是一个容器。和比较来看集合的特点。数组有什么特点? 1.有顺序 2.定长 3.类型单一
集合特点: 1.有顺序也可以没顺序 2.集合长度可以随着元素的增加而增加 3.集合中可以装入任何Object
java中的集合类都在java.util包下,java中的集合元素全是Object类型的。
集合体系图
Collection——List
List——1,LinkedList
2,ArrayList
3,Vector——Stack
Collection——Set
Set——1,HashSet——LinkedHashSet
2,TreeSet
Map——1,HashMap
——2,TreeMap
Map集合与Collection集合的区别
1.Map是双列集合 Collection是单列集合
2.Map集合存储是使用put方法——————Collection存储使用的是add方法.
3.Map集合不能直接使用迭代器遍历.
Map——1,HashMap
2,TreeMap
Map为双列集合,它是采用key-value映射方式存储的。
|-----HashMap 底层使用hash表实现,它允许null值,null键,线程不安全。
HashMap使用元素的hashCode与equals方法来保证key的唯一。
|------LinkedHashMap
它保证了装入时的key的顺序与取出时key的顺序一样。
|-----Hashtable 它与HashMap的区别,除了不能null值,null键,线程安全。其它一样。
|------Properties
它是对配置文件进行映射的。
在早期开发中,经常的使用这样原的文件进行配置。
|-----TreeMap 底层实现二叉树,它线程不安全。
它使用 自然顺序与比较器保证 key的唯一.
它的key值不能重复。
Map集合的遍历操作
1.使用keySet
1.通过Map的keySet方法得到的是key的Set视图.
2.通过Iterator对Set集合进行迭代,将Map中的所有的key得到了
3.通过Map的get方法,根据key得到对应的value.
2.使用entrySet
1.通过Map的entrySet方法得到的是key-value(其实就是Entry类型)映射的Set视图
2.通过Iterator得到Set集合中的所有的Entry对象.
3.通过Entry对象的getKey getValue方法得到Map集合中的所有的key与value.
/*
Map的方法
*/
import java.util.*;
class Demo1
{
public static void main(String[] args)
{
method5();
}
//Map 中的put方法
public static void method1(){
Map<String,String> map=new HashMap<String,String>(); //创建一个Map集合
//向信中添加元素
System.out.println(map.put("小三","人"));
System.out.println(map.put("豆豆","南极企鹅"));
System.out.println(map.put("豆豆","北极企鹅"));
System.out.println(map); //打印Map对象
}
//clear size
public static void method2(){
Map<String,String> map=new HashMap<String,String>(); //创建一个Map集合
//向信中添加元素
System.out.println(map.put("小三","人"));
System.out.println(map.put("豆豆","南极企鹅"));
System.out.println(map.size());
map.clear();
System.out.println(map.size());
}
//containsKey containsValue
public static void method3(){
Map<String,String> map=new HashMap<String,String>(); //创建一个Map集合
//向信中添加元素
System.out.println(map.put("小三","人"));
System.out.println(map.put("豆豆","南极企鹅"));
System.out.println(map.containsKey("小三"));
System.out.println(map.containsValue("男人"));
}
//get
public static void method4(){
Map<String,String> map=new HashMap<String,String>(); //创建一个Map集合
//向信中添加元素
System.out.println(map.put("小三","人"));
System.out.println(map.put("小二","人"));
System.out.println(map.put("豆豆","南极企鹅"));
//根据key获得value
String value=map.get("豆豆1");
System.out.println(value);
}
//remove
public static void method5(){
Map<String,String> map=new HashMap<String,String>(); //创建一个Map集合
//向信中添加元素
System.out.println(map.put("小三","人"));
System.out.println(map.put("小二","人"));
System.out.println(map.put("豆豆","南极企鹅"));
System.out.println(map.remove("小二二"));
System.out.println(map);
}
}
/*
举例——向Map集合中存储10对元素
要求:key是在0-100内随机 int ran.nextInt(100)
value是在a-z之间随机 String String.valueOf((char)(ran.nextInt(26)+'a'));
提供两种遍历方式,keySet和entrySet。有用到泛型。
*/
import java.util.*;
class Demo2
{
public static void main(String[] args)
{
method2();
}
//使用Map中的keySet进行遍历
public static void method1(){
//将集合中添加元素
Map<Integer,String> map=new HashMap<Integer,String>();
Random ran=new Random();
while(true){
int key=ran.nextInt(100); //随机得到100以内的数
String value=String.valueOf((char)(ran.nextInt(26)+'a'));//随机得到a-z字符串
map.put(key,value);
if(map.size()==10){
break;
}
}
System.out.println(map);
//使用keySet遍历集合
//1.得到Map集合中的所有的key的Set视图
Set<Integer> set=map.keySet(); //set中存储的就是map集合中的所的key值
//2.对set集合进行迭代,将map中的所有的key得到
for(Iterator<Integer> it=set.iterator();it.hasNext();){
int key=it.next();
//3.根据key得到value 使用的是Map中的get方法
String value=map.get(key);
System.out.println(key+" "+value);
}
}
//使用entrySet方法遍历Map集合
public static void method2(){
//向Map集合中添加元素 key--Integer value--String
Map<Integer,String> map=new HashMap<Integer,String>();
Random ran=new Random();
while(true){
int key=ran.nextInt(100); //随机得到100以内的数
String value=String.valueOf((char)(ran.nextInt(26)+'a')); //随机得到a-z字符串
map.put(key,value);
if(map.size()==10){
break;
}
}
//使用entrySet遍历Map集合
Set<Map.Entry<Integer,String>> set=map.entrySet(); //得到一个set集合,这个集合中装入的元素是Entry类型的,它里面封装的是一对Map的元素
//使用迭代器将set集合中的元素迭代出来
for(Iterator<Map.Entry<Integer,String>> it=set.iterator();it.hasNext();){
Map.Entry<Integer,String> obj=it.next();
int key=obj.getKey();
String value=obj.getValue();
System.out.println(key+" "+value);
}
}
}
今后开发中,集合分析过程:
1.判断是存储单列还是双列,这样就可以选择Collection还是Map
2.1 Collection——————如果没有要求,先List,List下首选ArrayList
——————如果要求不重复 Set,Set下首先HashSet.
——————对于LinkedList,TreeSet,它们的使用要根据上体的特性。
2.2 Map——————首选HashMap,如果要求进行排序,TreeMap.
集合是一个容器。和比较来看集合的特点。数组有什么特点? 1.有顺序 2.定长 3.类型单一
集合特点: 1.有顺序也可以没顺序 2.集合长度可以随着元素的增加而增加 3.集合中可以装入任何Object
java中的集合类都在java.util包下,java中的集合元素全是Object类型的。
集合体系图
Collection——List
List——1,LinkedList
2,ArrayList
3,Vector——Stack
Collection——Set
Set——1,HashSet——LinkedHashSet
2,TreeSet
Map——1,HashMap
——2,TreeMap
Map集合与Collection集合的区别
1.Map是双列集合 Collection是单列集合
2.Map集合存储是使用put方法——————Collection存储使用的是add方法.
3.Map集合不能直接使用迭代器遍历.
Map——1,HashMap
2,TreeMap
Map为双列集合,它是采用key-value映射方式存储的。
|-----HashMap 底层使用hash表实现,它允许null值,null键,线程不安全。
HashMap使用元素的hashCode与equals方法来保证key的唯一。
|------LinkedHashMap
它保证了装入时的key的顺序与取出时key的顺序一样。
|-----Hashtable 它与HashMap的区别,除了不能null值,null键,线程安全。其它一样。
|------Properties
它是对配置文件进行映射的。
在早期开发中,经常的使用这样原的文件进行配置。
|-----TreeMap 底层实现二叉树,它线程不安全。
它使用 自然顺序与比较器保证 key的唯一.
它的key值不能重复。
Map集合的遍历操作
1.使用keySet
1.通过Map的keySet方法得到的是key的Set视图.
2.通过Iterator对Set集合进行迭代,将Map中的所有的key得到了
3.通过Map的get方法,根据key得到对应的value.
2.使用entrySet
1.通过Map的entrySet方法得到的是key-value(其实就是Entry类型)映射的Set视图
2.通过Iterator得到Set集合中的所有的Entry对象.
3.通过Entry对象的getKey getValue方法得到Map集合中的所有的key与value.
/*
Map的方法
*/
import java.util.*;
class Demo1
{
public static void main(String[] args)
{
method5();
}
//Map 中的put方法
public static void method1(){
Map<String,String> map=new HashMap<String,String>(); //创建一个Map集合
//向信中添加元素
System.out.println(map.put("小三","人"));
System.out.println(map.put("豆豆","南极企鹅"));
System.out.println(map.put("豆豆","北极企鹅"));
System.out.println(map); //打印Map对象
}
//clear size
public static void method2(){
Map<String,String> map=new HashMap<String,String>(); //创建一个Map集合
//向信中添加元素
System.out.println(map.put("小三","人"));
System.out.println(map.put("豆豆","南极企鹅"));
System.out.println(map.size());
map.clear();
System.out.println(map.size());
}
//containsKey containsValue
public static void method3(){
Map<String,String> map=new HashMap<String,String>(); //创建一个Map集合
//向信中添加元素
System.out.println(map.put("小三","人"));
System.out.println(map.put("豆豆","南极企鹅"));
System.out.println(map.containsKey("小三"));
System.out.println(map.containsValue("男人"));
}
//get
public static void method4(){
Map<String,String> map=new HashMap<String,String>(); //创建一个Map集合
//向信中添加元素
System.out.println(map.put("小三","人"));
System.out.println(map.put("小二","人"));
System.out.println(map.put("豆豆","南极企鹅"));
//根据key获得value
String value=map.get("豆豆1");
System.out.println(value);
}
//remove
public static void method5(){
Map<String,String> map=new HashMap<String,String>(); //创建一个Map集合
//向信中添加元素
System.out.println(map.put("小三","人"));
System.out.println(map.put("小二","人"));
System.out.println(map.put("豆豆","南极企鹅"));
System.out.println(map.remove("小二二"));
System.out.println(map);
}
}
/*
举例——向Map集合中存储10对元素
要求:key是在0-100内随机 int ran.nextInt(100)
value是在a-z之间随机 String String.valueOf((char)(ran.nextInt(26)+'a'));
提供两种遍历方式,keySet和entrySet。有用到泛型。
*/
import java.util.*;
class Demo2
{
public static void main(String[] args)
{
method2();
}
//使用Map中的keySet进行遍历
public static void method1(){
//将集合中添加元素
Map<Integer,String> map=new HashMap<Integer,String>();
Random ran=new Random();
while(true){
int key=ran.nextInt(100); //随机得到100以内的数
String value=String.valueOf((char)(ran.nextInt(26)+'a'));//随机得到a-z字符串
map.put(key,value);
if(map.size()==10){
break;
}
}
System.out.println(map);
//使用keySet遍历集合
//1.得到Map集合中的所有的key的Set视图
Set<Integer> set=map.keySet(); //set中存储的就是map集合中的所的key值
//2.对set集合进行迭代,将map中的所有的key得到
for(Iterator<Integer> it=set.iterator();it.hasNext();){
int key=it.next();
//3.根据key得到value 使用的是Map中的get方法
String value=map.get(key);
System.out.println(key+" "+value);
}
}
//使用entrySet方法遍历Map集合
public static void method2(){
//向Map集合中添加元素 key--Integer value--String
Map<Integer,String> map=new HashMap<Integer,String>();
Random ran=new Random();
while(true){
int key=ran.nextInt(100); //随机得到100以内的数
String value=String.valueOf((char)(ran.nextInt(26)+'a')); //随机得到a-z字符串
map.put(key,value);
if(map.size()==10){
break;
}
}
//使用entrySet遍历Map集合
Set<Map.Entry<Integer,String>> set=map.entrySet(); //得到一个set集合,这个集合中装入的元素是Entry类型的,它里面封装的是一对Map的元素
//使用迭代器将set集合中的元素迭代出来
for(Iterator<Map.Entry<Integer,String>> it=set.iterator();it.hasNext();){
Map.Entry<Integer,String> obj=it.next();
int key=obj.getKey();
String value=obj.getValue();
System.out.println(key+" "+value);
}
}
}
今后开发中,集合分析过程:
1.判断是存储单列还是双列,这样就可以选择Collection还是Map
2.1 Collection——————如果没有要求,先List,List下首选ArrayList
——————如果要求不重复 Set,Set下首先HashSet.
——————对于LinkedList,TreeSet,它们的使用要根据上体的特性。
2.2 Map——————首选HashMap,如果要求进行排序,TreeMap.