Map集合

mac2022-06-30  31

Map集合概述和特点【理解】

Map集合概述 interface Map<K,V> K:键的类型;V:值的类型

Map集合的特点

键值对映射关系一个键对应一个值键不能重复,值可以重复元素存取无序

Map集合的遍历(方式1)【应用】

遍历思路 我们刚才存储的元素都是成对出现的,所以我们把Map看成是一个夫妻对的集合 把所有的丈夫给集中起来遍历丈夫的集合,获取到每一个丈夫根据丈夫去找对应的妻子 步骤分析 获取所有键的集合。用keySet()方法实现遍历键的集合,获取到每一个键。用增强for实现根据键去找值。用get(Object key)方法实现 代码实现 public static void main(String[] args) { Map<String,String> map=new HashMap<>(); map.put("123","456"); map.put("111","222"); Set<String> set = map.keySet(); System.out.println(map); for (String key : set) { String value = map.get(key); System.out.println(key+":"+value); } }

Map集合的遍历(方式2)【应用】

遍历思路 我们刚才存储的元素都是成对出现的,所以我们把Map看成是一个夫妻对的集合 获取所有结婚证的集合遍历结婚证的集合,得到每一个结婚证根据结婚证获取丈夫和妻子 步骤分析 获取所有键值对对象的集合 Set<Map.Entry<K,V>> entrySet():获取所有键值对对象的集合 遍历键值对对象的集合,得到每一个键值对对象 用增强for实现,得到每一个Map.Entry 根据键值对对象获取键和值 用getKey()得到键用getValue()得到值 代码实现 public static void main(String[] args) { Map<String,String>map=new HashMap<>(); map.put("111","222"); map.put("222","333"); System.out.println(map); Set<Map.Entry<String, String>> entrySet = map.entrySet(); System.out.println(entrySet); for (Map.Entry<String, String> entry : entrySet) { String key = entry.getKey(); String value = entry.getValue(); System.out.println(key+value); } }

统计字符串中每个字符出现的次数

案例需求 键盘录入一个字符串,要求统计字符串中每个字符串出现的次数。举例:键盘录入“aababcabcdabcde” 在控制台输出:“a(5)b(4)c(3)d(2)e(1)” 代码实现 public class HashMapDemo { public static void main(String[] args) { //键盘录入一个字符串 Scanner sc = new Scanner(System.in); System.out.println("请输入一个字符串:"); String line = sc.nextLine(); //创建HashMap集合,键是Character,值是Integer // HashMap<Character, Integer> hm = new HashMap<Character, Integer>(); TreeMap<Character, Integer> hm = new TreeMap<Character, Integer>(); //遍历字符串,得到每一个字符 for (int i = 0; i < line.length(); i++) { char key = line.charAt(i); //拿得到的每一个字符作为键到HashMap集合中去找对应的值,看其返回值 Integer value = hm.get(key); if (value == null) { //如果返回值是null:说明该字符在HashMap集合中不存在,就把该字符作为键,1作为值存储 hm.put(key,1); } else { //如果返回值不是null:说明该字符在HashMap集合中存在,把该值加1,然后重新存储该字符和对应的值 value++; hm.put(key,value); } } //遍历HashMap集合,得到键和值,按照要求进行拼接 StringBuilder sb = new StringBuilder(); Set<Character> keySet = hm.keySet(); for(Character key : keySet) { Integer value = hm.get(key); sb.append(key).append("(").append(value).append(")"); } String result = sb.toString(); //输出结果 System.out.println(result); } }

ArrayList集合存储学生并排序【应用】

案例需求 ArrayList存储学生对象,使用Collections对ArrayList进行排序要求:按照年龄从小到大排序,年龄相同时,按照姓名的字母顺序排序 代码实现 public class CollectionsDemo02 { public static void main(String[] args) { //创建ArrayList集合对象 ArrayList<Student> array = new ArrayList<Student>(); //创建学生对象 Student s1 = new Student("linqingxia", 30); Student s2 = new Student("zhangmanyu", 35); Student s3 = new Student("wangzuxian", 33); Student s4 = new Student("liuyan", 33); //把学生添加到集合 array.add(s1); array.add(s2); array.add(s3); array.add(s4); //使用Collections对ArrayList集合排序 //sort(List<T> list, Comparator<? super T> c) Collections.sort(array, new Comparator<Student>() { @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; } });

模拟斗地主案例-升级版本【应用】

案例需求

​ 通过程序实现斗地主过程中的洗牌,发牌和看牌。要求:对牌进行排序

代码实现

public class PokerDemo { public static void main(String[] args) { //创建HashMap,键是编号,值是牌 HashMap<Integer, String> hm = new HashMap<Integer, String>(); //创建ArrayList,存储编号 ArrayList<Integer> array = new ArrayList<Integer>(); //创建花色数组和点数数组 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) { hm.put(index, color + number); array.add(index); index++; } } hm.put(index, "小王"); array.add(index); index++; hm.put(index, "大王"); array.add(index); //洗牌(洗的是编号),用Collections的shuffle()方法实现 Collections.shuffle(array); //发牌(发的也是编号,为了保证编号是排序的,创建TreeSet集合接收) TreeSet<Integer> lqxSet = new TreeSet<Integer>(); TreeSet<Integer> lySet = new TreeSet<Integer>(); TreeSet<Integer> fqySet = new TreeSet<Integer>(); TreeSet<Integer> dpSet = new TreeSet<Integer>(); for (int i = 0; i < array.size(); i++) { int x = array.get(i); if (i >= array.size() - 3) { dpSet.add(x); } else if (i % 3 == 0) { lqxSet.add(x); } else if (i % 3 == 1) { lySet.add(x); } else if (i % 3 == 2) { fqySet.add(x); } } //调用看牌方法 lookPoker("林青霞", lqxSet, hm); lookPoker("柳岩", lySet, hm); lookPoker("风清扬", fqySet, hm); lookPoker("底牌", dpSet, hm); } //定义方法看牌(遍历TreeSet集合,获取编号,到HashMap集合找对应的牌) public static void lookPoker(String name, TreeSet<Integer> ts, HashMap<Integer, String> hm) { System.out.print(name + "的牌是:"); for (Integer key : ts) { String poker = hm.get(key); System.out.print(poker + " "); } System.out.println(); } }
最新回复(0)