Map查找表,队列和栈

存入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<K> keySet();遍历所有key-value对Set<Entry> entrySet();遍历所有的value:Collection<V> 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<K> keySet()
         * 将当前Map中的所有key存入一个Set集合后返回。
         */
        Set<String> keySet = map.keySet();
        for(String key : keySet){
            System.out.println("key:"+key);
        }
        
        /*
         * 遍历所有key-value对:
         * Set<Entry> 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<V> values()
         * 将当前Map中所有的value存入一个集合后返回。
         */
        Collection<Integer> 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<String> queue= new LinkedList<String>();
        
        /*
         * 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<String> stack = new LinkedList<String>();
        
        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);                
    }
}

点赞
收藏

评论区

加载中...

相关推荐

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

Oracle 分组与拼接字符串同时使用

SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(

MySQL部分从库上面因为大量的临时表tmp_table造成慢查询

背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_

皕杰报表之UUID

​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为

手写Java HashMap源码

HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22

2020年前端实用代码段,为你的工作保驾护航

有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )