JAVASE02-Unit05: 集合操作 —— 查找表

Posted 唐胜伟

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JAVASE02-Unit05: 集合操作 —— 查找表相关的知识,希望对你有一定的参考价值。

    Unit05: 集合操作 —— 查找表    

使用该类测试自定义元素的集合排序

package day05;
/**
 * 使用该类测试自定义元素的集合排序
 * @author adminitartor
 *
 */
public class Point implements Comparable<Point>{
    private int x;
    private int y;
    public Point(int x, int y) {
        super();
        this.x = x;
        this.y = y;
    }
    public int getX() {
        return x;
    }
    public void setX(int x) {
        this.x = x;
    }
    public int getY() {
        return y;
    }
    public void setY(int y) {
        this.y = y;
    }
    
    @Override
    public String toString() {
        return "("+x+","+y+")";
    }
    /**
     * 该方法的作用是用来判断当前对象this与
     * 参数给定的对象o之间比较大小的。
     * 返回值不关注具体取值,只关注取值范围,
     * 当:
     * 返回值>0:当前对象大于参数对象(this>o)
     * 返回值<0:当前对象小于参数对象
     * 返回值=0:两个对象相等
     */
    public int compareTo(Point o) {
        int len = this.x*this.x+this.y*this.y;
        int olen = o.x*o.x+o.y*o.y;
        return len-olen;
    }
    
    
}
Point.java

排序自定义类型元素

package day05;

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

/**
 * 排序自定义类型元素
 * @author adminitartor
 *
 */
public class SortListDemo1 {
    public static void main(String[] args) {
        List<Point> list
            = new ArrayList<Point>();
        list.add(new Point(3,4));
        list.add(new Point(1,2));
        list.add(new Point(5,7));
        list.add(new Point(3,1));
        list.add(new Point(6,2));
        System.out.println(list);
        /*
         * Collections的sort方法要求集合元素
         * 必须实现Comparable接口。
         * 侵入性
         */
        Collections.sort(list);
        System.out.println(list);
    }
}
SortListDemo1.java

排序字符串

package day05;

import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;

/**
 * 排序字符串
 * @author adminitartor
 *
 */
public class SortListDemo2 {
    public static void main(String[] args) {
        List<String> list
            = new ArrayList<String>();
        
        list.add("苍#null");
        list.add("范老师");
        list.add("小泽老师");
        
        System.out.println(list);
        
        Comparator<String> com 
            = new Comparator<String>(){
                public int compare(String o1, String o2) {
                    return o1.length()-o2.length();
                }
            
        };
        
        Collections.sort(list,com);
        System.out.println(list);
        
    }
}
SortListDemo2.java

队列也可以存储一组元素,但是存取元素必须遵循

package day05;

import java.util.LinkedList;
import java.util.Queue;

/**
 * java.util.Queue
 * 队列
 * 队列也可以存储一组元素,但是存取元素必须遵循
 * 先进先出原则。
 * @author adminitartor
 *
 */
public class QueueDemo {
    public static void main(String[] args) {
        Queue<String> queue
            = new LinkedList<String>();
        /*
         * boolean offer(E e)
         * 入队操作,向队列末尾追加新元素
         */
        queue.offer("one");
        queue.offer("two");
        queue.offer("three");
        queue.offer("four");
        
        System.out.println(queue);
        /*
         * E poll()
         * 获取队首元素,获取后该元素即从队列
         * 中被移除。
         */
        String str = queue.poll();
        System.out.println(str);
        System.out.println(queue);
        
        /*
         * E peek()
         * 引用队首元素,获取后但不从队列中删除
         */
        str = queue.peek();
        System.out.println(str);
        System.out.println(queue);
        
        //新循环遍历
        for(String s : queue){
            System.out.println(s);
        }
        System.out.println(queue);
        
        System.out.println("自行遍历开始!");
        while(queue.size()>0){
            str = queue.poll();
            System.out.println(str);
        }
        System.out.println("遍历完毕了!");
        System.out.println(queue);
    }
}
QueueDemo.java

