如何java高效編程,我在这里抛砖引玉了。希望各位大牛们能把自己的经验贴出来,大家一起讨论!
1.这里比较一下ArrayList和LinkedList:
1.ArrayList是基于数组,LinkedList基于链表实现。
2.对于随机访问get和set,ArrayList觉得优于LinkedList,因为LinkedList要移动指针。
3.对于新增和删除操作add和remove,LinedList比较占优势,因为ArrayList要移动数据。
4.查找操作indexOf,lastIndexOf,contains等,两者差不多。
这里只是理论上分析,事实上也不一定,比如ArrayList在末尾插入和删除数据就不设计到数据移动,不过还是
有这么个建议:随机访问比较多的话一定要用ArrayList而不是LinkedList,如果需要频繁的插入和删除应该
考虑用LinkedList来提高性能。
2 。减少不必要的对象的创建是提高性能的好办法。不仅对JAVA,所有语言都适用。
3.避免在循环条件中使用复杂表达式 在不做编译优化的情况下,在循环中,循环条件会被反复计算,如果不使用复杂表达式,而使循环条件值不变的话,程序将会运行的更快。
4.为'Vectors' 和 'Hashtables'定义初始大小 JVM为Vector扩充大小的时候需要重新创建一个更大的数组,将原原先数组中的内容复制过来,最后,原先的数组再被回收。可见Vector容量的扩大是一个颇费时间的事。通常,默认的10个元素大小是不够的。你最好能准确的估计你所需要的最佳大小
5.在finally块中关闭Stream 程序中使用到的资源应当被释放,以避免资源泄漏。这最好在finally块中去做。不管程序执行的结果如何,finally块总是会执行的,以确保资源的正确关闭。
6.使用'System.arraycopy ()'代替通过来循环复制数组
'System.arraycopy ()' 要比通过循环来复制数组快的多。
7.在一些知道循环次数的循环中使用short甚至byte.
好象很多人习惯用int
8.字符串的连接尽可能使用stringbuffer ,stringbulder
java.lang.StringBuffer线程安全的可变字符序列。一个类似于 String 的字符串缓冲区,但不能修改。虽然在任意时间点上它都包含某种特定的字符序列,但通过某些方法调用可以改变该序列的长度和内容。
可将字符串缓冲区安全地用于多个线程。可以在必要时对这些方法进行同步,因此任意特定实例上的所有操作就好像是以串行顺序发生的,该顺序与所涉及的每个线程进行的方法调用顺序一致。
StringBuffer 上的主要操作是 append 和 insert 方法,可重载这些方法,以接受任意类型的数据。每个方法都能有效地将给定的数据转换成字符串,然后将该字符串的字符追加或插入到字符串缓冲区中。append 方法始终将这些字符添加到缓冲区的末端;而 insert 方法则在指定的点添加字符。
例如,如果 z 引用一个当前内容是“start”的字符串缓冲区对象,则此方法调用 z.append("le") 会使字符串缓冲区包含“startle”,而 z.insert(4, "le") 将更改字符串缓冲区,使之包含“starlet”。
通常,如果 sb 引用 StringBuilder 的一个实例,则 sb.append(x) 和 sb.insert(sb.length(), x) 具有相同的效果。
只要发生有关源序列(如在源序列中追加或插入)的操作,该类就只在执行此操作的字符串缓冲区上而不是在源上实现同步。
每个字符串缓冲区都有一定的容量。只要字符串缓冲区所包含的字符序列的长度没有超出此容量,就无需分配新的内部缓冲区数组。如果内部缓冲区溢出,则此容量自动增大。从 JDK 5 开始,为该类补充了一个单个线程使用的等价类,即 StringBuilder。与该类相比,通常应该优先使用 StringBuilder 类,因为它支持所有相同的操作,但由于它不执行同步,所以速度更快。
java.lang.StringBuilder一个可变的字符序列。此类提供一个与 StringBuffer 兼容的 API,但不保证同步。该类被设计用作 StringBuffer 的一个简易替换,用在字符串缓冲区被单个线程使用的时候(这种情况很普遍)。如果可能,建议优先采用该类,因为在大多数实现中,它比 StringBuffer 要快。
在 StringBuilder 上的主要操作是 append 和 insert 方法,可重载这些方法,以接受任意类型的数据。每个方法都能有效地将给定的数据转换成字符串,然后将该字符串的字符追加或插入到字符串生成器中。append 方法始终将这些字符添加到生成器的末端;而 insert 方法则在指定的点添加字符。
例如,如果 z 引用一个当前内容为“start”的字符串生成器对象,则该方法调用 z.append("le") 将使字符串生成器包含“startle”,而 z.insert(4, "le") 将更改字符串生成器,使之包含“starlet”。
通常,如果 sb 引用 StringBuilder 的实例,则 sb.append(x) 和 sb.insert(sb.length(), x) 具有相同的效果。 每个字符串生成器都有一定的容量。只要字符串生成器所包含的字符序列的长度没有超出此容量,就无需分配新的内部缓冲区。如果内部缓冲区溢出,则此容量自动增大。
将 StringBuilder 的实例用于多个线程是不安全的。如果需要这样的同步,则建议使用 StringBuffer。
9.如果字符串特别长,采用charAt逐一获取特定位置的字符是非常耗时的。因为每次获取制定索引位置的字符都要引起新的检索过程,更好的办法是将字符串通过调用toCharArray方法转换成字符数组,然后通过数组索引值获得指定位置的字符
10.java中有很一些类是为同步而设置的。比如Hashtable,为了防止多个用户同时访问时出现问题进行了一些很好的设计。如果,你的数据可以被多个人访问,但是是一次写入,然后基本上值有读的操作,那就可以考虑不用它的同步机制,而是用HashMap等来代替它。而自己在适当的地方做些控制。(不是特别推荐)
分享到:
相关推荐
### Java高性能编程——构建高可用系统的关键技术与实践 #### 引言 随着互联网技术的飞速发展,用户对服务的稳定性和响应速度提出了更高的要求。对于任何IT系统而言,“高可用性”(High Availability, HA)已经...
Destroy: JDK未实现该方法- 理想输出- 程序执行结果没有保证同步代码块里面数据的一致性,破坏了线程安全2 真正的线程终止如果目标线程在调用Objec
《java 高级语言编程 进阶版》这本书是针对已经有一定Java基础的开发者设计的,旨在帮助他们提升到更高的编程技能水平。以下将详细解析该书可能覆盖的知识点。 1. 泛型 泛型是Java SE 5引入的一个特性,它允许...
在Java 8及更高版本中,函数式编程得到了官方的大力支持,引入了Lambda表达式、Stream API和Optional类等新特性,使得Java开发者可以更高效、简洁地编写代码。 1. **Lambda表达式**: Lambda表达式是Java函数式...
WebSocket是一种在浏览器和服务器之间建立持久连接的协议,Java EE 7及更高版本提供了`javax.websocket`包来支持WebSocket编程,允许双向实时通信。 此外,网络编程中还会涉及多线程和异步处理,因为网络I/O通常是...
本文将围绕Java服务器编程的关键知识点展开,包括但不限于Servlet、JSP、EJB、Spring框架、微服务架构、多线程、网络通信、数据库连接池以及性能优化等方面。 1. **Servlet与JSP**:Servlet是Java标准版(Java SE)...
Java作为一种跨平台的编程语言,其强大的性能和丰富的库支持使得它在游戏开发领域占有一席之地。本书首先会介绍Java的基础知识,包括语法、面向对象编程概念以及Java SE环境的搭建。学习这些基础知识对于初学者来说...
《Java高并发编程》第一版是一本专注于Java平台上的并发编程技术的专业书籍。在Java开发领域,高并发编程是至关重要的技能,特别是在大型分布式系统、云计算以及互联网应用中。本书旨在帮助开发者理解和掌握如何在...
Java高级编程实用教程是针对已经掌握了Java基础的开发者们深入学习的一门课程,旨在提升他们的编程技巧和解决复杂问题的能力。本教程将涵盖多个关键领域,包括多线程、网络编程、I/O流、反射、异常处理、集合框架、...
在Java 8及更高版本中,函数式编程得到了显著增强,引入了Lambda表达式、函数接口、Stream API等新特性,使得Java开发者也能享受到函数式编程的益处。 1. **Lambda表达式**:Lambda表达式是Java 8引入的关键特性,...
根据提供的信息,我们可以深入探讨Java高并发编程的相关知识点。高并发是现代软件系统设计中一个非常重要的方面,尤其是在云计算和大数据处理领域。下面将详细解释Java高并发编程的基础概念、核心技术以及实现技巧。...
非阻塞IO(NIO)是Java SE 1.4引入的一种新的IO操作方式,它提供了比传统IO(BIO)更高的性能。NIO采用基于通道和缓冲区的模型,支持非阻塞读写,这意味着线程不会因为等待IO操作完成而被阻塞,从而提高了程序的响应...
2. **多路复用I/O**:如`java.nio`包,提供了非阻塞I/O支持,适用于高性能网络应用。 3. **HTTP协议**:讲解如何使用Java实现HTTP客户端和服务器,包括HTTP/1.x和HTTP/2。 4. **HTTPS和SSL/TLS**:介绍如何在Java中...
6. **网络编程框架**:如Netty、Grizzly等高性能的网络应用框架,它们提供了更高级别的抽象,简化了网络编程。这些框架可能在书中有所提及,并可能通过源码分析来讲解其工作原理。 7. **实战案例**:书中可能包含了...
除此之外,在Java高级编程中,还涉及到很多其他知识点,例如Java的集合框架、网络编程、IO流、设计模式、Spring框架、Java虚拟机(JVM)性能调优等,这些都是提升Java开发能力必须掌握的内容。 通过上述的详细介绍...
《Java并发编程实战》是一本深入探讨Java平台并发编程的权威指南。这本书旨在帮助开发者理解和掌握在Java环境中创建高效、可扩展且可靠的多线程应用程序的关键技术和实践。它涵盖了从基本概念到高级主题的广泛内容,...
Java高级编程涵盖了许多关键主题,其中包括Java输入/输出(I/O)系统,非阻塞I/O(NIO),以及基于Java的Netty框架。...这些知识对于任何希望在Java平台上构建高性能、高并发系统的开发人员来说都是至关重要的。
Linux高性能服务器编程 Linux高性能服务器编程 Linux高性能服务器编程 Linux高性能服务器编程 Linux高性能服务器编程
Java游戏编程是一种在游戏开发中应用Java技术的实践,它涉及面向对象编程、事件驱动编程、图形用户界面(GUI)设计、网络编程等多个方面。Java游戏高级编程则可能包括更深入的面向对象设计模式、多线程处理、实时...