Map集合

来源:互联网 发布:windows to go移动硬盘 编辑:程序博客网 时间:2024/05/17 19:14
1.
Map集合
需求:存储学生对象,每一个学生一个学号和姓名,通过学号去找学生,按照之前集合的操作,将学号和姓名作为当前类的成员封装起来,
  然后遍历集合,将学号和学生姓名,没有必要这样去实现,因为如果很直接能拿到学生姓名,在遍历没意义!
  java就提供了另一个集合Map集合<K,V>,是以一种键值对而存在
          学号1 姓名1
          学号2 姓名2
          学号3 姓名3
          学号2 姓名4(错误了)
          学号4 姓名4
      
      对于Map集合,针对的是键有效,跟值没有关系,键是唯一的,值是可以重复的!

  1.2

面试题:

    Map集合和Collection区别?
    对于Map集合,是一种键值对的一种映射关系,键是唯一的,值是可以重复的!(双列集合) 简单记:夫妻对
    hashMap,treeMap子实现类
    Collection:集合框架的顶层的根接口,有两个子接口:List(元素可以重复),set(元素不可以重复的),单列集合 简单记:光棍(11.11)
                                                                      ArrayList,Vector,LinkedListtree                                   Set,hashSet

1.3

  Map集合的功能:

  添加功能:
  V put(K key,V value):添加元素(键和值的具体元素)
  其他用法:如果键是第一次存储的时候,返回值null(小细节)
  如果键已经存在,再次存储的时候将第一次的值返回,并且后面的值覆盖掉前面的值
   删除功能:
    void clear()从此映射中移除所有映射关系(移出所有的键和值)
    V remove(Object key):删除键,返回值
   判断功能:
    boolean containsKey(Object key):判断当前Map集合中是否存在key:键
    boolean containsValue(Object value):判断当前Map姐中是否存在value:值
   获取功能:
    Set<Map.Entry<K,V>> entrySet()???
    V get(Object key)返回指定键所映射的值
  Set<K> keySet():获取所有的键的集合
  Collection<V> values():获取所有的值的集合 
 
  长度功能
  int size()

转换:
  1)获取所有的键的集合keySet()(这种比较常用)
  2)遍历键的集合,让键找值
  3)输出就可以了
 
 
public class HashMapDemo3 {public static void main(String[] args) {//创建Map集合对象Map<String,String> map = new HashMap<String,String>();//给集合中添加元素map.put("杨过", "小龙女") ;map.put("郭靖", "黄蓉") ;map.put("杨康", "穆念慈") ;map.put("陈玄风", "梅超风") ;//获取所有的键的集合Set<String> keySet = map.keySet() ;//遍历所有的键的集合,增强forfor(String key : keySet){String value = map.get(key) ;System.out.println(key+"="+value);}}}


2.
Collections:对集合操作的工具类--------------->Arrays:对数字进行操作的工具类
 
  Collections和Collection的区别?
   Collection:集合:顶层次的一个根接口,有两个子接口:List,Set
   Collections:对集合操作的工具类,具体的类:它针对集合进行操作!
  
