首页 技术 正文
技术 2022年11月6日
0 收藏 395 点赞 985 浏览 5665 个字

Java的集合框架之Map的用法详解

Map有两种比较常用的实现:HashMapTreeMap

  • HashMap: HashMap 也是无序的,也是按照哈希编码来排序的,允许使用null 值和null 键
  • TreeMap: TreeMap 是有顺序的,按照用户的输入顺序进行排序,TreeMap 按照顺序村塾“键/值”对。值得注意的是 在TreeMap 中是不允许“键”重复的,但是可以允许“值”重复。下面通过一个简单的例子进行说明。
import java.util.Collection;import java.util.HashMap;import java.util.Iterator;import java.util.Map;import java.util.Set;public class Test2 {    public static void main(String[] args) {        Map<String,Integer> map = new HashMap<String,Integer>();        //Map<String,Integer> map = new TreeMap<String,Integer>();        //添加元素        map.put("tom",20);        map.put("rose", 18);        map.put("mike",18);        map.put("black", 21);        map.put("tom",19);//键 是不允许重复的,但是数值是可以重复的        System.out.println(map);        // 输出结果: {rose=18, tom=19, mike=18, black=21}        //取出map中的元素        int x = map.get("tom");        System.out.println(x);//19        //Map 集合的遍历方法        //"键的集合"用到keySet 方法        Set<String> set = map.keySet();//此时的set存放的都是字符串(键值)        for(String s:set)        {            System.out.println(s+"="+map.get(s)+"  ");        }        System.out.println("-------------------------");        //用迭代器进行遍历        Iterator<String> iterator = set.iterator();        while(iterator.hasNext())        {            String s = iterator.next();            System.out.println(s+"="+map.get(s)+"  ");        }        //"值的遍历",通过map.vaules()方法获取        Collection<Integer> value = map.values();//返回值类型为Collection    //"值的集合",通过map.vaules()方法获取        Collection<Integer> value = map.values();//因为是对值的遍历,所以泛型也就定义成Integer        System.out.println(value);        //值的遍历        Iterator<Integer> iterator = value.iterator();        while(iterator.hasNext())        {            int v = iterator.next();            System.out.println(v+" ");        }        //键值对 的集合,通过map.entrySet()方法获取        Set<Map.Entry<String, Integer>> set = map.entrySet();//注意此处的泛型要和上面map的类型保持一致        System.out.println(set);        for (Map.Entry<String, Integer> me:set)        {            String key = me.getKey();            Integer value = me.getValue();            System.out.println(key+"="+value+"  ");        }        System.out.println("--------------------------");        Iterator<Map.Entry<String, Integer>> iterator = set.iterator();        while(iterator.hasNext())        {            Map.Entry<String, Integer> entry = iterator.next();            System.out.println(entry.getKey()+" "+entry.getValue()+" ");        }    }}

set 和map 的几个小例子

创建一个TreeSet 对象,并在其中添加一些员工对象(Empoyee),其姓名和工资分别是:张三 8000,李四6000,王五 5600,马六 7500 。最后按照工资的大小,降序输出。(提示:让Employee 对象实现 Comparable接口)

public class Employee implements Comparable{    private String name;    private int salary;    public Employee(String name, int salary) {//对生成的属性进行初始化,生成带有参数的方法        super();        this.name = name;        this.salary = salary;    }    public Employee() {//生成不带参数的方法,其实这里的作用也是为了在测试类中更好的调用此方法        super();    }    public String getName() {        return name;    }    public void setName(String name) {        this.name = name;    }    public int getSalary() {        return salary;    }    public void setSalary(int salary) {        this.salary = salary;    }    @Override    public int compareTo(Object p) {        // TODO Auto-generated method stub        Employee p1 = (Employee)p;        if (this.salary>p1.salary)//用当前当前的salary 和p1的salary 进行比较        {            return -1; //返回的是后面一个数减去前面一个数的“位差”        }        else if (this.salary < p1.salary)        {            return 1;        }        else            return 0;    }}
import java.util.Iterator;import java.util.Set;import java.util.TreeSet;public class Test {    public static void main(String[] args) {        //TreeSet 是用户自定义的顺序(默认)        Set<Employee> set = new TreeSet<Employee>();//用set集合来完成“一个类”的操作(这个地方可以和)        Employee p1 = new Employee("张三",8000);        Employee p2 = new Employee("李四",6000);        Employee p3 = new Employee("王五",5600);        Employee p4 = new Employee("马六",8000);        set.add(p1);//add 方法自动调用compare 方法,因为重新写了此方法,所以此处可以进行比较        set.add(p2);        set.add(p3);        set.add(p4);        for (Employee e:set)        {            System.out.println(e.getName()+":"+e.getSalary());        }        System.out.println("--------------------------------");        Iterator<Employee> iterator = set.iterator();        while(iterator.hasNext())        {            Employee p = iterator.next();            System.out.println(p.getName()+":"+p.getSalary());        }    }}

例子(12)

对于上例中的排序这里做简要说明:这里是重写了compareTo 方法,因为原来是方法是无法对salaryname进行排序的,这样重写了,就可以实现排序的效果。return返回的是 位差 如果前面的数比后面的数大,且位差是正数则说明后面的比前面的还要大,并按此位差进行插入。依次类推。

@Overridepublic int compareTo(Object p) {  // TODO Auto-generated method stub  Employee p1 = (Employee)p;  if (this.salary>p1.salary)//用当前当前的salary 和p1的salary 进行比较  {    return -1; //返回的是后面一个数减去前面一个数的“位差”  }  else if (this.salary < p1.salary)  {    return 1;  }  else    return 0;}

例子(13)

创建一个Customer类,类中的属性有姓名(name)、年龄(age)、性别(gender),每个属性分别有get/set 方法。然后创建两个Customer 对象:张立、18、女和王猛、22、男。把这两个对象存储在ArrayList 对象中,然后从ArrayList 对象读取出来。

package yjlblog.www.ch01;public class Customer {    private  String name;    private int age;    private String gender;    public Customer(String name, int age, String gender) {        super();        this.name = name;        this.age = age;        this.gender = gender;    }    public Customer() {        super();    }    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;    }    public String getGender() {        return gender;    }    public void setGender(String gender) {        this.gender = gender;    }}
package yjlblog.www.ch01;import java.util.HashSet;import java.util.Set;public class SetDemo {    public static void main(String[] args) {        Set<String> set = new HashSet();        set.add("first");        set.add("second");        set.add("third");        set.add("forth");        //set 中的顺序和插入顺序是不一致的        //HashSet 按照哈希码来排序        //TreeSet 按照字典序排序        //set 中不允许出现相同的元素        for(int i = 0;i <set.size();i++){            System.out.println();        }    }}//set 也是用循环来实现遍历的
package yjlblog.www.ch01;import java.util.ArrayList;public class Test {    public static void main(String[] args) {        Customer c1 = new Customer("张立",18,"女");        Customer c2 = new Customer("王猛",18,"男");        ArrayList<Customer> list = new ArrayList<Customer>();//泛型引用的是Customer类        list.add(c1);                                        //来向”“动态数组ArrayList”中存放自己定义的属性方法        list.add(c2);        for(Customer c:list){//注意此处的c 的类型是和list的类型一致的            System.out.println("姓名"+c.getName());            System.out.println("年龄"+c.getAge());//用get方法来说的得到数据            System.out.println("性别"+c.getGender());        }    }//遍历都是使用循环的,不管事动态数组还是链表。实质可以看成是数组}

例子(11)

创建一个HashMap 对象,并在其中添加一些员工的姓名和工资:张三,8000,李四 6000.然后从HashMap对象中获取这两个人的薪水并打印出来,接着把张三的工资改为8500,再把他们的薪水显示出来。

import java.util.Map;import java.util.Set;import java.util.TreeMap;public class TEST1 {public static void main(String[] args) {    Map<String,Integer> map=new TreeMap<String,Integer>();    map.put("张三",8000);    map.put("李四", 6000);    map.put("张三", 8500);    //从HashMap对象中获取两个人的薪水并打印      Set<String> set=map.keySet();//此时set中存放的是字符串(键值)      System.out.println(set);      for(String s:set){      System.out.print(s+"="+map.get(s)+"  "); }}}
相关推荐
python开发_常用的python模块及安装方法
adodb:我们领导推荐的数据库连接组件bsddb3:BerkeleyDB的连接组件Cheetah-1.0:我比较喜欢这个版本的cheeta…
日期:2022-11-24 点赞:878 阅读:9,082
Educational Codeforces Round 11 C. Hard Process 二分
C. Hard Process题目连接:http://www.codeforces.com/contest/660/problem/CDes…
日期:2022-11-24 点赞:807 阅读:5,556
下载Ubuntn 17.04 内核源代码
zengkefu@server1:/usr/src$ uname -aLinux server1 4.10.0-19-generic #21…
日期:2022-11-24 点赞:569 阅读:6,406
可用Active Desktop Calendar V7.86 注册码序列号
可用Active Desktop Calendar V7.86 注册码序列号Name: www.greendown.cn Code: &nb…
日期:2022-11-24 点赞:733 阅读:6,179
Android调用系统相机、自定义相机、处理大图片
Android调用系统相机和自定义相机实例本博文主要是介绍了android上使用相机进行拍照并显示的两种方式,并且由于涉及到要把拍到的照片显…
日期:2022-11-24 点赞:512 阅读:7,815
Struts的使用
一、Struts2的获取  Struts的官方网站为:http://struts.apache.org/  下载完Struts2的jar包,…
日期:2022-11-24 点赞:671 阅读:4,898