• java学习(17-Map和Set)


    1.set接口

    1.1 特性

    Set体系的集合:
    A:存入集合的顺序和取出集合的顺序不一致
    B:没有索引
    C:存入集合的元素没有重复

    1.2 HashSet

    基本使用:

    package com.daigua17;
    
    import java.util.HashSet;
    
    public class SetDemo {
        public static void main(String[] args) {
            HashSet<Student> h = new HashSet<Student>();
    
            h.add(new Student("呆瓜", 18));
            h.add(new Student("猪娃", 19));
    
            for (Student student : h) {
                System.out.println(student);
            }
        }
    
    }
    
    class Student {
        private String name;
        private int age;
    
        public Student(String name, int age) {
            this.name = name;
            this.age = age;
        }
    
        @Override
        public String toString() {
            return "Student [name=" + name + ", age=" + age + "]";
        }
    
    }
    

    唯一性原理:

    规则:新添加到HashSet集合的元素都会与集合中已有的元素一一比较
            首先比较哈希值(每个元素都会调用hashCode()产生一个哈希值)
                 如果新添加的元素与集合中已有的元素的哈希值都不同,新添加的元素存入集合
                 如果新添加的元素与集合中已有的某个元素哈希值相同,此时还需要调用equals(Object obj)比较
                       如果equals(Object obj)方法返回true,说明新添加的元素与集合中已有的某个元素的属性值相同,那么新添加的元素不存入集合
                       如果equals(Object obj)方法返回false, 说明新添加的元素与集合中已有的元素的属性值都不同, 那么新添加的元素存入集合
    
    package com.daigua17;
    
    import java.util.HashSet;
    
    public class HashSetDemo2 {
        public static void main(String[] args) {
            HashSet<Student> hs = new HashSet<Student>();
    
            Student s1 = new Student("aa", 1);
            Student s2 = new Student("bb", 1);
            Student s3 = new Student("cc", 1);
    
            hs.add(s1);
            hs.add(s2);
            hs.add(s3);
            hs.add(s3);
    
            for (Student student : hs) {
                System.out.println(student);
            }
    
        }
    }
    
    class Student {
        private String name;
        private int age;
    
        @Override
        public String toString() {
            return "Student [name=" + name + ", age=" + age + "]";
        }
    
        public Student(String name, int age) {
            super();
            this.name = name;
            this.age = age;
        }
    
        @Override
        public int hashCode() {
            final int prime = 31;
            int result = 1;
            result = prime * result + age;
            result = prime * result + ((name == null) ? 0 : name.hashCode());
            return result;
        }
    
        @Override
        public 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;
        }
    
    }
    

    1.3 洗牌练习

    package com.daigua17;
    
    import java.util.ArrayList;
    import java.util.Collections;
    
    /*
     *  模拟斗地主发牌 
        
        买牌
        洗牌
        发牌
     */
    
    public class PokerTest {
        public static void main(String[] args) {
            // 创建花色数组
            String[] huase = {"黑桃", "红桃", "梅花", "方块"};
    
            // 创建卡牌数字数组
            String[] value = {"A", "2", "3", "4", "5", "6", "7", "8", "9", "10", "J", "Q", "K"};
    
            // 创建卡牌集合
            ArrayList<String> cardBox = new ArrayList<String>();
    
            // 组成一副牌
            for (int i = 0; i < huase.length; i++) {
                String temp_huase = huase[i];
                for (int j = 0; j < value.length; j++) {
                    String temp_value = value[j];
                    cardBox.add(temp_huase + temp_value);
                }
    
            }
            cardBox.add("大王");
            cardBox.add("小王");
    
            // 洗牌 打乱顺序
            Collections.shuffle(cardBox);
    
            // 三个玩家
            ArrayList<String> 林志玲 = new ArrayList<String>();
            ArrayList<String> 波多野结衣 = new ArrayList<String>();
            ArrayList<String> 大桥未久 = new ArrayList<String>();
    
            // 发牌,要留三张底牌
            for (int i = 0; i < cardBox.size() - 3; i++) {
                if (i % 3 == 0) {
                    林志玲.add(cardBox.get(i));
                } else if (i % 3 == 1) {
                    波多野结衣.add(cardBox.get(i));
                } else if (i % 3 == 2) {
                    大桥未久.add(cardBox.get(i));
                }
            }
    
            System.out.println("林志玲:" + 林志玲);
            System.out.println("波多野结衣:" + 波多野结衣);
            System.out.println("大桥未久:" + 大桥未久);
    
            System.out.println("底牌:");
    
            for (int i = cardBox.size() - 3; i < cardBox.size(); i++) {
                System.out.println(cardBox.get(i));
            }
    
        }
    }
    

    2.Map

    package com.daigua17;
    
    import java.util.HashMap;
    import java.util.Map;
    
    /*
     *  Map的常用功能:
     *      映射功能:
     *              V put(K key, V value)
     *      获取功能:
     *              V get(Object key)
     *              int size()
     *      判断功能:
     *              boolean containsKey(Object key)
                    boolean containsValue(Object value)
                    boolean isEmpty()
    
     *      删除功能:
     *              void clear()
     *              V remove(Object key)
     *
     *      遍历功能:
     *              Set<Map.Entry<K,V>> entrySet()
     *
     *
     *          Set<K> keySet()
     *          Collection<V> values()
    
     */
    public class MapDemo {
        public static void main(String[] args) {
            // 多态,向上转型
            Map<String, String> hm = new HashMap<String, String>();
    
            // 映射 添加一个键值对
            hm.put("1", "100");
            hm.put("2", "101");
            System.out.println(hm);
    
            // 获取
            System.out.println(hm.get("1"));
    
            // 判断
            System.out.println(hm.containsKey("1"));
            System.out.println(hm.containsValue("100"));
            System.out.println(hm.isEmpty());
    
            // 删除
    //        System.out.println(hm.remove("1"));
    //        hm.clear();
    //        System.out.println(hm);
    
            // 遍历1:用keySet
            for (String s : hm.keySet()) {
                System.out.println(s + ":" + hm.get(s));
            }
    
            System.out.println("--------------");
            // 遍历2:用entrySet
            for (Map.Entry<String, String> stringStringEntry : hm.entrySet()) {
    
                System.out.println(stringStringEntry);
                System.out.println(stringStringEntry.getKey());
                System.out.println(stringStringEntry.getValue());
                System.out.println("++++++");
            }
        }
    }
    
  • 相关阅读:
    vsftpd用户登陆目录
    Linux下能否用用apache运行ASP.NET的WebService
    rose软件下载(Rational Rose 2003 Enterprise Edition)
    linux删除目录
    2013314 生活日记
    ubuntu12.10安装GTK+
    SqlServer 基础知识数据检索、查询排序
    获取时间段:本周、本月、本年
    二、自定义控件之RadioButtonList
    ext.net 开发学习之FileUploadField与Image (四)
  • 原文地址:https://www.cnblogs.com/daigua/p/java-xue-xi-17Map-heSet.html
Copyright © 2020-2023  润新知