Java-11.18

来源:互联网 发布:机加工成本核算软件 编辑:程序博客网 时间:2024/06/08 01:54

 Map集合的数据结构只跟键有关

  运行 可以插入null值和null 键

  哈希表数据结构---->保证元素的唯一性,靠元素重写 equals方法和HashCode 方法

  String  Integer 默认重写了equals方法和HashCode 方法的

package org.lemon.Map;//HashMap集合键是String,值是Studentimport java.util.HashMap;import java.util.Map.Entry;import java.util.Set;/** * @author zhaojiangbo * Map集合的数据结构只跟键有关 */public class HashMapDemo {    public static void main(String[] args) {//创建hashmap集合    HashMap<String, Student> hm = new HashMap<String, Student>();//添加        hm.put("s1", new Student("我",12));hm.put("s2", new Student("依",15));hm.put("s3", new Student("然",17));hm.put("s4", new Student("爱",14));hm.put("s5", new Student("你",11));hm.put("s5", new Student("你",11));//遍历 方法1Set<String> keySet = hm.keySet();for(String s : keySet) {System.out.println(s +"---"+ hm.get(s).getName()+"---"+hm.get(s).getAge());}        System.out.println("------------------");//遍历 方式2Set<Entry<String,Student>> entrySet = hm.entrySet();for(Entry<String,Student> en :entrySet) {String key = en.getKey();Student value = en.getValue();System.out.println(key +"---"+value.getName()+"---"+value.getAge() );}}}


package org.lemon.Map;public class Student {  private String name;  private int age;  public Student() {super();}public Student(String name, int age) {super();this.name = name;this.age = 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;}@Overridepublic String toString() {return "Student [getName()=" + getName() + ", getAge()=" + getAge() + "]";}@Overridepublic int hashCode() {final int prime = 31;int result = 1;result = prime * result + age;result = prime * result + ((name == null) ? 0 : name.hashCode());return result;}@Overridepublic boolean equals(Object obj) {if (this == obj)return true;if (obj == null)return false;if (getClass() != obj.getClass())return false;Student other = (Student) obj;if (age != other.age)return false;if (name == null) {if (other.name != null)return false;} else if (!name.equals(other.name))return false;return true;}}


LinkedHashMap

     Map接口的哈希表和链接列表实现,具有可预知的迭代顺序

     底层的数据结构是链表和哈希表 元素有序 且唯一

     链表数据结构保证元素的有序性     哈希表数据结构保证元素的唯一性


