`
文章列表
进程控制: public class OSExecute { public static void command(String command) { boolean err = false; try { Process process = new ProcessBuilder(command.split(" ")).start(); BufferedReader result = new BufferedReader(new InputStreamReader(process.getInputStream())); String ...
System.in public class SystemInTest { public static void main(String[] args) throws IOException { BufferedReader stdin = new BufferedReader(new InputStreamReader(System.in)); String s; while((s = stdin.readLine())!= null && s.length()!= 0) { System.out.println(s); } } } ...
1.无论何时使用readLine().都不应该使用DataInputStream,而应该使用BufferedReader. 2.RandomAccessFile,只有RandomAccessFile支持搜索操作,并且只适用于文件。 到jdk1.4中,它的大部分功能被nio存储映射文件所取代。 3.读文件的几种方式: 缓冲输 ...
一、JVM内存区域组成 java把内存分四种: 1、栈区(stack segment)— 由编译器自动分配释放,存放函数的参数值,局部变量的值等,具体方法执行结束之后,系统自动释放内存资源 2、堆区(heap segment) — 一般由程序员分配释放 ...
Core Java(8th),内容很全,概念清晰,一直没有认真看过,但是可以作为参考资料。 The Java Programming Language(4th),算是最喜欢的Java书了,语言点介绍详略得当,概念权威,很多地方也会介绍一些语法的设计选择,很棒。对类库也进行了整体的介绍,看完能对java有个基本的方向性认识了。很奇怪的是,这本书在Java书籍中的地位好像远远没有The C++ Programming Language一书在C++社群中的地位高。 Thinking In Java(4th),好书,但是虽然叫java编程思想,其实达不到编程思想的境界,非常不错的java语法书,设计了很 ...
从JDK1.2版本开始,把对象的引用分为四种级别,从而使程序能更加灵活的控制对象的生命周期。这四种级别由高到低依次为:强引用、软引用、弱引用和虚引用。 1.强引用 本章前文介绍的引用实际上都是强引用,这是使用最普遍的引用。如果一个对象具有强引用,那就类似于必不可少的生活用品,垃圾回收器绝不会回收它。当内存空 间不足,Java虚拟机宁愿抛出OutOfMemoryError错误,使程序异常终止,也不会靠随意回收具有强引用的对象来解决内存不足问题。 2.软引用(SoftReference) 如果一个对象只具有软引用,那就类似于可有可物的生活用品。如果内存空间足够,垃圾回收器就不会回收它,如果内存 ...
>>-CREATE PROCEDURE--procedure-name-----------------------------> >--+----------------------------------------------------+--*---->    '-(--+------------------------------------------+--)-'         | .-,------------------------------------. |         | V .-IN----.                       ...
treeMap插入元素的图解法: 插入前: 插入过程: 1 2 3 4 5 6 代码分析(转) public V put(K key, V value) { // 先以 t 保存链表的 root 节点 Entry<K,V> t = root; // 如果 t==null,表明是一个空链表,即该 TreeMap 里没有任何 Entry if (t == null) { // 将新的 key-value 创建一个 Entry,并将该 Ent ...
1.构造方法: public HashSet() { map = new HashMap<E,Object>(); } 可以看出,hashSet的实现其实是一个hashMap(详见本人写的hashMap) HashSet中基本都是调用hashMap的方法实现的,取得的值都是hashMap的key,在往hashMap存入值时候,value都是一个默认的object类。 和hashMap不同的方法:writeObject 和 readObject
1.默认初始大小 10. 2.Vector是一个object数组,Vector的add是线程安全的。 3.Vector的方法 ensureCapacityHelper private void ensureCapacityHelper(int minCapacity) { int oldCapacity = elementData.length; if (minCapacity > oldCapacity) { Object[] oldData = elementData; int newCapacity = (capacityIncrement & ...
LinkedList是采用双向链表来存储数据: LinkedList允许插入null的值 双向链表的结构图: LinkedList的构造函数: public LinkedList() { header.next = header.previous = header; } LinkedList在构造函数中初始化双向链表的表头header,指定header的上一个和下一个都是自己。 LinkedList的add方法: public boolean add(E e) { addBefore(e, header); return ...
volatile修饰符告诉编译程序不要对该变量所参与的操作进行某些优化。在两种特殊的情况下需要使用volatile修饰符:第一种情况涉及到内存映射硬件(memory-mapped hardware,如图形适配器,这类设备对计算机来说就好象是内存的一部分一样),第二种情况涉及到共享内存(shared memory,即被两个以上同时运行的程序所使用的内存)。     大多数计算机拥有一系列寄存器,其存取速度比计算机主存更快。好的编译程序能进行一种被称为“冗余装入和存储的删去”(redundant load and store removal)的优化,即编译程序会在程序中寻找并删去这样两类代码:一类是 ...
1.ArrayList 容器初始大小为10,使用object数组实现。 2.ArrayList 在扩容、增加元素和删除元素的时候,使用的是数组的深克隆。 3.ArrayList 的add()方法: public boolean add(E e) { ensureCapacity(size + 1); // Increments modCount!! elementData[size++] = e; return true; }   ArrayList的ensureCapacity方法:   public void ensureCapacity(int ...
在concurrentHashMap出来之前,hashtable一直是作为线程安全的map使用。 hashtable默认的初始大小是:11. 1.Hashtable中的put方法。 public synchronized V put(K key, V value) { // Make sure the value is not null if (value == null) { throw new NullPointerException(); } // Makes sure the key is not already in the hashtable. ...
ConcurrentHashMap默认初始大小 16,临界值:12:基数:0.75 1.ConcurrentHashMap是一个线程安全的hashMap。相对hashMap多出以下一些特殊属性: //默认能够同时运行的线程数目 static final int DEFAULT_CONCURRENCY_LEVEL = 16; //最大同时运行的线程数目 static final int MAX_SEGMENTS = 1 << 16; // slightly conservative 2.ConcurrentHashMap的链表实例Has ...
Global site tag (gtag.js) - Google Analytics