数据结构(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
- 数据结构(Java)——Set和Map的应用
- ES6中Set和Map数据结构的基本概念及应用
- ES6 —(Set 和 Map 数据结构)
- 【Java】Java集合框架源码和数据结构简要分析——Set和Map
- Set和Map数据结构
- Set和Map数据结构
- Set和Map数据结构
- [数据结构]Map和Set
- Set和Map数据结构
- Set和Map数据结构
- Set和Map数据结构
- Set和Map数据结构
- JAVA 里的数据结构 Set List Map
- Java重要的数据结构Set,List,Map
- ES6 -- 新的数据结构:Set和Map
- ES6的数据结构set 和 map
- ES6入门——Set和Map数据结构
- Java—Set,List,Map的区别
- oracle数据恢复----------之oracle各种闪回操作
- Spring面试总结
- hue下oozie调度sqoop
- 南大软院大神养成计划--day17
- LD_PRELOAD
- 数据结构(Java)——Set和Map的应用
- Apache POI
- 299. Bulls and Cows
- 谨慎的覆盖clone
- 欢迎使用CSDN-markdown编辑器
- mount.nfs: access denied by server while mounting localhost:/home/xuwq/minilinux/system
- JMS简介与ActiveMQ实战
- Xmlns与targetNamespace 的区别
- Xcode不同版本的下载地址