1.
Map集合
需求:存储学生对象,每一个学生一个学号和姓名,通过学号去找学生,按照之前集合的操作,将学号和姓名作为当前类的成员封装起来,
然后遍历集合,将学号和学生姓名,没有必要这样去实现,因为如果很直接能拿到学生姓名,在遍历没意义!
java就提供了另一个集合Map集合<K,V>,是以一种键值对而存在
学号1 姓名1
学号2 姓名2
学号3 姓名3
学号2 姓名4(错误了)
学号4 姓名4
对于Map集合,针对的是键有效,跟值没有关系,键是唯一的,值是可以重复的!
对于Map集合,是一种键值对的一种映射关系,键是唯一的,值是可以重复的!(双列集合) 简单记:夫妻对
hashMap,treeMap 子实现类
Collection:集合框架的顶层的根接口,有两个子接口:List(元素可以重复),set(元素不可以重复的),单列集合 简单记:光棍(11.11)
ArrayList,Vector,LinkedList tree Set,hashSet
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)输出就可以了
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.
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
(就业班)
实现:
三国演义
吕布
周瑜
笑傲江湖
令狐冲
林平之
神雕侠侣
郭靖
杨过
HashMap嵌套ArrayList
3.
要求
周瑜---小乔
吕布---貂蝉
郭靖---黄蓉
杨过---小龙女
令狐冲---任盈盈
林平之---岳灵珊
ArrayList嵌套HAshMap
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嵌套HashMappublic 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);
}
}
}
}