Set集合

1.Set接口

  1.数据不可以重复

  2.没有顺序

  3.没有下标

2.HashSet集合,采用哈希表结构存储数据,保证元素唯一性的方式依赖于:hashCode()与equals()方法。

3.在往HashSet中存放对象时,会调用对象的HashCode()方法,计算哈希值,哈希值不相同,再调用equals()方法,没有重复内容才存入

public class HashSetDemo {
    public static void main(String[] args) {
        //创建HashSet对象
        HashSet hs = new HashSet();
        //给集合中添加自定义对象
        hs.add(new Student("zhangsan",21));
        hs.add(new Student("lisi",22));
        hs.add(new Student("wangwu",23));
        hs.add(new Student("zhangsan",21));
        //取出集合中的每个元素
        Iterator it = hs.iterator();
        while(it.hasNext()){
            Student s = (Student)it.next();
            System.out.println(s);
        }
    }
}

4.LinkedHashSet

  1.怎么存怎么取

  2.不能重复

  3.没有下标

public class LinkedHashSetDemo {
    public static void main(String[] args) {
        Set<String> set = new LinkedHashSet<String>();
        set.add("bbb");
        set.add("aaa");
        set.add("abc");
        set.add("bbc");
Iterator it = set.iterator();
        while (it.hasNext()) {
            System.out.println(it.next());
        }
    }
}

5.判断集合元素唯一的原理

1.ArrayList集合的contains()方法,返回值是布尔值

2.HashSet的在调用add方法时会调用HashCode()和equals()方法

3.存储自定义类型元素时,需重写HashCode()和equals()方法

6.Map接口

  1.Map集合中的元素是成对存在的,通过键可以找到相应的值

  2.Map是双列集合

  3.Map中的集合不能包含重复的键,值可以重复;每个键只能对应一个值。

7.Map集合常用方法

  1.get()方法,通过key获得值

  2.put()方法,把key和值存入集合

  3.remove()方法,根据key删除值

8.Map集合遍历

  1.keyset()方法

    1.获取Map集合中所有的键,由于键是唯一的,所以返回一个Set集合存储所有的键

    2.遍历键的Set集合,得到每一个键

    3.根据键,获取键所对应的值

public class MapDemo {
    public static void main(String[] args) {
        //创建Map对象
        Map<String, String> map = new HashMap<String,String>();
        //给map中添加元素
        map.put("邓超", "孙俪");
        map.put("李晨", "范冰冰");
map.put("刘德华", "柳岩");
        //获取Map中的所有key
        Set<String> keySet = map.keySet();
        //遍历存放所有key的Set集合
        Iterator<String> it =keySet.iterator();
        while(it.hasNext()){
            //得到每一个key
            String key = it.next();
            //通过key获取对应的value
            String value = map.get(key);
            System.out.println(key+"="+value);
        }
    }
}

  

public static void main(String[] args) {
        //大map
        HashMap<String, HashMap<Person,String>> map=new HashMap<String, HashMap<Person,String>>();
        //创建两个小map
        HashMap<Person,String> java0803=new HashMap<Person,String>();
        HashMap<Person,String> java0903=new HashMap<Person,String>();
        //存值
        java0803.put(new Person("小红帽",18), "山东淄博");
        java0803.put(new Person("大灰狼",18), "山东济南");
        java0903.put(new Person("小白兔",20), "山东淄博");
        java0903.put(new Person("派大星",21), "山东济南");
        
        map.put("java0803", java0803);
        map.put("java0903", java0903);
        //keyset+增强for
        //获取大map中所有key所在的set集合
        Set<String> bigKeys=map.keySet();
        //遍历取到每一个key值得到每一个value值
        for(String bigkey:bigKeys) {
            HashMap<Person,String> smallMap=map.get(bigkey);
            //获取小map所有key所在的set集合
            Set<Person> smallKeys=smallMap.keySet();
            for(Person skey:smallKeys) {
                //根据Key值获取对应的value值
                System.out.println(bigkey+"--"+skey+"--"+smallMap.get(skey));
            }
        }
    }
    public static void main(String[] args) {
        //大map
        HashMap<String, HashMap<Person,String>> map=new HashMap<String, HashMap<Person,String>>();
        //创建两个小map
        HashMap<Person,String> java0803=new HashMap<Person,String>();
        HashMap<Person,String> java0903=new HashMap<Person,String>();
        //存值
        java0803.put(new Person("小红帽",18), "山东淄博");
        java0803.put(new Person("大灰狼",18), "山东济南");
        java0903.put(new Person("小白兔",20), "山东淄博");
        java0903.put(new Person("派大星",21), "山东济南");
        
        map.put("java0803", java0803);
        map.put("java0903", java0903);
        //keyset+迭代器
        //先获取大map所有key所在的set集合
        Set<String> bigkeys=map.keySet();
        Iterator<String> it=bigkeys.iterator();
        while(it.hasNext()) {
            //获取到大map中每一个key值
            String bigkey=it.next();
            HashMap<Person,String> smallmap=map.get(bigkey);
            //获取所有key所在的set集合
            Set<Person> skeys=smallmap.keySet();
            Iterator<Person> itt=skeys.iterator();
            while(itt.hasNext()) {
                //获取每一个小map中的key
                Person skey=itt.next();
                System.out.println(bigkey+"--"+skey+"--"+smallmap.get(skey));
            }
        }
    }
}

  2.EntrySet()方法

