黑马程序员_集合3-Map集合派系

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


|---Map集合--映射
   一个键只能映射一个值,保证键的唯一性
  常用方法
   put(Key,Value),返回值为null,存储方法,重复存储返回次数
   isEmpty()
   boolean containsKey(键)判断集合中有没有这个键
   boolean containValue(值)判断集合中有没有这个值
   get(键),通过键,获取值,获取不到值,说明没有这个键,返回null
   putAll(Collection)
|-- Map集合的取出方法:
   1.Map集合中有一个方法,keySet(),将Map中的键,存储到Set集合中
    迭代Set集合,就可以获取到键
    **取出的值是有序的,TreeMap是正向排列的,HashMap是倒序排列的
    根据键,获取值,get()是Map集合中的方法
    
   
   2.通过Map集合中键值的映射关系来获取
     Set<Map.Entry<K,V>> entrySet(),这个方法返回的是键值映射关系对
       entrySet()方法返回的是键值关系,表示这个键值关系的对象是Map.Entry
       然后把这个键值关系存储到Set集合中
   迭代Set集合
   迭代器next()返回的是Map.Entry类型
   调用Map.Entry接口中的方法,getKey() getValue()
|--Map子类的特点
  |--HashMap
   |--底层结构是哈希表
      线程是不安全的
      不允许存储重复键
允许存储null值和null键
  |--TreeMap
     底层数据结构是红黑树
     线程不安全
     不允许存储重复键
     作为键的存储对象,对象必须具备比较性,对象实现Comparable接口
     或者让TreeMap自身具备比较性
  |--Hashtable
     底层数据结构也是Hash表
     线程安全
     不允许存储重复键
     不允许null值和null键
     郁郁而终
  |--Hashtable的子类,
====================================================================================================================================
* 利用Set集合取出Map集合中存储的对象
 */
import java.util.*;
import cn.itcast.generic.Person;
public class HashMapDemo1 {
public static void main(String[] args) {
method_2();
}
//Map集合的键值关系,取出集合中的对象

public static void method_2(){
HashMap<Person, String> hm = new HashMap<Person, String>();
hm.put(new Person("lisi1",21), "北京市");
hm.put(new Person("lisi2",22), "天津市");
hm.put(new Person("lisi2",22), "天津市");
hm.put(new Person("lisi3",23), "叙利亚");
hm.put(new Person("lisi3",23), "叙利亚");
hm.put(new Person("lisi4",24), "美国");
//通过entrySet()方法,获取到键值关系,并存储到Set集合
Set<Map.Entry<Person,String>>  set = hm.entrySet();
//迭代Set集合
Iterator<Map.Entry<Person,String>> it = set.iterator();
while(it.hasNext()){
 Map.Entry<Person, String> me= it.next();
   Person p = me.getKey();
   String s = me.getValue();
   System.out.println(p+"...."+s);

}

}

//Map集合存储自定义对象并取出
public static void method_1(){
HashMap<Person, String> hm = new HashMap<Person, String>();
hm.put(new Person("lisi1",21), "北京市");
hm.put(new Person("lisi2",22), "天津市");
hm.put(new Person("lisi2",22), "天津市");
hm.put(new Person("lisi3",23), "叙利亚");
hm.put(new Person("lisi3",23), "叙利亚");
hm.put(new Person("lisi4",24), "美国");

//通过Map集合中的keySet方法,将键存储到Set集合
Set<Person> set = hm.keySet();
//迭代Set集合
Iterator<Person> it = set.iterator();
while(it.hasNext()){
Person p = it.next();
String address = hm.get(p);
System.out.println(p+"...."+address);
}
}




//Map集合存储对象
public static void method(){
HashMap<String, Integer> hm = new HashMap<String, Integer>();
hm.put("a", 1);
hm.put("b", 2);
hm.put("c", 3);
//使用Map集合中的keySet()方法,将键存储到Set集合
Set<String> set = hm.keySet();
//迭代Set集合
Iterator<String> it = set.iterator();
while(it.hasNext()){
//使用Map集合中的方法,get获取值
String key = it.next();
Integer value = hm.get(key);
System.out.println(key+"......"+value);
}
}
}
====================================================================================================================================
* 实现统计字母出现次数
 */
import java.util.*;
public class TreeMapTest {
public static void main(String[] args) {
getCount("inoYloveyoumy");
}
public static void getCount(String str){
//步骤对字符串进行判空
if(str == null || "".equals(str))
throw new RuntimeException("无效的字符串");
//字符串转成字符数据
char[] ch = str.toCharArray();
//建立Map集合
TreeMap<Character,Integer> tm = new TreeMap<Character, Integer>();
//遍历数组
for (int x = 0; x < ch.length; x++) {
//将数组中的每个字符获取出来当做键,到Map中查找值
Integer i = tm.get(ch[x]);
//对i进行判断
if(i==null){//集合中没有 存储过这个键,存储这个键,值是1
tm.put(ch[x], 1);
}else{//集合中有这个键,将获取到的值++,存回集合
//i++;
tm.put
(ch[x], ++i);
}
}
//数组遍历结束,取出集合中存储的对象
//System.out.println(tm);
Set<Map.Entry<Character, Integer>> set = tm.entrySet();
Iterator<Map.Entry<Character, Integer>> it = set.iterator();
while(it.hasNext()){
Map.Entry<Character, Integer> me = it.next();
Character c = me.getKey();
Integer i = me.getValue();
System.out.print(c+"字母出现了"+i+"次     ");
}
}
}






























































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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值