——-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