java基础——————集合框架《二》

                  ——-android培训java培训、期待与您交流! ———-
   
    Map集合
        
        Map 集合 和 Collection 集合的区别 :
            a: map集合是双列集合,Collection集合是单列集合
            b: map集合的数据结构只针对键有效 , Collection集合的数据结构对存储的元素有效
            c: map集合的键是唯一的而Collection集合的Set集合可以保证元素的唯一性
    
        功能方法:

            V put(K key,V value):                    添加元素
            V remove(Object key)                    根据键进行删除元素
            void clear()                            移除所有的元素
            boolean containsKey(Object key)            判断是否包含指定的key
            boolean containsValue(Object value)        判断是否包含指定的值
            boolean isEmpty()                        判断集合元素是否为空
            int size()                                获取集合的长度
            V get(Object key)                        根据键获取值
            Set<K> keySet()                            获取所有的键的Set集合
            Collection<V> values()                    获取所有的值的Collection集合
            Set<Map.Entry<K,V>> entrySet():            返回所有的键值对对象的Set集合


        Map集合的遍历方式:

          

 Map<String , String> map = new HashMap<String , String> () ;

            map.put("邓超" , "孙俪");
            map.put("黄晓明" , "杨颖");
            map.put("梁山伯" , "祝英台");

 

 


            第一种: 根据键获取值的遍历

              

 

 

 Set<String> keys = map.keySet() ;
                for(String key : keys) {
                    
                    // 通过键获取值
                    String value = map.get(key) ;
                
                    // 输出
                    System.out.println(key + "----" + value) ;
                }

 

 

 

 


            第二种: 根据键值对进行遍历
                
              

 

 

 

 

 Set<Entry<String , String>>  entry = map.entrySet() ;
                for(Entry<String , String> en : entry) {
                    
                    // 获取键
                    String key = en.getKey() ;
                    
                    // 获取值
                    String value = en.getValue() ;

                    // 输出
                    System.out.println(key + "---" + value) ;
                }


 练习 HashMap集合键是Stirng值是String的案例

import java.util.HashMap;
import java.util.Map.Entry;
import java.util.Set;

/**
 * HashMap集合键是Stirng值是String的案例
 */
public class HashMapDemo {
	
	public static void main(String[] args) {
		
		// 创建对象
		HashMap<String, String> map = new HashMap<String , String>() ;
		
		// 添加元素
		map.put("猪八戒", "嫦娥") ;
		map.put("唐僧", "孔雀公主") ;
		map.put("孙悟空", "紫霞仙子") ;
		map.put("牛魔王", "铁扇公主") ;
		
		// 遍历
		// 第一种方式:	通过键获取值的遍历
		Set<String> keys = map.keySet() ;
		
		// 循环
		for(String key : keys) {
			
			// 通过键获取值
			String value = map.get(key) ;
			
			// 输出
			System.out.println(key + "----" + value);
		}
		
		System.out.println("-------------------------");
		
		// 第二种方式:	获取所有的键值对对象进行遍历
		Set<Entry<String,String>> entrySet = map.entrySet() ;
		
		//   循环
		for(Entry<String,String> en : entrySet) {
			
			// 获取键
			String key = en.getKey() ;
			
			// 获取值
			String value = en.getValue() ;
			
			// 输出
			System.out.println(key + "----" + value);
		}
		
	}

}

 

练习 HashMap集合键是Stirng值是String的案例

 

import java.util.HashMap;
import java.util.Map.Entry;
import java.util.Set;

/**
 * 	HashMap集合键是String值是Student的案例
 */
public class HashMapDemo2 {
	
	public static void main(String[] args) {
		
		// 创建集合对象
		HashMap<String , Student> map = new HashMap<String , Student>() ;
 		
		// 创建自定义对象
		Student s1 = new Student("刘亦菲" , 18) ;
		Student s2 = new Student("赵丽颖" , 16) ;
		Student s3 = new Student("陈伟博" , 16) ;
		Student s4 = new Student("裴杲琪" , 18) ;
		
		// 把自定义对象添加到集合中
		map.put("001", s1) ;
		map.put("002", s2) ;
		map.put("003", s3) ;
		map.put("004", s4) ;
		
		// 遍历
		// 第一种遍历: 通过键获取值进行遍历
		Set<String> keys = map.keySet() ;
		
		// 循环
		for(String key : keys) {
			
			// 通过键获取值
			Student s = map.get(key) ;
			
			// 输出
			System.out.println(key + "---" + s.getName() + "----" + s.getAge());
		}
		
		System.out.println("---------------------------");
		
		// 第二种遍历方式:	 通过键值对对象进行遍历
		Set<Entry<String,Student>> entrySet = map.entrySet() ;
		
		// 循环
		for(Entry<String,Student> en : entrySet) {
			
			// 获取键
			String key = en.getKey() ;
			
			// 获取值
			Student s = en.getValue() ;
			
			// 输出
			System.out.println(key + "---" + s.getName() + "----" + s.getAge());
			
		}
		
	}

}
//Studet类
public class Student {
    
    private String name ;
    
    private int age ;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public Student() {
        super();
    }

    public Student(String name, int age) {
        super();
        this.name = name;
        this.age = age;
    }

}

 

 

 


        
    LinkedHashMap : 底层的数据结构是链表和哈希表,元素有序 ,并且唯一
                    元素的有序靠的是链表实现

 

 

 

                    元素的唯一靠的是哈希表实现

 

