java-初读 HashTable】的更多相关文章

Java5 在 java.util.concurrent 包中已经包含了读写锁.尽管如此,我们还是应该了解其实现背后的原理. 读/写锁的 Java 实现(Read / Write Lock Java Implementation) 读/写锁的重入(Read / Write Lock Reentrance) 读锁重入(Read Reentrance) 写锁重入(Write Reentrance) 读锁升级到写锁(Read to Write Reentrance) 写锁降级到读锁(Write to…
本文大纲 1.Java是什么 2.Java历史 3.Java技术范围 3.1 Java SE平台技术范围 3.2 Java EE技术范围 3.3 Java 体系技术范围 4.总结 1.Java是什么 我认为,要学好一样东西,首先要知道,自己在学的东西是什么.没有一个总体的概念,就会觉得所学到的知识都是一些零星的概念,没有总体的感觉,很难形成一个知识体系,那东西就很难记得住了.所以在学习Java的时候,我们首先要弄明白,Java是什么这一问题. 那Java是什么呢?Java必然是一门编程语言,这是…
Java5 在 java.util.concurrent 包中已经包含了读写锁.尽管如此,我们还是应该了解其实现背后的原理. 读/写锁的 Java 实现(Read / Write Lock Java Implementation) 读/写锁的重入(Read / Write Lock Reentrance) 读锁重入(Read Reentrance) 写锁重入(Write Reentrance) 读锁升级到写锁(Read to Write Reentrance) 写锁降级到读锁(Write to…
用构造器确保初始化 构造器可以确保每个对象都会得到初始化,Java毁在创建对象时自动调用构造器. 构造器采用与类名相同的名称,因此并不适合"每个方法首字母小写的风格". 构造器默认调用的是无参构造方法. 构造器没有返回值,与返回值为空(void)不同. 方法重载 方法名相同,形式参数不同的方法为重载方法. 每个重载的方法都必须有一个独一无二的参数类型列表. 参数顺序的不同也可以实现重载,但会使得程序难以维护. 如果传入的实际参数大于重载方法声明的形式参数,就必须通过类型转换来执行窄化转…
今天随便看了点<Head First Java>,发觉这本书的风格真是有趣.打算先把这本书踏踏实实的看了.学习切忌好高骛远.心浮气躁,尤其入门基础阶段更应该踏踏实实地学习知识.下面随便谈谈自己打算如何使用<Head First Java>.第一,学习按照每一章节来进行,不要尝试跳读省略,耐心地读下去.第二,课后的练习题一定要自己过一遍,动手写代码.第三,总结学到的知识点,用自己的话即举例类比比喻的方式来说明知识.在学习本书之外可以结合学习视频来学习,遇到思想层面的知识点可以看看老师…
用引用操纵对象 Java里一切都被视为对象,通过操纵对象的一个"引用"来操纵对象. 例如, 可以将遥控器视为引用,电视机视为对象. 创建一个引用,不一定需要有一个对象与之关联,但此时使用该引用会出错. 遥控器可以独立存在,但是没有电视机,使用遥控器没有意义. 必须由你创建所有对象 存储数据或代码的地方 寄存器:位于CPU内部,速度最快.JAVA语言无法直接控制寄存器. 堆栈:位于DRAM中,通过栈顶指针来辨别内存是否被使用.创建程序时,JAVA系统必须知道存储在堆栈内所有项的确切生命周…
抽象类和抽象方法 abstract void f();抽象方法是仅有声明而没有方法体的方法. 包含抽象方法的类叫做抽象类,如果一个类包含了一个抽象方法,则该类必须限定为抽象类. 抽象类和抽象方法可以使类的抽象性更加明确. 继承抽象类的类,在运行时不需要 向下转型. 接口 interface关键字用于产生一个完全抽象的类.其中不存在任何提供具体实现的方法. 可以在interface前面添加public,但这仅当接口名与文件名相同时才可以. 接口可以包含域,但他们是隐式定义为static和final…
再论向上转型 在某些方法中,仅接收基类作为参数,而不是特殊的导出类,会使得程序更容易扩展. 转机 方法调用绑定 前期绑定(编译期绑定):在编译期将一个方法调用和方法主体关联起来. 后期绑定(动态绑定或运行时绑定):在程序运行阶段,判断对象类型,将方法调用与方法主体绑定. Java中除static方法和final方法外,其他所有的方法都是后期绑定. 只有非private的方法才可以被覆盖:与private重名的方法,是一个全新的方法. 只有普通的方法调用时多态的.如果访问某个成员变量,则在编译期就…
组合语法 将对象引用置于新类中,即形成类的组合. 引用初始化方法 在定义处初始化. 在类的构造器中初始化. 在使用这些对象之前,进行"惰性初始化". 使用实例初始化. 继承语法 Java中所有的类都是在继承,如果没有明确指出继承的类,则就从根类Object中继承. 每个类中都可以有main方法,可以方便单元测试. 即使一个类只具有包访问权限,其public main()仍然是可以访问的. 继承是对类的复用,可以获得所继承的类中的非私有的方法. 采用super关键字可以访问父类(超类)中…
包:库单元 包内包含有一组类,他们在单一的名字空间下被组织在一起. 通过import ***.***.*可以将某个包下的所有类导入到当前文件中. 每个Java源文件最多只能有一个public类,且名称必须与文件名相同.源文件中的其他类在包外事不可见的,主要用来为public类提供支持. Java的可运行程序是一组可以打包并压缩为一个Java文档文件(jar)的.class文件. package 和import可以将单一的全局名字空间分割开,使得无论多少人使用Java编写类,都不会出现名称冲突问题…
true和false Java不允许将数字作为布尔值使用. 所有条件表达式都将布尔值作为判断条件,决定执行路径. if-lese 迭代 while,do-while,for为三个迭代语句. ,逗号操作符仅会用在for循环的控制表达式当中. 使用逗号操作符可以在for循环控制表达式中定义多个变量,但必须具有相同的类型. Foreach语法 for(float x : f)其中f代表一个装有浮点元素的数组,将每一个元素赋值给x. 用于访问数组和容器,不需要创建变量进行计数. return语句 指定一…
更简单的打印语句 导入自己编写的静态类库,即可使用print();打印 使用Java操作符 操作符:+,-,*,/,=,==,!=,+=,?:,%等 几乎所有操作符都只能操作"基本类型",但是=,==,!=例外 String类支持+和+=.+的作用是将字符串拼接,同时若需要进行类型转换时,会将非String类转换成String类. 优先级 先乘除后加减 其余处应使用括号明确指出优先级. 赋值 =为赋值操作符. 左值必须是一个明确的,已命名的变量,用来保证有一个物理空间能保存右值. 右值…
Hashtables提供了一个很有用的方法可以使应用程序的性能达到最佳. Hashtables(哈 希表)在计算机领域中已不 是一个新概念了.它们是用来加快计算机的处理速度的,用当今的标准来处理,速度非常慢,而它们可以让你在查询许多数据条目时,很快地找到一个特殊的条目. 尽管现代的机器速度已快了几千倍,但是为了得到应用程序的最佳性能,hashtables仍然是个很有用的方法. 设想一下,你有一个 包含约一千条记录的数据文件??比如一个小企业的客户记录还有一个程序,它把记录读到内存中进行处理.每个…
首先需要明确的是,不管使用那种Map,都不能保证公共混合调用的线程安全,只能保证单条操作的线程安全,在这一点上各Map不存在优劣. 前文中简单说过HashTable和synchronizedMap,其实这两个类不需要说太多,把代码贴一下相信看过Java多线程的就能很容易理解了. HashTable HashTable的话,实现这个样子的.可以看到的是,对于Hash表的所有操作,HashTable都加了锁,但也只能保证单条操作的线程安全. public synchronized V get(Obj…
Map:“键值”对映射的抽象接口.该映射不包括重复的键,一个键对应一个值. SortedMap:有序的键值对接口,继承Map接口. NavigableMap:继承SortedMap,具有了针对给定搜索目标返回最接近匹配项的导航方法的接口. AbstractMap:实现了Map中的绝大部分函数接口.它减少了“Map的实现类”的重复编码. Dictionary:任何可将键映射到相应值的类的抽象父类.目前被Map接口取代. TreeMap:有序散列表,实现SortedMap 接口,底层通过红黑树实现.…
1.Java的HashMap是如何工作的? HashMap是一个针对数据结构的键值,每个键都会有相应的值,关键是识别这样的值. HashMap 基于 hashing 原理,我们通过 put ()和 get ()方法储存和获取对象.当我们将键值对传递给 put ()方法时,它调用键对象的 hashCode ()方法来计算 hashcode,让后找到 bucket 位置来储存值对象.当获取对象时,通过键对象的 equals ()方法找到正确的键值对,然后返回值对象.HashMap 使用 Linked…
java读取文件内容,可以作如下理解: 首先获得一个文件句柄,File file = new File():file即为文件句柄.两人之间联通电话网络了,就可以开始打电话了. 通过这条线路读取甲方的信息:new FileInputStream(file)将信息读进内存中,接下来需要解读成乙方能理解的东西. 既然用了FileInputStream(),那么对应就应该使用InputStreamReader()进行解读刚刚装进内存中的数据. 解读完成后输出,要转换成IO可以识别的数据,那就需要调用字节…
这两天仿hadoop 写java RPC框架,使用PB作为序列号工具,在写读数据的时候遇到一个小坑.之前写过NIO代码,恰好是错误的代码产生正确的逻辑,误以为自己写对了.现在简单整理一下. 使用NIO,select()到读事件时,要处理4种情况: 1. channel还有数据,继续读. 2. channel中暂时没数据,但channel还没断开,这是读取到的数据个数为0,结束读,继续到select()处阻塞等待数据. 3. 另一端channel.close()关闭连接,这时候读channel返回…
在java中与有两个类都提供了一个多种用途的hashTable机制,他们都可以将可以key和value结合起来构成键值对通过put(key,value)方法保存起来,然后通过get(key)方法获取相对应的value值.一个是前面提到的HashMap,还有一个就是马上要讲解的HashTable.对于HashTable而言,它在很大程度上和HashMap的实现差不多,如果我们对HashMap比较了解的话,对HashTable的认知会提高很大的帮助.他们两者之间只存在几点的不同,这个后面会阐述. 一…
Java中的读写锁: 多个读锁不互斥, 读锁与写锁互斥, 写锁与写锁互斥, 这是由JVM自行控制的,我们只要上好相应的锁即可. 缓存的设计: package com.cn.gbx; import java.util.HashMap; import java.util.Map; import java.util.concurrent.locks.ReadWriteLock; import java.util.concurrent.locks.ReentrantReadWriteLock; publ…
package com.test; import java.util.*; public class Demo7_3 { public static void main(String[] args) { // TODO Auto-generated method stub Emp emp1 = new Emp("s001", "aaa", 12.3f); Emp emp2 = new Emp("s002", "bbb", 5.…
一>java遍历Hashtabe: import java.util.Hashtable; import java.util.Set; public class HashTableTest { public static void main(String args[]){ Hashtable<String, String> ht = new Hashtable<String, String>(); ht.put("one", "The first…
因为项目须要所以简单的研究了下protobuf.我也是參照网上的博客,所以大部分内容我也就不反复造轮子了.首先protobuf介绍点击这里,使用介绍点击这里,使用demo看这里. 我个人的第一个样例也是參照这个demo来的.只是当中我有遇到一些问题,所以揪出来说说,也就给自己做个笔记,方便查阅. 主要的东西相信大家也了解了.直接步入主题了: 1.限定修饰符介绍 required\optional\repeated,之前给定的博客已经有这个介绍了我也不多说.这里把一些小玩儿拿出来讲讲 ①.requ…
和HashMap一样,Hashtable也是一个散列表,存储的内容也是键值对key-value映射.它继承了Dictionary,并实现了Map.Cloneable.io.Serializable接口.Hashtable是线程安全的,并且key和value不能为空,并且不是有序的. Hashtable有两个参数影响其性能:初始容量和加载因子.容量是哈希表中桶的数量,初始容量就是哈希表创建时的容量,加载因子是对哈希表在其容量自动增加之前可以达到多满的一个尺度.默认的加载因子是0.75. Hasht…
原文地址:http://tutorials.jenkov.com/java-performance/read-patterns.html 好久没翻译了,逛知乎,无意间发现的一个链接,写的太好了,而且内容也不多(博主有点懒了~),忍不住翻译下,希望园子的朋友可以一起学习 --------------------------------------------------------------我是华丽的分割线---------------------------------------------…
之前看过,很多会遗忘,标记一下,温故知新.(明天的我一定会感谢现在努力的自己. ) 一.运行时数据区域 Java虚拟机管理的内存包括几个运行时数据内存:方法区.虚拟机栈.本地方法栈.堆.程序计数器,其中方法区和堆是由线程共享的数据区,其他几个是线程隔离的数据区 1.1 程序计数器 程序计数器是一块较小的内存,他可以看做是当前线程所执行的行号指示器.字节码解释器工作的时候就是通过改变这个计数器的值来选取下一条需要执行的字节码的指令,分支.循环.跳转.异常处理.线程恢复等基础功能都需要依赖这个计数器…
[一]HashSet (1)HashSet内部维护的是一个HashMap,具体原理见java集合之HashMap [二]HashTable (1)HashTable内部维护的是一个Entry的数组.Entry又是一个单项链表的结构. private static class Entry<K,V> implements Map.Entry<K,V> { final int hash; final K key; V value; Entry<K,V> next; prote…
这本书在Java开发的行业里,颇有名气.今天总算是粗略的看完了…后面线程部分和序列化部分由于心浮气躁看的不仔细.这个月还剩下一周,慢慢总结消化. 1.静态工厂方法代替构造器 静态工厂方法有名称,能确切地描述正被返回的对象.不必每次调用都创建一个新的对象.可以返回原返回类型的任何子类对象.创建参数化类型实例时更加简洁,比如调用构造 HashMap 时,使用 Map < String,List < String > m = HashMap.newInstance() ,与 Map <…
Map:类似Python的字典 HashMap: 不支持线程的同步,即同一时刻不能有多个线程同时写HashMap: 最多只允许一条记录的键值为null,不允许多条记录的值为null HashMap遍历所有键和值的两种方法: 第一种: import java.util.*; public class exp{ public static void main(String[] args){ Map map = new HashMap(); map.put("1", "jack&q…
排他锁和共享锁: 读写锁:既是排他锁,又是共享锁.读锁,共享锁,写锁:排他锁 读和读是不互斥的 import java.util.HashMap; import java.util.Map; import java.util.concurrent.locks.Lock; import java.util.concurrent.locks.ReadWriteLock; import java.util.concurrent.locks.ReentrantReadWriteLock; public…