栈结构存储一组元素,但是存取需要遵循先进后出原则

package day05;

import java.util.Deque;
import java.util.LinkedList;

/**
 * 栈
 * 栈结构存储一组元素,但是存取需要遵循先进后出原则
 * 
 * java.util.Deque
 * 双端队列,两端都可以进出队的队列,是Queue的
 * 子类。
 * Deque接口规定了两端进出队的方法。
 * 当仅调用从一端进出队的方法时,就形成了栈的结构特点
 * 
 * @author adminitartor
 *
 */
public class Stack {
    public static void main(String[] args) {
        Deque<String> stack
            = new LinkedList<String>();
        
        stack.offer("one");
        stack.offer("two");
        System.out.println(stack);//[one,two]
        
        stack.offerLast("three");
        System.out.println(stack);//[one,two,three]
        
        stack.offerFirst("four");
        System.out.println(stack);//[four,one,two,three]
        
        String str = stack.poll();
        System.out.println(str);//four
        
        str = stack.pollFirst();
        System.out.println(str);//one
        
        str = stack.pollLast();
        System.out.println(str);//three
        
        System.out.println(stack);
        
        /*
         * 双端队列提供了入栈与出栈的方法
         */
        /*
         * void push(E e)
         * 入栈操作
         * 最后入栈的元素会在栈顶
         */
        stack.push("three");
        stack.push("four");
        stack.push("five");
        System.out.println(stack);
        
        /*
         * E pop()
         * 出栈操作
         * 获取栈顶元素后该元素即从栈中被移除
         */
        str = stack.pop();
        System.out.println(str);
        System.out.println(stack);
        
        str = stack.peek();
        System.out.println(str);
        System.out.println(stack);
        
        for(String s : stack){
            System.out.println(s);
        }
        System.out.println(stack);
        
        
    }
}
Stack.java

删除Map中的元素

package day05;

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

/**
 * 删除Map中的元素
 * @author adminitartor
 *
 */
public class Map_Remove {
    public static void main(String[] args) {
        Map<String, Integer> map 
            = new HashMap<String, Integer>();
        map.put("语文", 99);
        map.put("数学", 98);
        map.put("英语", 97);
        map.put("物理", 96);
        map.put("化学", 99);
        
        System.out.println(map);
        /*
         * 删除数学这一条记录
         * V remove(K k)
         * 根据给定的key将对应的key-value对
         * 从Map中删除,返回值为该key对应的value
         */
        Integer v = map.remove("数学");
        System.out.println(map);
        System.out.println(v);
    }
}
Map_Remove.java
package day05;

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

/**
 * 删除Map中的元素
 * @author adminitartor
 *
 */
public class Map_Remove {
    public static void main(String[] args) {
        Map<String, Integer> map 
            = new HashMap<String, Integer>();
        map.put("语文", 99);
        map.put("数学", 98);
        map.put("英语", 97);
        map.put("物理", 96);
        map.put("化学", 99);
        
        System.out.println(map);
        /*
         * 删除数学这一条记录
         * V remove(K k)
         * 根据给定的key将对应的key-value对
         * 从Map中删除,返回值为该key对应的value
         */
        Integer v = map.remove("数学");
        System.out.println(map);
        System.out.println(v);
    }
}

判断Map是否包含给定元素

package day05;

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

/**
 * 判断Map是否包含给定元素
 * @author adminitartor
 *
 */
public class Map_Contains {
    public static void main(String[] args) {
        Map<String, Integer> map 
            = new HashMap<String, Integer>();
        map.put("语文", 99);
        map.put("数学", 98);
        map.put("英语", 97);
        map.put("物理", 96);
        map.put("化学", 99);
        
        boolean ck = map.containsKey("语文");
        System.out.println("key是否包含:"+ck);
        
        boolean cv = map.containsValue(99);
        System.out.println("value是否包含:"+cv);
    }
}
Map_Contains.java
package day05;

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

/**
 * 判断Map是否包含给定元素
 * @author adminitartor
 *
 */
public class Map_Contains {
    public static void main(String[] args) {
        Map<String, Integer> map 
            = new HashMap<String, Integer>();
        map.put("语文", 99);
        map.put("数学", 98);
        map.put("英语", 97);
        map.put("物理", 96);
        map.put("化学", 99);
        
        boolean ck = map.containsKey("语文");
        System.out.println("key是否包含:"+ck);
        
        boolean cv = map.containsValue(99);
        System.out.println("value是否包含:"+cv);
    }
}

HashMap的Key对于HashMap的影响

package day05;
/**
 * HashMap的Key对于HashMap的影响
 * 影响HashMap的查询性能的主要因素是在HashMap中
 * 出现链表。
 * 那么作为Key的元素的hashcode值与equals比较的结果
 * 在Map中产生链表有很大的作用。要妥善重写他们。
 * 
 * API手册中Object对于hashcode方法与equals的重写
 * 有如下要求:
 * 1:当我们重写一个类的equals方法,就应当连同重写
 *   hashcode方法
 * 2:hashcode应当与equals比较结果一致,即:
 *   当两个对象equals比较结果为true时,他们的
 *   hashcode方法返回的数字应当相等。反之亦然。
 *   因为当两个作为key的对象hashcode相同但是
 *   equals比较不相同时,会在HashMap中产生链表,
 *   影响散列表查询性能。
 * 
 * 
 * @author adminitartor
 *
 */
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;
    }
    
    
}
Key.java

Map 查找表,以key-value对的形式存储元素

package day05;

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

/**
 * java.util.Map
 * Map 查找表
 * 以key-value对的形式存储元素
 * 常用实现类:HashMap 散列表(散列算法实现)
 * @author adminitartor
 *
 */
public class Map_Put_Get {
    public static void main(String[] args) {
        /*
         * Map需要指定两个泛型,分别指定key与
         * value的类型
         */
        Map<String,Integer> map 
            = new HashMap<String,Integer>();
        
        /*
         * Map要求key不允许重复(equals比较)
         * V put(K k,V v)
         * 将给定的key-value对存入到Map中,
         * 若key在map中已经存在了,则是替换value
         * 操作,返回至则为被替换的value
         * 若key不存在,则返回值为NULL
         */
        map.put("语文", 99);
        map.put("数学", 98);
        map.put("英语", 97);
        map.put("物理", 96);
        /*
         * 获取put返回值时,若返回值为包装类类型
         * 注意不要用基本类型接收,避免自动拆箱
         * 引起的空指针异常:
         * int n = map.put("化学",99);
         * 因为若"化学"作为key在Map中不存在,put
         * 返回值为NULL,那么对其拆箱会引发空指针
         */
        Integer n = map.put("化学", 99);
        
        System.out.println(map);
        System.out.println(n);
        
        //重复的key是替换value操作
        n = map.put("语文", 88);
        System.out.println(map);
        System.out.println(n);
        
        
        /*
         * V get(K k)
         * 根据给定的key获取对应的value
         * 若给定的key不存在,则返回值为null
         */
        n = map.get("数学");
        System.out.println("数学:"+n);
        
        n = map.get("体育");
        System.out.println("体育:"+n);
        
    }
}
Map_Put_Get.java
package day05;

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

/**
 * java.util.Map
 * Map 查找表
 * 以key-value对的形式存储元素
 * 常用实现类:HashMap 散列表(散列算法实现)
 * @author adminitartor
 *
 */
