Map集合

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,LinkedList tree                                   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() ;
//遍历所有的键的集合,增强for
for(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>() {


@Override
public 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);
}
}
}
}








 





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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值