一.Map集合
1.获取功能
Map
1)V get(Object key):通过指定的键获取该键对应的值
map.get("邓超");
2)Set
Set
3)Collection
Collection
2.Map集合的遍历:
1)获取该集合中的所有的键的集合
2)遍历所有的键,获取每一个键,然后通过键获取值
3)输出键值对
public class MapDemo2 {
public static void main(String[] args) {
//创建Map集合对象
Map
//给集合中添加键值对
map.put("杨过", "小龙女") ;
map.put("郭靖", "黄蓉") ;
map.put("杨康", "穆念慈") ;
map.put("陈玄风", "梅超风") ;
//获取所有的键的集合
Set
for(String key : set){
//通过键,在获取值
String value = map.get(key) ;
System.out.println(key+"----"+value);
}
}
}
二.HashMap
1.定义
HashMap
2.常见数据类型
1)HashMap
HashMap
Set
for(Integer key : keySet){
String value = hs.get(key) ;
System.out.println(key+"="+value);
}
2)HashMap
HashMap
Set
for(String key :keySet){
//通过键获取值
String value = hs.get(key) ;
System.out.println(key+"="+value);
}
3)HashMap
HashMap
Set
for(String key :keySet){
Student value = hs.get(key) ;
System.out.println(key+"---"+value.getName()+"----"+value.getAge());
}
4)HashMap
HashMap
Set
for(Student key : keySet){
String value = hs.get(key) ;
System.out.println(key.getName()+"----"+key.getAge()+"----"+value);
}
3.LinkedHashMap集合:底层数据结构有哈希表和链表是实现
哈希表:保证键的唯一性
链表:保证元素的存储和取出一致
LinkedHashMap
三.TreeMap集合
1.两种排序: 自然排序 比较器排序
2.例题:给学生对象按照年龄从小到大进行排序
public class TreeMapDemo2 {
public static void main(String[] args) {
//开发中是用的匿名内部类:比较器排序
TreeMap
@Override
public int compare(Student s1, Student s2) {
//主要条件:是按照年龄从小到大
int num = s1.getAge() - s2.getAge() ;
//次要条件:年龄一样,不一定姓名相同
int num2 = num==0? s1.getName().compareTo(s2.getName()) : num;
return num2;
}
});
//创建学生对象:
Student s1 = new Student("潘安", 27) ;
Student s2 = new Student("唐伯虎", 27) ;
Student s3 = new Student("柳下惠", 25) ;
Student s4 = new Student("李清照", 22) ;
Student s5 = new Student("杜甫", 20) ;
Student s6 = new Student("唐伯虎", 27) ;
tm.put(s1, "明西晋" ) ;
tm.put(s2, "汉朝" ) ;
tm.put(s3, "明朝" ) ;
tm.put(s4, "宋朝" ) ;
tm.put(s5, "唐朝" ) ;
tm.put(s6, "明朝" ) ;
//获取所有的键的集合
Set
for(Student key : keySet){
String value = tm.get(key) ;
System.out.println(key.getName()+"---"+key.getAge()+"---"+value);
}
}
}
四.Arrylist和HashMap嵌套
1.ArrayList中的元素是HashMap集合
for(HashMap
//获取双列集合中的所有的键的集合
Set
for(String key : keySet){
String value = hm.get(key) ;
System.out.println(key+"---"+value);
}
}
2.HashMap集合的元素是ArrayList
Set
for(String key:keySet){
System.out.println(key);
ArrayList
for(String s:array){
System.out.println("\t"+s);
}
}
3.HashMap嵌套HashMap
Set
for(String xbkyMapKey : xbkyMapSet){
System.out.println(xbkyMapKey);
HashMap
//获取所有的键
Set
for(String xbkyMapValueKey:xbkyMapValueSet){
Integer xbkyMapValueValue = xbkayMapValue.get(xbkyMapValueKey) ;
System.out.println("\t"+xbkyMapValueKey+" "+xbkyMapValueValue);
}
}
五.Hashtable
1.Hasbtable和HashMap的区别?
* HashMap:哈希表将键映射到对应的值,此集合是允许有null值null键的,线程角度考虑:HashMap集合
* 线程不安全的,不同步,执行效率高
* Hastable:哈希表将键映射到对应到值,此集合是不允许有null值null键的,线程角度考虑:Hashtable集合
* 线程安全的,同步,执行效率低!
2.List集合和Set集合是继承自Map集合吗?
* List和Set集合属于单列集合,继承自Collection顶层次的根接口,跟Map接口没有关系
* HashMap和TreeMap才是Map的子实现类
六.Collections工具
1.常用方法
1)public static void sort(List
Collections.sort(list) ;
2) public static T max(Collection extends T> coll):求最大值
Collections.max(list)
3) public static
集合中的元素
Collections.binarySearch(list, 30)
4) public static void shuffle(List> list):随机置换
Collections.shuffle(list);
2.应用:模拟斗地主发牌
* 思路:
* 1)创建HashMap集合
* 创建ArrayList集合
* 2)装牌,从0索引开始进行编号,将编号存储到HashMap集合中,然后将点数和花色进行拼接,
* 同时将编号存储到ArrayList集合中
* 3)洗牌(洗的是编号):Collections的置换功能
* 4)发牌(发的也是编号),为了保证牌是有序的,所以,用TreeSet集合去接收TreeSet
* 5)看牌:(遍历TreeSet集合,获取里面的编号,然后通过HasmMap查找编号对应的牌)
*
*
* */
public class PokerDemo {
public static void main(String[] args) {
//创建HashMap集合
HashMap
//创建ArrayList集合
ArrayList
//2)装牌
//定义花色数组
String[] colors={"♠","♥","♣","♦"} ;
//定义点数数组
String[] numbers={"3","4","5","6","7","8","9","10",
"J","Q","k","A","2"};
//0索引开始进行编号,将编号存储到HashMap集合中,同时将编号存储到ArrayList集合中
//定义一个遍历
int index = 0 ;
//装牌
for(String number :numbers){
for(String color:colors){
String poker = color.concat(number) ;
hm.put(index, poker) ;
array.add(index) ;
index ++ ;
}
}
//存储小王和大王
hm.put(index, "小王") ;
array.add(index) ;
index ++;
hm.put(index, "大王") ;
array.add(index) ;
//洗牌
//置换
Collections.shuffle(array) ;
// System.out.println(array);
// 发牌(发的也是编号),为了保证牌是有序的,所以,用TreeSet集合去接收TreeSet
TreeSet
TreeSet
TreeSet
TreeSet
for(int x = 0 ; x < array.size() ; x ++){
if(x>=array.size() -3){
diPai.add(array.get(x)) ;
}else if( x % 3==0){
player1.add(array.get(x)) ;
}else if(x % 3==1){
player2.add(array.get(x)) ;
}else if( x % 3==2){
player3.add(array.get(x)) ;
}
}
//看牌:(遍历TreeSet集合,获取里面的编号,然后通过HasmMap查找编号对应的牌):每一个人都需要看牌.封装成功能
lookpoker("玩家1", player1, hm) ;
lookpoker("玩家2", player2, hm) ;
lookpoker("玩家3", player3, hm) ;
lookpoker("底牌", diPai, hm) ;
}
public static void lookpoker(String name,TreeSet
HashMap
System.out.print(name+"的牌是:");
//遍历TreeSet集合,获取编号
for(Integer key :ts){
//获取到了编号,拿编号在hm集合中找应的值(就是牌)
String value = hm.get(key) ;
System.out.print(value +" ");
}
System.out.println();
}
}