  public static <T> void sort(List<T> list):默认自然排序:将集合中的元素升序排序
  public static <T> int binarySearch(List> list,T key):二分查找搜索法:key:查找的元素
  public static void reverse(List list):反转功能
  public static void shuffle(List<?> list):随机置换,打乱顺序
3.
import java.util.ArrayList;import java.util.Collections;import java.util.Comparator;import java.util.List;/** * 创建一个集合对象,用来存储自定义对象! * */public class CollectionsTest {public static void main(String[] args) {//创建集合对象//list集合元素是可以重复的!List<Student> list = new ArrayList<Student>();//创建5个学生对象Student s1 = new Student("高圆圆", 27) ;Student s2 = new Student("邓超", 25) ;Student s3 = new Student("黄晓明", 27) ;Student s4 = new Student("刘德华", 40) ;Student s5 = new Student("高圆圆", 27) ;//添加到集合list.add(s1) ;list.add(s2) ;list.add(s3) ;list.add(s4) ;list.add(s5) ;//自然排序,一定要在当前的类Student中实现Compareable接口// Collections.sort(list);//如果用Collections集合工具类对自定义对象同时进行自然排序和比较器排序,哪个起作用?//比较器排序起主要作用//public static <T> void sort(List<T> list,Comparator c):比较器排序Collections.sort(list,new Comparator<Student>() {@Overridepublic int compare(Student s1, Student s2) {//比较器排序//比较器排序年龄从大到小int num = s2.getAge()-s1.getAge() ;int num2 = num==0? s1.getName().compareTo(s2.getName()) :num ;return num2;}});//遍历for(Student s : list){System.out.println(s.getName()+"---"+s.getAge());}}}


3.
 HashMap集合是哈希表组成,并且他们的键允许null,值也可以允许null,该类与Hasbtable(不允许有null键和null值,)类似,
  该类不能保证被元素的顺序恒久不变.
4.
 Hashtable和HashMap的区别:
  HashMap集合:允许有null键和null值,从线程的角度考虑:他是一个线程不安全,不同步,执行效率高
  Hashtable集合:不允许有null键,从线程的角度考虑:他是一个线程安全的,同步,效率低
 
  面试题:
  List集合,Set集合,是继承自Map集合吗?
  
  Map集合和Collection是不一样的,List,Set集合是Collection集合的两个子接口,跟Map没有关系,
                Map集合:
         子实现类:HashMap/TreeMap集合
5
实现:
               (基础班)
  陈玉楼 20
  高跃 22
  (就业班)

                           李杰 21                    

                           曹石磊 23

HashMap嵌套HashMap


public class HashMapHashMap {public static void main(String[] args) {HashMap<String, HashMap<String, Integer>> HS = new HashMap<String, HashMap<String,Integer >>();HashMap<String, Integer> hs1 = new HashMap<String, Integer>();hs1.put("陈玉楼", 20);hs1.put("高越", 22);HS.put("基础班", hs1);HashMap<String, Integer> hs2 = new HashMap<String, Integer>();hs2.put("李杰", 21);hs2.put("曹世磊", 23);HS.put("就业班", hs2);Set<String> k = HS.keySet();//获取最外面一层的键for(String key: k){System.out.println(key);HashMap<String, Integer> value = HS.get(key);//键获取值(即里面的HashMap集合)Set<String> vk = value.keySet();//值获取键for(String valuekey : vk){ Integer valuevalue = value.get(valuekey); System.out.println("\t"+valuekey+valuevalue);}}}}


实现:


三国演义
             吕布
            周瑜
笑傲江湖
             令狐冲
             林平之
神雕侠侣
              郭靖
              杨过
HashMap嵌套ArrayList
public class HashMapArrayList {public static void main(String[] args) {HashMap<String, ArrayList<String>> HS = new HashMap<String, ArrayList<String>>();ArrayList<String> arr1 = new ArrayList<String>();arr1.add("吕布");arr1.add("周瑜");HS.put("三国演义", arr1);ArrayList<String> arr2 = new ArrayList<String>();arr2.add("令狐冲");arr2.add("林平之");HS.put("笑傲江湖", arr2);ArrayList<String> arr3 = new ArrayList<String>();arr3.add("郭靖");arr3.add("杨过");HS.put("神雕侠侣", arr3);Set<String> k = HS.keySet();for(String key : k){System.out.println(key);ArrayList<String> value = HS.get(key);for(String v : value){System.out.println("\t"+v);}}}}


3.
要求
   周瑜---小乔
   吕布---貂蝉


   郭靖---黄蓉
   杨过---小龙女


   令狐冲---任盈盈
   林平之---岳灵珊

ArrayList嵌套HAshMap
public class ArrayLIstHashMap {public static void main(String[] args) {ArrayList<HashMap<String, String>> arr = new ArrayList<HashMap<String, String>>();HashMap<String , String> hs1 = new HashMap<String, String>();hs1.put("周瑜", "小巧");hs1.put("吕布", "貂蝉");arr.add(hs1);HashMap<String, String> hs2 = new HashMap<String, String>();hs2.put("郭靖", "黄蓉");hs2.put("杨过", "小龙女");arr.add(hs2);for(HashMap<String, String> hs : arr){Set<String> k = hs.keySet();for(String  key : k){String value = hs.get(key);System.out.println(key+"--"+value);}}}}