练习

 

 

public class LinkedHashMapDemo {
	
	public static void main(String[] args) {
		
		// 创建对象
		LinkedHashMap<String , String> map = new LinkedHashMap<String , String>() ;
		
		// 添加元素
		map.put("hello", "你好") ;
		map.put("world", "世界") ;
		map.put("java", "爪哇") ;
		map.put("java", "爪哇2") ;
		
		// 遍历集合
		// 第二种遍历方式: 根据键值对对象遍历集合
		// 获取到键值对对象对应的Set集合
		Set<Entry<String,String>> entrySet = map.entrySet() ;
		
		// 遍历
		for(Entry<String,String> en : entrySet) {
			
			// 获取键
			String key = en.getKey() ;
			
			// 获取值
			String value = en.getValue() ;
			
			// 输出
			System.out.println(key + "----" + value);
			 
		}
		
	}

}

 

 

 


    HashMap 和 Hashtable 的区别:
            HashMap : 线程是不安全的,效率高 , 允许null值和null键
            Hashtable: 线程是安全的,效率低 , 不允许null值和null键
        
    Collections(集合工具类)

        public static <T> void sort(List<T> list):                    排序    
        public static <T> int binarySearch(List<?> list,T key):        二分查找,元素需要有序
        public static <T> T max(Collection<?> coll):                获取最大值
        public static void reverse(List<?> list):                    反转
        public static void shuffle(List<?> list):                    随机置换

 

 

 

 

 

 

 

集合的综合练习模拟斗地主

 

import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
import java.util.TreeSet;

/**
 * 步骤:
 * 		a: 创建一个牌盒使用Map集合存储
 * 		b: 定义一个ArrayList存储每一张牌对应的索引
 * 		c: 定义一个int类型的变量int index = 0 ;
 * 		d: 定义花色数组和数字数组
 * 		e: 遍历数组生成指定的牌,把牌添加到牌盒中,并同时存储索引
 *		f: 洗牌 , 洗的是索引对应的集合
 *		g: 发牌 , 发的也是索引,只不过我们需要使用TreeSet集合存储索引(因为可以排序)
 *		h: 看牌
 */
public class PokerDemo2 {
	
	public static void main(String[] args) {
		
		// 创建一个牌盒使用Map集合存储
		HashMap<Integer , String> pokerBox = new HashMap<Integer , String>() ;
		
		// 定义一个ArrayList存储每一张牌对应的索引
		ArrayList<Integer> indexs = new ArrayList<Integer>() ;
		
		// 定义一个int类型的值
		int index = 0 ;
		
		// 定义花色数组
		String[] colors = {"♥" , "♠" , "♣" , "♦"} ;
		
		// 定义数字数组
		String[] nums = {"3" , "4" , "5" , "6" , "7" , "8" , "9" , "10"  ,"J" , "Q" , "K" , "A" , "2"} ;
		
		// 生成牌
		for(String num : nums) {
			for(String color : colors) {
				
				// 牌
				String poker = color.concat(num) ;
				
				// 把这个牌添加到牌盒中
				pokerBox.put(index, poker) ;
				
				// 把索引添加到indexs中
				indexs.add(index) ;
				
				// 索引+1
				index++ ;
				
			}
		}
		
		// 添加大小王
		pokerBox.put(index, "小王") ;
		indexs.add(index) ;
		index++ ;
		
		pokerBox.put(index, "大王") ;
		indexs.add(index) ;
		
		// 洗牌
		Collections.shuffle(indexs) ;
		
		// 发牌
		// 定义四个集合
		TreeSet<Integer> zhourunfaSet = new TreeSet<Integer>() ;
		TreeSet<Integer> zhouxingxingSet = new TreeSet<Integer>() ;
		TreeSet<Integer> huileiyuSet = new TreeSet<Integer>() ;
		TreeSet<Integer> dipaiSet = new TreeSet<Integer>() ;
		
		for(int x = 0 ; x < indexs.size() ; x++) {
			
			if(x >= indexs.size() - 3){
				dipaiSet.add(indexs.get(x)) ;
			}else if(x % 3 == 0) {
				zhourunfaSet.add(indexs.get(x)) ;
			}else if(x % 3 == 1) {
				zhouxingxingSet.add(indexs.get(x)) ;
			}else if(x % 3 == 2) {
				huileiyuSet.add(indexs.get(x)) ;
			}
			 
		}
		
		// 看牌
		lookPoker("周润发" , zhourunfaSet , pokerBox) ;
		lookPoker("周星星" , zhouxingxingSet , pokerBox) ;
		lookPoker("刘德华" , huileiyuSet , pokerBox) ;
		lookPoker("底牌" , dipaiSet , pokerBox) ;
	}
	
	public static void lookPoker(String name , TreeSet<Integer> set , HashMap<Integer , String> pokerBox) {
		
		System.out.print(name + ":\t");
		for(Integer i : set) {
			System.out.print(pokerBox.get(i) + "\t");
		}
		System.out.println();
		
	}

}

 

 

 

=================================================================================================================================

集合框架

Collection

    |- List
        |- ArrayList
        |- Vector
        |- LinkedList
    |- Set
        |- HashSet
        |- TreeSet
Map
    |- HashMap

 

 

 

    |- TreeMap

 

                                                                                                                                                                                                       ——-android培训java培训、期待与您交流! ———-

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值