数据结构(Java)——Set和Map的应用

来源:互联网 发布:搭接网络时间参数计算 编辑:程序博客网 时间:2024/06/07 00:59

感情里,总会有分分合合; 生命里,总会有来来去去。 学会: 浅喜欢,静静爱,深深思索,淡淡释怀。

1.概述

 1.Set定义为一种无重复元素的集合概念。Set集合是对象的唯一集合,通常用于确定某个元素是否是集合的成员。 2.Map集合是创建了关键字与值之间关系的集合。给定关键字,MAP集合提供了检索其值 的高效方式。MAP集合的关键字必须是唯一的。给定关键字Map集合提供了检索其值的高效方式。Map集合的关键字必须是唯一的,每个关键字只对应于一个值。然而这并不一定是一对一的映射关系,多个关键字可能映射到同一个对象。Map的关键字不一定是字符串,但多数情况下是字符串。Map集合的关键字和值可以是任意类型的对象。

2.Set的应用举例

blockedDomains.txt

dontgothere.comohno.orgbadstuff.combadstuff.orgbadstuff.netwhatintheworld.comnotinthislifetime.orgletsnot.comeeewwwwww.com
package ds.java.ch13;import java.io.File;import java.io.FileNotFoundException;import java.util.Scanner;import java.util.TreeSet;/**  * @author LbZhang * @version 创建时间:2015年12月2日 上午11:12:47  * @description * 使用Set集合:域阻塞器 * 在一个阻塞域列表中测试web站点域。这里使用一个简单的阻塞域列表,但当使用TreeSet时, * 对某个域的检测是用logN步,不是n步完成的。 */public class DomainBlocker {    private  TreeSet<String> blocksSet;    /**     * 构造域阻塞器     * @throws FileNotFoundException     */    public DomainBlocker() throws FileNotFoundException{        blocksSet = new TreeSet<String>();        File inputFile = new File("blockedDomains.txt");        Scanner scan = new Scanner(inputFile);        while(scan.hasNext()){            blocksSet.add(scan.nextLine());        }    }    public boolean domainIsBlocked(String domain){        return blocksSet.contains(domain);    }    /**     * 用于测试的主函数     * @param args     * @throws FileNotFoundException      */    public static void main(String[] args) throws FileNotFoundException {        DomainBlocker dblock = new DomainBlocker();        Scanner scan = new Scanner(System.in);        String domain;        do{            System.out.print("Enter a domain (DONE to quit): ");            domain = scan.nextLine();            if (!domain.equalsIgnoreCase("DONE"))            {                if (dblock.domainIsBlocked(domain))                    System.out.println("That domain is blocked.");                else                    System.out.println("That domain is fine.");            }        }while(!domain.equalsIgnoreCase("DONE"));    }}

3.Map的应用举例

销售统计核算

package ds.java.ch13;/** *产品实体类的构建 */public class Product implements Comparable<Product> {    private String productCode;    private int sales;    /**     * 产品编号的设计     * @param productCode     */    public Product(String productCode) {        this.productCode = productCode;        this.sales = 0;    }    /**     * 返回产品编号     *      * @return the product code     */    public String getProductCode() {        return productCode;    }    /**     * 增加产品的销量     */    public void incrementSales() {        sales++;    }    /**     * 对比产品编号是否相同     *      * @param other     *            the other product     * @return an integer code result     */    public int compareTo(Product obj) {        return productCode.compareTo(obj.getProductCode());    }    /**     *返回产品销量的字符串     *      * @return a string representation of the product     */    public String toString() {        return productCode + "\t(" + sales + ")";    }}
package ds.java.ch13;import java.io.File;import java.io.IOException;import java.util.Scanner;import java.util.TreeMap;/** * 销售统计核算 * @author MrLBZ * */public class ProductSales{    /**     * Processes product sales data and prints a summary sorted by     * product code.     */    public static void main(String[] args) throws IOException    {        TreeMap<String, Product> sales = new TreeMap<String, Product>();        Scanner scan = new Scanner(new File("salesData.txt"));        String code;        Product product;        while (scan.hasNext())        {            code = scan.nextLine();            product = sales.get(code);            if (product == null)                sales.put(code, new Product(code));            else                product.incrementSales();        }        System.out.println("Products sold this period:");        for (Product prod : sales.values())            System.out.println(prod);    }}

salesData.txt 部分数据展示

OB311HR588DX555EW231TT232TJ991HR588TT232GB637BV693CB329

补充参考:

关于TreeMap和HashMap的比较
HashMap通过hashcode对其内容进行快速查找,而 TreeMap中所有的元素都保持着某种固定的顺序,如果你需要得到一个有序的结果你就应该使用TreeMap(HashMap中元素的排列顺序是不固定的)。
HashMap 非线程安全 TreeMap 非线程安全.

HashMap:基于哈希表实现。使用HashMap要求添加的键类明确定义了hashCode()equals()[可以重写hashCode()和equals()],为了优化HashMap空间的使用,您可以调优初始容量和负载因子。 (1)HashMap(): 构建一个空的哈希映像 (2)HashMap(Map m): 构建一个哈希映像,并且添加映像m的所有映射 (3)HashMap(int initialCapacity): 构建一个拥有特定容量的空的哈希映像 (4)HashMap(int initialCapacity, float loadFactor): 构建一个拥有特定容量和加载因子的空的哈希映像 TreeMap:基于红黑树实现。TreeMap没有调优选项,因为该树总处于平衡状态。 (1)TreeMap():构建一个空的映像树 (2)TreeMap(Map m): 构建一个映像树,并且添加映像m中所有元素 (3)TreeMap(Comparator c): 构建一个映像树,并且使用特定的比较器对关键字进行排序 (4)TreeMap(SortedMap s): 构建一个映像树,添加映像树s中所有映射,并且使用与有序映像s相同的比较器排序 

两种常规Map性能
HashMap:适用于在Map中插入、删除和定位元素。
Treemap:适用于按自然顺序或自定义顺序遍历键(key)。

0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 4岁儿童手指脱皮怎么办 孩子老是不会写2怎么办 宝宝胃浅容易吐怎么办 农村户口小孩去城里读书怎么办 小孩从城市回农村读书怎么办 天冷了怎么办教案反思 小孩上幼儿园不爱学习怎么办 曰光灯管监控要反光怎么办 立邦乳胶漆墙面脏了怎么办 橱柜门黑色边颜色花了怎么办 地板上有真实漆怎么办 吸了泡泡球的气怎么办 办公室上班坐着太累怎么办 金雀盆景生虫怎么办 租的房子墙脏怎么办 租住个厕所对着卧室怎么办 农村的房子没有房产证怎么办 墙面漆颜色深了怎么办 浴室门对卧室门怎么办 卧室40多个平方太大怎么办 卧室门洞太窄了怎么办 刷漆的墙面脏了怎么办 卧室颜色刷重了怎么办 感觉房子买小了怎么办 淋浴房一边是窗怎么办 1岁宝宝让狗咬了怎么办 2岁宝宝让狗咬了怎么办 带4个小孩只买两张儿童票怎么办 墙面补漆颜色有色差怎么办 墙壁刷的乳胶漆颜色不满意怎么办 门被水泡的鼓了怎么办 定制衣柜做大了怎么办 找平的地面高了怎么办 卫生间推拉门锁坏了怎么办 阳台推拉门框安装斜了怎么办? 电子门钥匙坏了怎么办 门的保险锁坏了怎么办 小区楼宇门坏了怎么办 门的锁坏了怎么办 汽车门把锁坏了怎么办 厨柜门上的板板掉了怎么办