public static void main(String[] args) {
        //大map
        HashMap<String, HashMap<Person,String>> map=new HashMap<String, HashMap<Person,String>>();
        //创建两个小map
        HashMap<Person,String> java0803=new HashMap<Person,String>();
        HashMap<Person,String> java0903=new HashMap<Person,String>();
        //存值
        java0803.put(new Person("小红帽",18), "山东淄博");
        java0803.put(new Person("大灰狼",18), "山东济南");
        java0903.put(new Person("小白兔",20), "山东淄博");
        java0903.put(new Person("派大星",21), "山东济南");
        map.put("java0803", java0803);
        map.put("java0903", java0903);
        //获取大map结婚证对象集合Set
        Set<Map.Entry<String, HashMap<Person,String>>> set=map.entrySet();
        for(Map.Entry<String, HashMap<Person,String>> s:set) {
            //获取大map中的key和value
            HashMap<Person,String> h=s.getValue();
            //获取小map结婚证对象集合Set
            Set<Map.Entry<Person,String>> s1=h.entrySet();
            for(Map.Entry<Person,String> m:s1) {
                //获取小map中的key和value
                System.out.println(s.getKey()+"--"+m.getKey()+"--"+m.getValue());
            }
        }
public static void main(String[] args) {
        //大map
        HashMap<String, HashMap<Person,String>> map=new HashMap<String, HashMap<Person,String>>();
        //创建两个小map
        HashMap<Person,String> java0803=new HashMap<Person,String>();
        HashMap<Person,String> java0903=new HashMap<Person,String>();
        //存值
        java0803.put(new Person("小红帽",18), "山东淄博");
        java0803.put(new Person("大灰狼",18), "山东济南");
        java0903.put(new Person("小白兔",20), "山东淄博");
        java0903.put(new Person("派大星",21), "山东济南");
        map.put("java0803", java0803);
        map.put("java0903", java0903);
        //获取大map中所有的结婚证对象所在的set集合
        Set<Map.Entry<String, HashMap<Person,String>>> s1=map.entrySet();
        //转换为迭代器对象
        Iterator<Map.Entry<String, HashMap<Person,String>>> it=s1.iterator();
        while(it.hasNext()) {
            //获取entry对象
            Map.Entry<String, HashMap<Person,String>> m=it.next();
            //获取小map
            HashMap<Person,String> m1=m.getValue();
            //获取小map对象集合
            Set<Map.Entry<Person,String>> s2=m1.entrySet();
            //获取小map对象集合的迭代器
            Iterator<Map.Entry<Person,String>> it2=s2.iterator();
            while(it2.hasNext()) {
                //获取每一个小map对象
                Map.Entry<Person,String> m3=it2.next();
                System.out.println(m.getKey()+"--"+m3.getKey()+"--"+m3.getValue());
            }
        }

 

 

  

posted @ 2020-11-02 20:21  杰斯-java  阅读(149)  评论(0)    收藏  举报