package org.lemon.Map;import java.util.LinkedHashMap;import java.util.Map.Entry;import java.util.Set;/** * @author zhaojiangbo * LinkedHashMap *  Map接口的哈希表和链接列表实现,具有可预知的迭代顺序 */public class LinkedHashMapDemo {  public static void main(String[] args) {//创建linkedhashmap对象  LinkedHashMap<Integer, String> lhm = new LinkedHashMap<Integer, String>();//添加    lhm.put(1, "透体圣光");  lhm.put(2, "炙热银弹");  lhm.put(3, "冷酷追击");  lhm.put(4, "圣枪洗礼");//遍历 方式1  Set<Integer> keySet = lhm.keySet();  for(Integer key : keySet) {  System.out.println(key +"---"+lhm.get(key));  }  System.out.println("--------------");//遍历 方式2  Set<Entry<Integer,String>> entrySet = lhm.entrySet();  for(Entry<Integer,String> en :entrySet) {  Integer key = en.getKey();  String value = en.getValue();  System.out.println(key +"---"+value);  }}}

TreeMap

    数据结构是红黑树  元素唯一,能对元素进行排序(自然排序和比较器排序)

    TreeMap 不允许插入null键

package org.lemon.Map;import java.util.TreeMap;/** * @author zhaojiangbo *TreeMap *数据结构是红黑树
 */public class TreeMapDemo {   public static void main(String[] args) {//   TreeMap<String,String> treeMap = new TreeMap<String, String>();// //  treeMap.put(null, null);//   错误的 //  treeMap.put(null, "qwer");// 错误的   treeMap.put("qaqaqa", "df");   System.out.println(treeMap.size());   }}

package org.lemon.Map;import java.util.Map.Entry;import java.util.Set;import java.util.TreeMap;/** * @author zhaojiangbo * treeMap * 存储键是Integer 值是 String 类型的数据 */public class TreeMapDemo2 {   public static void main(String[] args) {//创建treemap对象   TreeMap<Integer,String> treeMap = new TreeMap<Integer,String>();//添加   treeMap.put(3,"闪钢斩");   treeMap.put(6,"风之屏障");   treeMap.put(2,"踏前斩");   treeMap.put(4,"绝息狂风斩");//遍历 方式1   Set<Integer> keySet = treeMap.keySet();   for(Integer i :keySet) {   System.out.println(i +"---"+treeMap.get(i));   }   System.out.println("--------------");//遍历 方式2   Set<Entry<Integer,String>> entrySet = treeMap.entrySet();   for(Entry<Integer,String> en : entrySet) {   Integer key = en.getKey();   String value = en.getValue();   System.out.println(key +"---"+value);      }}}

键是 Student 类型的 值是String 类型的 数据

      排序的元素必须实现Comparable接口 重写CmcompareTo(T)方法

package org.lemon.Map2;import java.util.Map.Entry;import java.util.Set;import java.util.TreeMap;/** * @author zhaojiangbo *键是 Student 类型的 值是String 类型的 数据 */public class TreeMapDemo3 {   public static void main(String[] args) {//创建treemap对象   TreeMap<Student,String> treeMap = new TreeMap<Student,String>();//添加   treeMap.put(new Student("放逐之刃",23), "s1" );   treeMap.put(new Student("疾风剑豪",20), "s2");   treeMap.put(new Student("圣枪游侠",21), "s3");   treeMap.put(new Student("机械先驱",25), "s4");   treeMap.put(new Student("麦林炮手",22), "s5");//遍历   Set<Entry<Student,String>> entrySet = treeMap.entrySet();   for(Entry<Student,String> en : entrySet) {   Student key = en.getKey();   String value = en.getValue();   System.out.println(key.getName()+"---"+key.getAge()+"---"+value);     } }}


测试题

package org.lemon.MapTest;import java.util.HashMap;import java.util.Scanner;import java.util.Set;/** * @author zhaojiangbo 需求:用户随便输入一段字符串 统计字符串中每个字符出现的次数 */public class MapTestDemo {public static void main(String[] args) {// 创建hashmap对象HashMap<Character, Integer> map = new HashMap<Character, Integer>();Scanner sc = new Scanner(System.in);System.out.println("请输入一串字母");String str = sc.nextLine();// 把字符串转成一个字符数组char[] chs = str.toCharArray();// 遍历这个数组for (char key : chs) {Integer value = map.get(key);if (value == null) {map.put(key, 1);} else {value++;map.put(key, value);// 键相同,值覆盖}}// 遍历Set<Character> keySet = map.keySet();StringBuilder sb = new StringBuilder();for (Character ch : keySet) {sb.append(ch).append("(").append(map.get(ch)).append(")");}System.out.println(sb.toString());}}

package org.lemon.MapTest;import java.util.HashMap;import java.util.Set;/** * @author zhaojiangbo * 输出: * 基础班 高圆圆 ---20     黄晓波 ---22   就业班 杨桃--- 21 果然 ---23 */public class MapTestDemo2 {  public static void main(String[] args) {// 创建2个 小的集合  HashMap<String,Integer> basicMap = new HashMap<String, Integer>();  basicMap.put("高圆圆", 20);  basicMap.put("黄晓波", 22);  HashMap<String, Integer> workMap = new HashMap<String, Integer>();  workMap.put("杨桃", 21);  workMap.put("果然", 23);//创建大集合  HashMap<String,HashMap<String,Integer>> superMap = new HashMap<String, HashMap<String,Integer>>();  superMap.put("基础班", basicMap);  superMap.put("就业班", workMap);  //遍历大集合  Set<String> keySet = superMap.keySet();  for(String s : keySet) {  System.out.println(s);// 拿出每一个小集合    HashMap<String,Integer> hashMap = superMap.get(s);//再遍历小集合  Set<String> smallSet = hashMap.keySet();  for(String s2 : smallSet) {  System.out.println("\t"+s2 +"---"+hashMap.get(s2));  }  System.out.println();  }}}

package org.lemon.MapTest;import java.util.ArrayList;import java.util.HashMap;import java.util.Set;/** * @author zhaojiangbo *得到:   *  周瑜---小乔吕布---貂蝉郭靖---郭靖    杨过---小龙女令狐冲---任盈盈    林平之---岳灵珊 */public class MapTestDemo3 {    public static void main(String[] args) {//先创建 3个 hashmap 对象 并 添加值     HashMap<String,String> sgMap = new HashMap<String,String>();     sgMap.put("周瑜", "小乔");     sgMap.put("吕布", "貂蝉");     HashMap<String,String> sdMap = new HashMap<String,String>();     sdMap.put("郭靖", "黄蓉");     sdMap.put("过儿", "龙儿");     HashMap<String,String> xaMap = new HashMap<String,String>();     xaMap.put("令狐冲", "任盈盈");     xaMap.put("林平之", "岳灵珊");     //再创建 arraylist 对象并添加值     ArrayList<HashMap<String,String>> arrayList = new ArrayList<HashMap<String,String>>();     arrayList.add(sgMap);     arrayList.add(sdMap);     arrayList.add(xaMap);     //遍历     for(HashMap<String,String> hm :arrayList) {     Set<String> keySet = hm.keySet();     for(String s : keySet) {     System.out.println("\t"+s +"---"+hm.get(s));     }     System.out.println();     }}}

package org.lemon.MapTest;import java.util.ArrayList;import java.util.HashMap;import java.util.Map.Entry;import java.util.Set;/** * @author zhaojiangbo *得到: *三国演义 吕布 周瑜    笑傲江湖 令狐冲 林平之    神雕侠侣 郭靖 杨过 */public class MapTestDemo4 { public static void main(String[] args) {//先创建3 个 ArrayList 集合并添加值 ArrayList<String> sgList = new ArrayList<String>(); sgList.add("吕布"); sgList.add("周瑜"); ArrayList<String> xaList = new ArrayList<String>(); xaList.add("令狐冲"); xaList.add("林平之"); ArrayList<String> sdList = new ArrayList<String>(); sdList.add("靖哥哥"); sdList.add("过儿");//再创建  HashMap集合并添加值 HashMap<String, ArrayList<String>> hashMap = new HashMap<String,  ArrayList<String>>(); hashMap.put("三国演义", sgList); hashMap.put("笑傲江湖", xaList); hashMap.put("神雕侠侣", sdList); //遍历 Set<Entry<String,ArrayList<String>>> entrySet = hashMap.entrySet(); for(Entry<String,ArrayList<String>> en : entrySet) { String key = en.getKey(); System.out.println(key); ArrayList<String> value = en.getValue();     //再遍历 for(String s : value) { System.out.println("\t"+s); } System.out.println(); } }}

集合工具类

package org.lemon.ListUtil;import java.util.ArrayList;import java.util.Collections;/** * @author zhaojiangbo  * 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): 随机置换 */public class ListUtilDemo {public static void main(String[] args) {ArrayList<Integer> list = new ArrayList<Integer>();list.add(20);list.add(30);list.add(1);list.add(0);list.add(10);// 集合工具类进行排序Collections.sort(list);// public static <T> int binarySearch(List<?> list,T key): 二分查找 前提是元素必须有序int index = Collections.binarySearch(list, 20);System.out.println(index);Integer max = Collections.max(list);Integer min = Collections.min(list);System.out.println(max + "==" + min);Collections.reverse(list);System.out.println(list);}}


斗地主游戏

package org.lemon.Poker;import java.util.ArrayList;import java.util.Collections;public class PokerGameDemo {public static void main(String[] args) {// 斗地主 实现 发牌 和看牌// 创建一个牌盒子ArrayList<String> pokerBox = new ArrayList<String>();// 定义花色数组String[] colors = { "♥", "♠", "♦", "♣" };        // 定义牌号数组String[] nums = { "A", "2", "3", "4", "5", "6", "7", "8", "9", "10", "J", "Q", "K" };// 循环拼牌for (String color : colors) {for (String num : nums) {pokerBox.add(color + num);}}// 添加大小王pokerBox.add("☼");pokerBox.add("☽");// 洗牌Collections.shuffle(pokerBox);Collections.shuffle(pokerBox);Collections.shuffle(pokerBox);// 发牌 三个人 一副底牌// 创建三个人的集合ArrayList<String> 高圆圆 = new ArrayList<>();ArrayList<String> 杨桃 = new ArrayList<>();ArrayList<String> 黄晓波 = new ArrayList<>();ArrayList<String> 底牌 = new ArrayList<>();for (int i = 0; i < pokerBox.size(); i++) {// 留底牌if (i >= pokerBox.size() - 3) {底牌.add(pokerBox.get(i));} else if (i % 3 == 0) {高圆圆.add(pokerBox.get(i));} else if (i % 3 == 1) {杨桃.add(pokerBox.get(i));} else if (i % 3 == 2) {黄晓波.add(pokerBox.get(i));}}// 看牌lookPai("高圆圆", 高圆圆);lookPai("杨桃", 杨桃);lookPai("黄晓波", 黄晓波);lookPai("底牌", 底牌);// System.out.println(pokerBox);}private static void lookPai(String string, ArrayList<String> list) {System.out.println(string);for (String pai : list) {System.out.print(pai + "  ");}System.out.println();}}






























原创粉丝点击