Java的LinkedHashSet、Map接口、可变参数、集合嵌套、

1、LinkedHashSet:
(1)LinkedHashSet集合保证元素的存入和取出的顺序;

package com.oracle.demo01;

import java.util.HashSet;
import java.util.LinkedHashSet;

public class demo01 {

    public static void main(String[] args) {
        //不能存重复元素,但是LinkedHashSet是有序的。
        LinkedHashSet<String> set = new LinkedHashSet<String>(); 
        set.add("c");
        set.add("b");
        set.add("z");
        for(String s:set){
            System.out.println(s);
        }
    }
}

效果如下:

 

(2)LinkedHashSet其实是HashSet的子类;

2、Map接口:
(1)元素是成对存在,每个元素由键与值两部分组成,通过键可以找对所对应的值,键值对;
(2)Map中的集合不能包含重复的键,值可以重复;每个键只能对应一个值;
(3)遍历:迭代器:不能直接遍历map,遍历set集合
第一种方法:keyset();第二种方法:entrySet();
用增强for或者是迭代器,不能用普通for循环,因为没有下标概念;

增强for(){}

package com.oracle.demo01;

import java.util.HashMap;
import java.util.Map;
import java.util.Set;

public class demo02 {

    public static void main(String[] args) {
        Map<String,String> map = new HashMap<String,String>();
        map.put("1", "a");
        map.put("2","b");
        map.put("2", "z");
        map.put("3", "c");
        //移除
        map.remove("3");
        //取数据
        System.out.println(map.get("1"));
        System.out.println(map.get("2"));
        System.out.println(map.get("3"));
        //1、keySet遍历
        //先获取map中的key所对应的set集合
        Set<String> set = map.keySet();
        //然后遍历set找到每一个key值
        for(String s:set){
            String key = s;
            String value = map.get(key);
            System.out.println(key+".."+value);
        }
        //简写
        for(String s:map.keySet()){
            System.out.println(s+".."+map.get(s));
        }
        //2、entryset()遍历
        Set<Map.Entry<String, String>>  s1 = map.entrySet();
        for(Map.Entry<String, String> e:s1){
            System.out.println(e.getKey()+"..."+e.getValue());
        }
        //简写
        for(Map.Entry<String, String> e:map.entrySet()){
            System.out.println(e.getKey()+"..."+e.getValue());
        }
    }

}

迭代器

package com.oracle.demo01;

import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Set;

public class demo03 {

    public static void main(String[] args) {
        Map<String,String> map = new HashMap<String,String>();  
        map.put("邓超", "孙俪");
        map.put("李晨", "范冰冰");
        map.put("文章", "马伊琍");
        map.put("小沈阳", "沈春阳");
        //迭代器:不能直接遍历map,遍历set集合;
        //1、keyset()
        Set<String> s1 = map.keySet();
        Iterator<String> it = s1.iterator();
        while(it.hasNext()){
            String key = it.next();
            String value = map.get(key);
            System.out.println(key+">>"+value);
        }
        //2、entrySet()
        Set<Map.Entry<String, String>> s2 = map.entrySet();
        Iterator<Map.Entry<String, String>> it2 = s2.iterator();
        while(it2.hasNext()){
            //获取每一个"结婚证对象"
            Map.Entry<String, String> e =it2.next();
            String key = e.getKey();
            String value = e.getValue();
            System.out.println(key+".."+value);
        }
    }

}

(4)HashMap存储自定义类型键值;保证对象唯一,必须复写对象的hashCode和equals方法;

建立一个 人  类

package com.oracle.demo02;

public class person {
        private   String  name;
        private   Integer  age;
        
        public person() {
            super();
        }
        public person(String name, Integer age) {
            super();
            this.name = name;
            this.age = age;
        }
        public String getName() {
            return name;
        }
        public void setName(String name) {
            this.name = name;
        }
        public Integer getAge() {
            return age;
        }
        public void setAge(Integer age) {
            this.age = age;
        }
        
        public int hashCode() {
            final int prime = 31;
            int result = 1;
            result = prime * result + ((age == null) ? 0 : age.hashCode());
            result = prime * result + ((name == null) ? 0 : name.hashCode());
            return result;
        }
        
