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

衡水微信网站建设最新国内新闻重大事件

衡水微信网站建设,最新国内新闻重大事件,聊城wap网站制作,龙华企业网站建设目录 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.hrbkazy.com/news/29310.html

相关文章:

  • 惠州外包网站建设成都排名seo公司
  • 做产品代理上哪个网站好网站页面怎么优化
  • 南阳住房和城乡建设管理局网站优化大师官方
  • 池州海绵城市建设官方网站网易搜索引擎
  • php wap新闻网站源码seo批量建站
  • 跨境网站有哪些俄罗斯引擎搜索
  • 哈尔滨网站设计人网站开发语言
  • 怎么在国际网站做推广深圳网站建设 手机网站建设
  • 电脑网站建设百度百度一下就知道
  • 做英文网站违法吗模板建站网页
  • 教育 wordpress模板下载地址站群优化公司
  • 大连 响应式网站制作深圳网站建设找哪家公司好
  • 公司官方网站制作百度精准搜索
  • wordpress 主题 地图seo网站快速排名软件
  • 做景观素材有哪几个网站湖南百度推广公司
  • 做外贸哪些网站可以发免费信息网络营销方式
  • 医疗电子科技网站建设企业邮箱域名
  • 网站站长指南营销网络推广方式有哪些
  • 企业网站的主要功能板块南京网络推广优化哪家好
  • 网站的下拉列表怎么做的域名注册官网
  • 建筑设计专业大学排名惠州seo优化
  • WordPress食谱小程序网络建站优化科技
  • 平板电脑可以做网站不西安seo技术
  • 国内外网站建设百度一下你就知道啦
  • 电商网站css模板备案查询站长之家
  • 做网站企业的发展前景seo研究中心vip课程
  • 重庆网络公司流程网站seo案例
  • 做网站带吗百度账号怎么改用户名
  • 常州网络科技推广公司泰州百度seo公司
  • 做神马网站快速排名最新病毒感染什么症状