博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
java中的高效编程方法
阅读量:4537 次
发布时间:2019-06-08

本文共 3027 字,大约阅读时间需要 10 分钟。

1.linkedList和ArrayList区别

  ArrayList实际上是动态数组 LinkedList是个链表结构

    插人删除操作不频繁,get()等查询多的的用ArrayList就行     LinkedList的优势是插入删除效率比较高.

 

2.ConcurrentHashMap

  是Java 5中支持高并发、高吞吐量的线程安全HashMap实现。

     ConcurrentHashMap允许多个修改操作并发进行,其关键在于使用了锁分离技术。它使用了多个锁来控制对hash表的不同部分进行的修改。ConcurrentHashMap内部使用段(Segment)来表示这些不同的部分,每个段其实就是一个小的hash table,它们有自己的锁。只要多个修改操作发生在不同的段上,它们就可以并发进行。

     有些方法需要跨段,比如size()和containsValue(),它们可能需要锁定整个表而而不仅仅是某个段,这需要按顺序锁定所有段,操作完毕后,又按顺序释放所有段的锁。这里“按顺序”是很重要的,否则极有可能出现死锁,在ConcurrentHashMap内部,段数组是final的,并且其成员变量实际上也是final的,但是,仅仅是将数组声明为final的并不保证数组成员也是final的,这需要实现上的保证。这可以确保不会出现死锁,因为获得锁的顺序是固定的。

   

     为了加快定位段以及段中hash槽的速度,每个段hash槽的的个数都是2^n,这使得通过位运算就可以定位段和段中hash槽的位置。当并发级别为默认值16时,也就是段的个数,hash值的高4位决定分配在哪个段中。但是我们也不要忘记《算法导论》给我们的教训:hash槽的的个数不应该是2^n,这可能导致hash槽分配不均,这需要对hash值重新再hash一次。(这段似乎有点多余了

 

3.Singleton

//饿汉式单例类.在类初始化时,已经自行实例化

2 public class Singleton1 {
3     //私有的默认构造子
4     private Singleton1() {}
5     //已经自行实例化
6     private static final Singleton1 single = new Singleton1();
7     //静态工厂方法
8     public static Singleton1 getInstance() {
9         return single;
10     }
11 }

 

//懒汉式单例类.在第一次调用的时候实例化

2 public class Singleton2 {
3     //私有的默认构造子
4     private Singleton2() {}
5     //注意,这里没有final   
6     private static Singleton2 single=null;
7     //静态工厂方法
8     public synchronized  static Singleton2 getInstance() {
9          if (single == null) { 
10              single = new Singleton2();
11          } 
12         return single;
13     }
14 }

 

 

1 import java.util.HashMap;

2 import java.util.Map;
3 //登记式单例类.
4 //类似Spring里面的方法,将类名注册,下次从里面直接获取。
5 public class Singleton3 {
6     private static Map<String,Singleton3> map = new HashMap<String,Singleton3>();
7     static{
8         Singleton3 single = new Singleton3();
9         map.put(single.getClass().getName(), single);
10     }
11     //保护的默认构造子
12     protected Singleton3(){}
13     //静态工厂方法,返还此类惟一的实例
14     public static Singleton3 getInstance(String name) {
15         if(name == null) {
16             name = Singleton3.class.getName();
17             System.out.println("name == null"+"--->name="+name);
18         }
19         if(map.get(name) == null) {
20             try {
21                 map.put(name, (Singleton3) Class.forName(name).newInstance());
22             } catch (InstantiationException e) {
23                 e.printStackTrace();
24             } catch (IllegalAccessException e) {
25                 e.printStackTrace();
26             } catch (ClassNotFoundException e) {
27                 e.printStackTrace();
28             }
29         }
30         return map.get(name);
31     }
32     //一个示意性的商业方法
33     public String about() {   
34         return "Hello, I am RegSingleton.";   
35     }   
36     public static void main(String[] args) {
37         Singleton3 single3 = Singleton3.getInstance(null);
38         System.out.println(single3.about());
39     }
40 }

  -----------------------------------

 

首先查看官方API那个的解释:

———————————————————————————————————————

intern

public String intern()

返回字符串对象的规范化表示形式。

一个初始时为空的字符串池,它由类 String 私有地维护。

当调用 intern 方法时,如果池已经包含一个等于此 String 对象的字符串(该对象由 equals(Object) 方法确定),则返回池中的字符串。否则,将此 String 对象添加到池中,并且返回此 String 对象的引用。

它遵循对于任何两个字符串 s 和 t,当且仅当 s.equals(t) 为 true 时,s.intern() == t.intern() 才为 true。

所有字面值字符串和字符串赋值常量表达式都是内部的。

返回:

一个字符串,内容与此字符串相同,但它保证来自字符串池中。

参考:

转载于:https://www.cnblogs.com/jiuzhongguo/archive/2012/07/19/java%e4%b8%ad%e7%9a%84%e9%ab%98%e6%95%88%e7%bc%96%e7%a8%8b%e6%96%b9%e6%b3%95.html

你可能感兴趣的文章
【翻译】西川善司「实验做出的游戏图形」「GUILTY GEAR Xrd -SIGN-」中实现的「纯卡通动画的实时3D图形」的秘密,前篇(2)...
查看>>
函数名、闭包及迭代器
查看>>
mysql 5.6 参数详解
查看>>
求旋转数组的最小元素
查看>>
jQuery ajax error函数(交互错误信息的获取)
查看>>
Gson解析Json数组
查看>>
Lintcode: Fast Power
查看>>
Pocket Gem OA: Log Parser
查看>>
枚举也能直接转换为对应的数值输出
查看>>
angularjs1-7,供应商
查看>>
BitSet
查看>>
Spring常用注解,自动扫描装配Bean
查看>>
(转载)深入理解WeakHashmap
查看>>
JAVA中的数组
查看>>
爬虫—使用Requests
查看>>
scrollIntoView()窗口滚动
查看>>
No toolchains found in the NDK toolchains folder for ABI with prefix: mips64el-linux-android
查看>>
使用ansible远程管理集群
查看>>
读jQuery源码释疑笔记3
查看>>
手把手教你jmeter压测--适合入门
查看>>