public class Map_Put_Get {
    public static void main(String[] args) {
        /*
         * Map需要指定两个泛型,分别指定key与
         * value的类型
         */
        Map<String,Integer> map 
            = new HashMap<String,Integer>();
        
        /*
         * Map要求key不允许重复(equals比较)
         * V put(K k,V v)
         * 将给定的key-value对存入到Map中,
         * 若key在map中已经存在了,则是替换value
         * 操作,返回至则为被替换的value
         * 若key不存在,则返回值为NULL
         */
        map.put("语文", 99);
        map.put("数学", 98);
        map.put("英语", 97);
        map.put("物理", 96);
        /*
         * 获取put返回值时,若返回值为包装类类型
         * 注意不要用基本类型接收,避免自动拆箱
         * 引起的空指针异常:
         * int n = map.put("化学",99);
         * 因为若"化学"作为key在Map中不存在,put
         * 返回值为NULL,那么对其拆箱会引发空指针
         */
        Integer n = map.put("化学", 99);
        
        System.out.println(map);
        System.out.println(n);
        
        //重复的key是替换value操作
        n = map.put("语文", 88);
        System.out.println(map);
        System.out.println(n);
        
        
        /*
         * V get(K k)
         * 根据给定的key获取对应的value
         * 若给定的key不存在,则返回值为null
         */
        n = map.get("数学");
        System.out.println("数学:"+n);
        
        n = map.get("体育");
        System.out.println("体育:"+n);
        
    }
}

遍历Map

package day05;

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

/**
 * 遍历Map
 * 遍历Map有三种方式:
 * 1:遍历所有的key
 * 2:遍历每一组键值对
 * 3:遍历所有的value(相对不常用)
 * @author adminitartor
 *
 */
public class MapDemo {
    public static void main(String[] args) {
        Map<String, Integer> map 
            = new HashMap<String, Integer>();
        map.put("语文", 99);
        map.put("数学", 98);
        map.put("英语", 97);
        map.put("物理", 96);
        map.put("化学", 99);
        
        /*
         * 遍历所有的key
         * Set<K> keySet()
         * 将当前Map中所有的key存入一个Set集合
         * 后返回。遍历该集合就等于遍历了Map中
         * 所有的key
         */
        Set<String> keySet = map.keySet();
        for(String key : keySet){
            System.out.println("key:"+key);
        }
        
        /*
         * 遍历每一组键值对
         * Map中每一组键值对由Map的内部类Entry
         * 的一个实例保存。
         * Set<Entry> entrySet()
         * 该方法会将当前Map中每组键值对(若干的
         * 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);
        }
        
        /*
         * Collection<V> values()
         * 该方法会返回当前Map中所有的value
         */
        Collection<Integer> values
            =    map.values();
        for(Integer value : values){
            System.out.println("value:"+value);
        }
    }
}
MapDemo.java

 

package day05;

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

/**
 * 遍历Map
 * 遍历Map有三种方式:
 * 1:遍历所有的key
 * 2:遍历每一组键值对
 * 3:遍历所有的value(相对不常用)
 * @author adminitartor
 *
 */
public class MapDemo {
    public static void main(String[] args) {
        Map<String, Integer> map 
            = new HashMap<String, Integer>();
        map.put("语文", 99);
        map.put("数学", 98);
        map.put("英语", 97);
        map.put("物理", 96);
        map.put("化学", 99);
        
        /*
         * 遍历所有的key
         * Set<K> keySet()
         * 将当前Map中所有的key存入一个Set集合
         * 后返回。遍历该集合就等于遍历了Map中
         * 所有的key
         */
        Set<String> keySet = map.keySet();
        for(String key : keySet){
            System.out.println("key:"+key);
        }
        
        /*
         * 遍历每一组键值对
         * Map中每一组键值对由Map的内部类Entry
         * 的一个实例保存。
         * Set<Entry> entrySet()
         * 该方法会将当前Map中每组键值对(若干的
         * 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);
        }
        
        /*
         * Collection<V> values()
         * 该方法会返回当前Map中所有的value
         */
        Collection<Integer> values
            =    map.values();
        for(Integer value : values){
            System.out.println("value:"+value);
        }
    }
}

以上是关于JAVASE02-Unit05: 集合操作 —— 查找表的主要内容,如果未能解决你的问题,请参考以下文章

JAVASE02-Unit03: 日期操作 集合框架

JAVASE02-Unit08: 文本数据IO操作 异常处理

JAVASE02-Unit07: 基本IO操作 文本数据IO操作

JAVASE02-Unit01: API文档 字符串基本操作

JAVASE02-Unit010: 多线程基础 TCP通信

JAVASE02-Unit012: Unit07: XML语法 XML解析