Map查找表,队列和栈

Stella981
• 阅读 612

存入key-value对V put(K k,V v) ;获取key所对应的value值V get(K k);判断Map是否包含给定的key或value值:boolean containsKey(K k),boolean containsValue(V v);遍历所有的key:Set keySet();遍历所有key-value对Set entrySet();遍历所有的value:Collection values();删除key对应的键值对V remove(K k);;队列:向队尾追加元素boolean offer(E e);出队操作E poll();引用队首元素E peek();遍历队列;栈;

/**
 * java.util.Map
 * Map-查找表
 * 以key-value对的形式存储元素。
 * 常用实现类:HashMap
 * @author Administrator
 *
 */
public class Maptest{
    public static void main(String[] args) {
        Map<String,Integer> map = new HashMap<String,Integer>();
        
        /*
         * V put(K k,V v) 将给定的key-value对存入Map中。
         * Map要求key不允许重复(依靠key元素equals比较的结果判定是否重复)
         * 若给定的key在Map中已经存在则替换value。被替换的value会被返回。
         */
        map.put("语文", 99);
        map.put("化学", 95);
        System.out.println(map);
        
        //替换value
        Integer num = map.put("化学", 100);
        System.out.println(map);
        System.out.println("old:"+num);
        
        /*
         * V get(K k)
         * 获取当前Map中指定的key所对应的value
         * 若给定的key在Map中不存在,则返回值为null
         */
        num = map.get("语文");
        System.out.println("语文:"+num);
        /*
         * 若Map中的value为包装类,那么在接收时应当使用包装类
         * 类型的变量接收,不要使用基本类型,因为会引发自动拆箱,
         * 若返回的value是null就会触发空指针异常。
         */
        num = map.get("体育");
        System.out.println("体育:"+num);
        /*
         * boolean containsKey(K k)
         * 判断当前Map是否包含给定的key
         *
         * boolean containsValue(V v)
         * 判断当前Map是否包含给定的value
         */
        boolean c = map.containsKey("体育");
        System.out.println("包含key:"+c);

        /*
         * 遍历所有的key
         * Set keySet()
         * 将当前Map中的所有key存入一个Set集合后返回。
         */
        Set keySet = map.keySet();
        for(String key : keySet){
            System.out.println("key:"+key);
        }
        
        /*
         * 遍历所有key-value对:
         * Set entrySet()
         * Entry是Map的内部类,其每一个实例用于表示Map中的一组键值对。
         * 该方法会将所有的key-value对以若干Entry
         * 实例的形式存入一个Set集合后返回。
         */
        Set<Entry<String,Integer>> entrySet = map.entrySet();
        
        for(Entry<String,Integer> e:entrySet){
            String key = e.getKey();
            Integer value = e.getValue();
            System.out.println(key+":"+value);
        }
        
        /*
         * 遍历所有的value
         * Collection values()
         * 将当前Map中所有的value存入一个集合后返回。
         */
        Collection values = map.values();
        for(Integer value : values){
            System.out.println("value:"+value);
        }
        /*
         * V remove(K k)
         * 删除指定的key所对应的键值对。
         * 返回值为对应的value
         */
        Integer num = map.remove("英语");
        System.out.println(map);
        System.out.println("old:"+num);            
    }
}
/**
 * 当一个类作为HashMap的key使用时,其
 * 重写的equals方法与hashcode方法要遵循
 * 一定的原则,不妥善重写会影响HashMap的查询性能
 * 原则:
 * 1:当我们重写equals方法时,就应当连同重写hashcode
 * 2:hashcode方法返回的值应当是一个稳定的值,即:
 *   当参与equals比较的属性的值没有发生改变的前提
 *   下,多次调用hashcode方法返回的数字应当不变。
 * 3:hashcode方法应当与equals方法的返回值具有一致性,即:
 *   当两个对象equals比较结果为true,那么他们的hashcode值也应当相同。
 *   返过来虽然不是必须的,但尽量保证当两个对象hashcode值相同时,
 *   equals比较也为true,否则会在HashMap中出现链表,影响查询效率。  
 */