        public boolean equals(Object obj) {
            if (this == obj)
                return true;
            if (obj == null)
                return false;
            if (getClass() != obj.getClass())
                return false;
            person other = (person) obj;
            if (age == null) {
                if (other.age != null)
                    return false;
            } else if (!age.equals(other.age))
                return false;
            if (name == null) {
                if (other.name != null)
                    return false;
            } else if (!name.equals(other.name))
                return false;
            return true;
        }
        public String toString() {
            return "姓名为" + name + ", 年龄为" + age ;
        }
        
}

建立测试类

package com.oracle.demo02;

import java.util.HashMap;
import java.util.LinkedHashMap;
import java.util.LinkedHashSet;
import java.util.Map;

public class demo01 {

    public static void main(String[] args) {
//通过方法对比看出 键不能重复
       method01();
       method02();
method03(); }
public static void method01(){ Map<String, person> map = new HashMap<String, person>(); map.put("java0601", new person("a",21)); map.put("java61", new person("b",21)); map.put("java0806", new person("a",21)); map.put("java86", new person("b",21)); for(String s:map.keySet()){ System.out.println(s+"..."+map.get(s)); } } public static void method02(){ Map<person,String> map = new HashMap<person,String>(); map.put(new person("a",21),"java0601"); map.put(new person("b",21),"java61"); map.put(new person("a",21),"java0806"); map.put(new person("b",21),"java86"); for(person p:map.keySet()){ System.out.println(p+"..."+map.get(p)); } } public static void method03(){ LinkedHashMap<person,String> map = new LinkedHashMap<person,String>(); map.put(new person("a",21),"java0601"); map.put(new person("b",22),"java61"); map.put(new person("a",23),"java0806"); map.put(new person("b",24),"java86"); for(person p:map.keySet()){ System.out.println(p+"..."+map.get(p)); } } }

效果如下:

 


3、可变参数:
(1)修饰符 返回值类型 方法名(参数类型... 形参名){ };

package com.oracle.demo02;

public class demo02 {

    public static void main(String[] args) {
        System.out.println(add(1));
        System.out.println(add(1,1));
        System.out.println(add(1,1,1));
    }
    //想要做一个求和的方法,但是参数个数不一定,但是类型都是一定的Int
    public static  int add(int...a){
        //int[] b = a;相当于一个数组
        int sum = 0;
        for(int i = 0;i < a.length;i++){
            sum +=a[i];
        }
        return sum;
    }
}

效果如下:

 


(2)可变参数一定要写在参数列表的末尾位置;

 

(3)调用的不确定性,只能传一个可变参数;


4、集合嵌套:
      用循环嵌套取值;

举个例子:

package com.oracle.demo02;

import java.util.HashMap;
import java.util.Set;

public class demo03 {

    public static void main(String[] args) {
        //HashMap<String, HashMap<String,String>>
        method01();

    }
    public  static  void method01(){
        HashMap<String, HashMap<String,String>>  map = new HashMap<String, HashMap<String,String>>();
        HashMap<String,String>  m1 = new  HashMap<String,String>();
        m1.put("0601", "温昭");
        m1.put("0806", "马荣");
        HashMap<String,String>  m2 = new  HashMap<String,String>();
        m2.put("0101", "张三");
        m2.put("0202", "李四");
        map.put("oracle01", m1);
        map.put("oracle02", m2);
        //第一层循环:获取学校
        Set<String> s1= map.keySet();
        for(String s2:s1){
               //学校名称
               String  schoolname = s2; 
               //获取每一个班级
               HashMap<String,String> s3 = map.get(s2);
               Set<String> s4 = s3.keySet();
               for(String s5:s4){
                   //班级名称
                   String  classname =   s5;
                   //学生名称:
                   String  studentname =  s3.get(s5);
                   System.out.println(schoolname+".."+classname+".."+studentname);
               }
        }
    }
}

效果如下:

可以简写为:

//简写
        for(String s:map.keySet()){
            for(String s1:map.get(s).keySet()){
                System.out.println("学校为"+s+",班级为"+s1
                        +"姓名为"+map.get(s).get(s1));
            }
        }

 

posted on 2018-10-12 11:24  孙崇武  阅读(295)  评论(0编辑  收藏  举报

导航