当前位置: 首页 > news >正文

衡水微信网站建设百度官网app

衡水微信网站建设,百度官网app,辽宁建设工程信息网查询系统,电商网站建设需要目录 HashTable基本介绍 Hashtable和HashMap对比 Properties Properties基本介绍 应该如何选择集合 TreeSet源码分析 HashTable基本介绍 1)存放的元素是键值对:即K-V 2)hashtable的键和值都不能为null,否则会抛出NullPointerException 3)hashTab…

目录

HashTable基本介绍

Hashtable和HashMap对比

Properties

Properties基本介绍

应该如何选择集合

TreeSet源码分析


HashTable基本介绍

1)存放的元素是键值对:即K-V

2)hashtable的键和值都不能为null,否则会抛出NullPointerException

3)hashTable 使用方法基本上和HashMap一样

4)hashTable 是线程安全的(synchronized),hashMap是线程不安全的

5)简单看下底层结构

代码演示:

注意事项:

1.不能加入null 无论是key 还是 value 否则会报空指针异常

package idea.chapter14.map_;import java.util.Hashtable;@SuppressWarnings({"all"})
public class HashTableExercise {public static void main(String[] args) {Hashtable table = new Hashtable();//oktable.put("john", 100); //ok//HashTable的键和值都不能为null否则会报空指针异常//不能加入null 无论是key 还是 value 否则会报空指针异常//table.put(null, 100); //异常 NullPointerException//table.put("john", null);//异常 NullPointerExceptiontable.put("lucy", 100);//oktable.put("lic", 100);//oktable.put("lic", 88);//替换table.put("hello1", 1);table.put("hello2", 1);table.put("hello3", 1);table.put("hello4", 1);table.put("hello5", 1);table.put("hello6", 1);System.out.println(table);//简单说明一下Hashtable的底层//1. 底层有数组 Hashtable$Entry[] 初始化大小为 11//2. 临界值 threshold 8 = 11 * 0.75//3. 扩容: 按照自己的扩容机制来进行即可.//4. 执行 方法 addEntry(hash, key, value, index); 添加K-V 封装到Entry//5. 当 if (count >= threshold) 满足时,就进行扩容//6. 扩容机制是 把原来的大小乘2在加1 int newCapacity = (oldCapacity << 1) + 1; 的大小扩容.}
}

Hashtable和HashMap对比

版本线程安全(同步)效率允许null键null值
HashMap1.2不安全可以
Hashtable1.0安全不可以

Properties

Properties基本介绍

1.Properties类继承自Hashtable类并且实现了Map接口,也是使用一种键值对的形式来保存数据。

2.他的使用特点和Hashtable类似

3.Properties 还可以用于 从xxx.properties文件中,加载数据到Properties类对象,并进行读取和修改

4.说明:工作后 xxx.properties文件通常作为配置文件,会在IO流的时候讲解

代码演示:

package idea.chapter14.map_;import java.util.Properties;@SuppressWarnings({"all"})
public class Properties_ {public static void main(String[] args) {//1. Properties 继承了  Hashtable//2. 可以通过 k-v 存放数据,当然key 和 value 不能为 nullProperties properties = new Properties();//因为Properties继承了HashTable 所以Properties的key和value都不能为null否则会报空指针异常//properties.put(null, "abc");//抛出 空指针异常//properties.put("abc", null); //抛出 空指针异常properties.put("john", 100);//k-vproperties.put("lucy", 100);properties.put("lic", 100);properties.put("lic", 88);//如果有相同的key , value被替换System.out.println("properties=" + properties);//通过k 获取对应值System.out.println(properties.get("lic"));//88//删除properties.remove("lic");System.out.println("properties=" + properties);//修改properties.put("john", "约翰");System.out.println("properties=" + properties);}
}

应该如何选择集合

在开发中,选择什么集合实现类,主要取决于业务操作特点,然后根据集合实现类特性进行选择,分析如下:

1)先判断存储的类型(一组对象[单列]或一组键值对[双列])

2)一组对象[单列]:Collection接口

允许重复:

        List ​ 增删多:LinkedList [底层维护了一个双向链表] ​

        改查多:ArrayList[底层维护 Object类型的可变数组] ​

不允许重复:Set

         ​ 无序:HashSet[底层是HashMap,维护了一个哈希表 即(数组+链表+红黑树)]

        排序:TreeSet ​ 插入和取出顺序一致:LinkedHashSet,维护数组+双向链表

3)一组键值对[双列]:Map ​

键无序:HashMap[底层是:哈希表jdk7:数组+链表,jdk8:数组+链表+红黑树]

​ 键排序:TreeMap

​ 键插入和取出顺序一致:LinkedHashMap ​

读取文件 Properties

TreeSet源码分析

代码演示:

源码分析:

//源码分析:
/*
1. 构造器把传入的比较器(comparator)对象,赋给了 TreeSet的底层的 TreeMap的属性this.comparatorpublic TreeMap(Comparator<? super K> comparator) {this.comparator = comparator;}2. 在 调用 treeSet.add("tom"), 在底层会执行到Comparator<? super K> cpr = comparator;//把我们传入的匿名对象赋给cpr因为我们传入了一个匿名内部类 所以comparator不为空 就会进入 do while循环if (cpr != null) {//cpr 就是我们的匿名内部类(对象)do {parent = t;cmp = cpr.compare(key, t.key);//动态绑定到我们的匿名内部类(对象)compareif (cmp < 0)t = t.left;else if (cmp > 0)t = t.right;else //如果相等,即返回0,这个Key就没有加入return t.setValue(value);} while (t != null);}*/
package idea.chapter14.set_;import java.util.Comparator;
import java.util.TreeSet;/*** TreeSet源码分析*/
@SuppressWarnings({"all"})
public class TreeSet_ {public static void main(String[] args) {//1. 当我们使用无参构造器,创建TreeSet时,仍然是无序的//2. 希望添加的元素是,按照字符串大小来排序//3. 使用TreeSet 提供的一个构造器,可以传入一个比较器(匿名内部类)并指定排序规则//4. 看源码//源码分析:/*1. 构造器把传入的比较器(comparator)对象,赋给了 TreeSet的底层的 TreeMap的属性this.comparatorpublic TreeMap(Comparator<? super K> comparator) {this.comparator = comparator;}2. 在 调用 treeSet.add("tom"), 在底层会执行到Comparator<? super K> cpr = comparator;//把我们传入的匿名对象赋给cpr因为我们传入了一个匿名内部类 所以comparator不为空 就会进入 do while循环if (cpr != null) {//cpr 就是我们的匿名内部类(对象)do {parent = t;cmp = cpr.compare(key, t.key);//动态绑定到我们的匿名内部类(对象)compareif (cmp < 0)t = t.left;else if (cmp > 0)t = t.right;else //如果相等,即返回0,这个Key就没有加入return t.setValue(value);} while (t != null);}*///        TreeSet treeSet = new TreeSet();//使用一个有参数的构造器,传入一个比较器,就可以按照我们指定的规则来进行排序TreeSet treeSet = new TreeSet(new Comparator() {@Overridepublic int compare(Object o1, Object o2) {//下面 调用String的 compareTo方法进行字符串大小比较//要求加入的元素,按照长度大小排序//return ((String) o2).compareTo((String) o1);//底层会有do while循化依次进行比较  根据我们全入的方法而定return ((String) o1).length() - ((String) o2).length();}});//添加数据.treeSet.add("jack");treeSet.add("tom");//3treeSet.add("sp");treeSet.add("a");treeSet.add("abc");//3因为我们是按照字符串的长度进行比较,因此abc不会添加成功System.out.println("treeSet=" + treeSet);}
}

http://www.tj-hxxt.cn/news/34277.html

相关文章:

  • 上海猎头公司排行榜优化营商环境的意义
  • 网站采集功能aso优化前景
  • 企业网站建设好的案例西安网络推广外包公司
  • 厚街网站建设公司利尔化学股票最新消息
  • 济南手机网站建设搜索引擎优化的意思
  • 公司网站模板源代码seo搜索引擎优化是通过优化答案
  • 北京网站设计成功a刻网络推广seo怎么做
  • 做调查问卷赚钱哪个网站好域名注册1元
  • 怎么做打赏看视频的网站刷网站关键词工具
  • 上海网站建设设计公司排名seo资源网站排名
  • wordpress 有字库企业网站seo方案
  • 东莞网站建设设计苏州关键词排名系统
  • 网站做伪原创收录登封网络推广
  • 网站建设卖东西重庆网站到首页排名
  • 长沙做网站a微联讯点很好seo优化关键词放多少合适
  • 县 两学一做网站网络营销形式
  • 企业网站制作建设黄页88推广多少钱一年
  • 深圳网站开发建设永州网站seo
  • 设计网站公司只找亿企邦今天有哪些新闻
  • 山东网站建设的方案百度推广用户注册
  • 日本设计设计网站怎么优化网站关键词排名
  • 欧赛网站建设建网站的软件
  • 商业网站模板关键词排名霸屏代做
  • app投放渠道有哪些优化落实疫情防控
  • 域名注册官网免费seo怎么优化软件
  • 网站中文域名怎么做发布软文广告
  • 小型企业网站建设毕业论文百度开户公司
  • 浙江网站备案查询河北seo技术培训
  • 做网站跟app谷歌浏览器下载电脑版
  • 大连城市建设网站windows优化大师要会员