public class Key {
    private int x;
    private int y;
    @Override
    public int hashCode() {
        final int prime = 31;
        int result = 1;
        result = prime * result + x;
        result = prime * result + y;
        return result;
    }
    @Override
    public boolean equals(Object obj) {
        if (this == obj)
            return true;
        if (obj == null)
            return false;
        if (getClass() != obj.getClass())
            return false;
        Key other = (Key) obj;
        if (x != other.x)
            return false;
        if (y != other.y)
            return false;
        return true;
    }        
}
/**
 * java.util.Queue队列
 * 可以存放一组元素,但是存取元素必须遵循先进先出原则
 * 常用实现类:java.util.LinkedList
 *
 * @author Administrator
 *
 */
public class QueueTest{
    public static void main(String[] args) {
        Queue queue= new LinkedList();
        
        /*
         * boolean offer(E e)
         * 向队尾追加元素
         */
        queue.offer("one");
        queue.offer("two");
        System.out.println(queue);
        
        /*
         * E poll()
         * 获取队首元素,当获取后该元素即从队列中被删除了。
         * 所以该方法是出队操作。
         */
        String str = queue.poll();
        System.out.println(str);
        System.out.println(queue);
        
        /*
         * E peek()
         * 引用队首元素,与poll方法不同,
         * 虽然可以获取队首元素,但是不做出队操作。
         */
        str = queue.peek();
        System.out.println(str);
        System.out.println(queue);
        
        /*
         * 遍历队列
         */
        System.out.println("开始遍历!");
        while(queue.size()>0){
            str = queue.poll();
            System.out.println(str);
        }
        System.out.println(queue);                        
    }
}

/**
 * 栈
 * 存储一组元素,但是存取元素必须遵循先进后出原则
 * java没有为栈专门提供接口,而是使用双端队列来实现。
 * 双端队列:两端都可以进出元素的队列。
 *
 * 栈:当需要实现诸如"后退"相关功能时,可以使用栈。
 * @author Administrator
 *
 */
public class StackDemo {
    public static void main(String[] args) {
        Deque stack = new LinkedList();
        
        stack.push("one");
        stack.push("two");        
        System.out.println(stack);        
        String str = stack.pop();
        System.out.println(str);
        System.out.println(stack);        
        while(stack.size()>0){
            str = stack.pop();
            System.out.println(str);
        }
        System.out.println(stack);                
    }
}

点赞
收藏
评论区
推荐文章
blmius blmius
3年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
皕杰报表之UUID
​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为
待兔 待兔
4个月前
手写Java HashMap源码
HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22
Jacquelyn38 Jacquelyn38
3年前
2020年前端实用代码段,为你的工作保驾护航
有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )
Wesley13 Wesley13
3年前
java8新特性
Stream将List转换为Map,使用Collectors.toMap方法进行转换背景:User类,类中分别有id,name,age三个属性。List集合,userList,存储User对象1、指定keyvalue,value是对象中的某个属性值。 Map<Integer,StringuserMap1userList.str
Stella981 Stella981
3年前
Android So动态加载 优雅实现与原理分析
背景:漫品Android客户端集成适配转换功能(基于目标识别(So库35M)和人脸识别库(5M)),导致apk体积50M左右,为优化客户端体验,决定实现So文件动态加载.!(https://oscimg.oschina.net/oscnet/00d1ff90e4b34869664fef59e3ec3fdd20b.png)点击上方“蓝字”关注我
Stella981 Stella981
3年前
JS 对象数组Array 根据对象object key的值排序sort,很风骚哦
有个js对象数组varary\{id:1,name:"b"},{id:2,name:"b"}\需求是根据name或者id的值来排序,这里有个风骚的函数函数定义:function keysrt(key,desc) {  return function(a,b){    return desc ? ~~(ak
Wesley13 Wesley13
3年前
35岁是技术人的天花板吗?
35岁是技术人的天花板吗?我非常不认同“35岁现象”,人类没有那么脆弱,人类的智力不会说是35岁之后就停止发展,更不是说35岁之后就没有机会了。马云35岁还在教书,任正非35岁还在工厂上班。为什么技术人员到35岁就应该退役了呢?所以35岁根本就不是一个问题,我今年已经37岁了,我发现我才刚刚找到自己的节奏,刚刚上路。
Wesley13 Wesley13
3年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_
Python进阶者 Python进阶者
10个月前
Excel中这日期老是出来00:00:00,怎么用Pandas把这个去除
大家好,我是皮皮。一、前言前几天在Python白银交流群【上海新年人】问了一个Pandas数据筛选的问题。问题如下:这日期老是出来00:00:00,怎么把这个去除。二、实现过程后来【论草莓如何成为冻干莓】给了一个思路和代码如下:pd.toexcel之前把这