- 浏览: 227026 次
- 性别:
- 来自: 汨罗
文章分类
最新评论
-
tssinbc:
jpos-1.4.4.zip 这个包内容这么多,怎么使用啊,
JPos 学习 -
ruyi0127:
很棒, 棒我忙了
JQuery 弹出层,始终显示在屏幕正中间 -
csdxzsky:
好分享,谢谢
JPos 学习 -
lijunwyf41:
写的不错,期待更多的示例
JPos 学习 -
在世界的中心呼喚愛:
spp_1987 写道这个遮挡层不错 , 但是为什么取消这个遮 ...
JQuery 遮罩层
ArrayList学习心得:
看完ArrayList后感:
一、System.arraycopy比for循环赋值比clone速度在大小超过一定数目的时候要快。
class ArrayCopyTest { public static void main(String[] args) { new ArrayCopyTest().arrayCopy(); } Object[] srcArray1 = { "sdfsdaf", new Date(), new Integer(200) }; Object[] srcArray2 = { "qwerasd", new Date(), new Integer(190), srcArray1, new Object(), new String[] { "aaa", "bbb" } }; Object[] srcArray3 = new Object[30]; Object[] srcArray4 = new Object[150]; Object[] srcArray5 = new Object[300]; ArrayCopyTest() { fillArray(srcArray3); fillArray(srcArray4); fillArray(srcArray5); } /** * 填充对象数组。 * * @param objs * 填充目标。 */ private void fillArray(Object[] objs) { for (int i = 0; i < objs.length; i = i + 10) { fillArray(objs, i); } } void fillArray(Object[] objs, int start) { objs[start++] = new Object(); objs[start++] = new Date(); objs[start++] = getRandomString(); objs[start++] = getRandomString(); objs[start++] = getRandomString(); objs[start++] = getRandomString(); objs[start++] = getRandomString(); objs[start++] = r.nextLong(); objs[start++] = getRandomString(); objs[start++] = getRandomString(); } private Random r = new Random(); /** * 获取随机字符串。 * * @return 随机字符串 */ String getRandomString() { StringBuffer sb = new StringBuffer(); int loop = 3 + r.nextInt(4); while (loop > 0) { loop--; sb.append((char) (97 + r.nextInt(25))); sb.append((char) (65 + r.nextInt(25))); } return sb.toString(); } void arrayCopy() { testMethod("short array\t############", srcArray1); testMethod("long array\t########################", srcArray2); testMethod("big array\t####################################", srcArray3); testMethod( "huge array\t################################################", srcArray4); testMethod( "mass array\t############################################################", srcArray5); } /** * 成组测试。 * * @param prmpt * 测试提示 * @param args * 测试对象数组 */ void testMethod(String prmpt, Object[] args) { int loop = 5000000; System.out.println(prmpt); arrayClone(loop, args); arrayManualCopy(loop, args); arraySysCopy(loop, args); } void arrayClone(int loop, Object[] sourceArray) { long time = System.currentTimeMillis(); for (int i = 0; i < loop; ++i) { Object[] destArray = (Object[]) sourceArray.clone(); } System.out.println(" arrayClone\t" + (System.currentTimeMillis() - time)); } void arraySysCopy(int loop, Object[] sourceArray) { long time = System.currentTimeMillis(); for (int i = 0; i < loop; ++i) { Object[] destArray = new Object[sourceArray.length]; System.arraycopy(sourceArray, 0, destArray, 0, sourceArray.length); } System.out.println(" arraySysCopy\t" + (System.currentTimeMillis() - time)); } void arrayManualCopy(int loop, Object[] sourceArray) { long time = System.currentTimeMillis(); for (int i = 0; i < loop; ++i) { Object[] destArray = new Object[sourceArray.length]; for (int j = 0; j < sourceArray.length; ++j) { destArray[j] = sourceArray[j]; } } System.out.println(" arrayManulCopy\t" + (System.currentTimeMillis() - time)); } }
二、源码中private transient E[] elementData; 为什么把 elementData 设置为不参与序列化:
因为在ArrayList中是以数组的方式去实现的,而数组的大小是要大于等于所存数据的大小。而序列化的机制是:在序列化数组的时候,不管你的数组里面有没有存值,他只根据数组的大小去序列化,也就是说,如果你初始化了一个数组为10个大小,而你实际只在前3个里面放了值,那么在序列化的时候,他会把你初始的10个大小都写进序列化里面。然而那些超过的大小,并且是我们使用者所想要的,所以如果在序列化的时候全写里面,这样是不妥的,所以这里要声明为不可序列化!
有看不懂的,可以看下面的代码:
class SerializableTest { public static void main(String[] args) { String[] s = new String[10]; s[0] = "aaa"; s[1] = "bbb"; s[2] = "ccc"; s[3] = "ddd"; FileOutputStream os = new FileOutputStream("F:\\t.txt"); ObjectOutputStream oos = new ObjectOutputStream(os); for (int i = 0; i < s.length; i++) { oos.writeObject(s[i]); } oos.close(); String[] ss = new String[10]; FileInputStream is = new FileInputStream("F:\\t.txt"); ObjectInputStream ois = new ObjectInputStream(is); for(int i=0;i<ss.length;i++){ ss[i]=(String) ois.readObject(); } for(int i=0;i<ss.length;i++){ System.out.println(ss[i]); } ois.close(); } }
三、通过集合类的帮助类Collections.synchronizedList(new ArrayList (...))可以让这个ArrayList进行同步。
我在想,是不是Vector可以用不着了?因为Vector是强制性的同步,而ArrayList这个,是灵活性的同步!(求高手解决我心中的疑惑!)
以上是我学习ArrayList的心得。在此总结一下!
发表评论
-
Http协议的Delete和Put方法是做什么的?怎么用?
2012-09-21 09:51 1469原文出自:http://blog.csdn.net/kt ... -
利用Axis编写简单的WebService
2012-08-29 16:28 1763原文出自:http://nopainnogain.iteye. ... -
java cookie跨域操作
2012-08-13 10:14 1306原文出自:http://hi.baidu.com/feixia ... -
顺序读取属性文件
2012-07-13 17:14 1649不多说,直接上代码 import java.io.Buffe ... -
采用jacob读取并在网页中显示ppt、word、excel .
2012-05-02 16:48 1167原文出自:http://blog.csdn.net/chrys ... -
伪造 referer
2012-05-02 14:53 1249HttpURLConnection conn = (HttpU ... -
深入理解HTTP协议(转) .
2012-04-28 17:30 942原文出自:http://blog.csdn.net/lxzo1 ... -
SpringMVC3
2012-04-23 13:41 940原文出自:http://blog.csdn.net/sunit ... -
400 500 503错误的配置
2012-04-20 15:23 1651最近工作中,社区为了提高用户感受,对三种异常(404/500/ ... -
Spring JDBCTemplate
2012-04-17 17:34 907原文出自:http://www.blogjava.net/wy ... -
用Spring让JavaMail支持简化邮件发送
2012-04-16 17:36 985原文出自:http://www.examw.com/java/ ... -
Cache-control使用:header('Cache-control:private')
2012-04-16 10:46 2672Cache-control使用:header('Cach ... -
JAVA远程调用
2012-04-13 17:10 931原文出自:http://www.iteye.com/topic ... -
清除 Struts1.x的 ActionFrom
2012-03-15 11:26 1103一个updateAction 一个addAction ... -
JavaServerWrapper做成服务
2011-12-06 17:14 1126JavaServerWrapper出现的原因: ... -
2个Integer作比较时,需要注意的地方
2011-03-09 17:17 1107今天受打击了,一同事问了我一个问题,,,我当场就肯定的说:答案 ... -
浅谈内部类与静态内部类的应用
2011-03-03 18:00 1831起因:我在看LinkedList源码的时候,发现他用的辅助类是 ...
相关推荐
在这个主题中,我们将深入探讨如何在JNI中操作ArrayList对象并添加一个int类型的数据。 首先,我们需要理解ArrayList在Java中的本质。ArrayList是Java集合框架中的一个重要类,它实现了List接口,用于存储可变大小...
### C# 中 Array、ArrayList 和 List 的区别 在C#编程语言中,处理集合数据时,程序员经常需要根据实际需求选择合适的集合类型。本文将详细解释C#中Array、ArrayList和List之间的区别,并通过示例代码帮助理解这些...
在.NET框架中,ArrayList和DataTable是两种常用的集合类,它们分别代表了两种不同的数据存储方式。ArrayList是一个基于对象数组的动态大小的列表,而DataTable则是一个内存中的表格数据结构,通常用于存储和操作关系...
在Android开发中,ArrayList是一个非常重要的数据结构,它属于Java集合框架的一部分,但在Android环境中被广泛使用。ArrayList关键字查询是Android应用中常见的功能,尤其在显示大量数据的ListView中,用户通常需要...
在.NET框架中,ArrayList是System.Collections命名空间下的一种动态数组,它可以存储任意类型的对象,而ListBox控件则是Windows Forms应用程序中常见的用户界面元素,用于显示一个可选项目的列表。本篇将详细介绍...
在Java编程语言中,ArrayList是Java集合框架的重要组成部分,它属于List接口的一个具体实现,用于存储可变大小的有序对象列表。在这个“ArrayList实现对产品CRUD”的项目中,我们将探讨如何利用面向对象编程(OOP)...
浅析ArrayList内部实现 ArrayList是Java集合框架中的一种常用数据结构,能够存储任意多个对象,并且可以自由扩展,弥补了数组的定长的缺陷。下面我们将深入探讨ArrayList的内部实现机理。 ArrayList的内部实现机理...
首先,ArrayList是.NET Framework中的一个类,它继承自System.Collections.ArrayList,主要用于存储动态大小的可变数组。ArrayList可以存储任何类型的对象,非常灵活,但不提供类型安全。在C#中,我们通常更推荐使用...
import java.util.ArrayList; import java.util.Iterator; import java.util.Scanner; /** * @Author Ziph * @date 2020/2/19 * @Email mylifes1110@163.com */ public class TestDemo implemen
### ArrayList数据批量添加数据 #### 知识点概述 在.NET框架中,`ArrayList`类是一种动态数组,用于存储不同类型的数据。本篇文章将详细介绍如何利用`ArrayList`进行数据的批量添加,并通过一个示例来展示如何在一...
在Java编程语言中,`ArrayList`是`java.util`包中的一个重要集合类,它提供了动态数组的功能。这个数据结构允许我们存储、访问和管理一组元素。而在C语言中,由于没有内置的类似集合的数据类型,程序员需要自定义...
C# ArrayList是一个重要的数据结构,它是.NET框架早期版本中用于动态数组存储的类。这个类在System.Collections命名空间中,提供了灵活的大小调整和数据管理功能。ArrayList在C#编程中扮演了重要的角色,尤其在处理...
在C语言中,ArrayList是一种常见的数据结构,它模拟了Java或.NET等高级语言中的动态数组。ArrayList提供了在数组中添加、删除和查找元素的便利操作,而无需预先知道数组的大小。下面,我们将深入探讨如何用C语言实现...
ArrayList类是Java编程语言中一个常用的集合类,它属于Java集合框架的一部分,位于`java.util`包中。ArrayList是一个基于数组实现的动态列表,可以存储任何类型的数据,并且支持动态扩容。在本实例中,我们将深入...
### ASP .NET - ArrayList对象 在ASP .NET中,`ArrayList`对象是一种非常有用的集合类,它可以存储任意类型的对象,并且大小是动态可变的。`ArrayList`对象提供了丰富的方法来帮助开发人员处理数据,例如添加、删除...
在编程领域,尤其是在C#语言中,数组和ArrayList是两种常用的数据存储结构。它们各自有其特点和适用场景,理解并熟练运用它们是提升编程能力的关键。本文将深入探讨数组和ArrayList,帮助你掌握这两种数据结构的核心...
### ArrayList源码解析(JDK 1.8) #### 概述 `ArrayList`是Java集合框架中的一个核心组件,它提供了动态数组的功能。与固定大小的数组不同,`ArrayList`可以随着元素的增加而自动扩展其容量。在JDK 1.8中,`...
一个C++(Ubuntu16.04+QT5.9.1)通过JNI,调用JAVA类及方法的示例。通过JNI传递和返回多种类型的参数,boolean ,int,String,ArrayList,ArrayList嵌套ArrayList<ArrayList<String>>等。
ArrayList是Java集合框架中常用的动态数组,它是List接口的一个实现,允许存储包括null在内的所有元素。ArrayList的主要特点是通过数组来存储元素,提供了丰富的操作方法,包括添加、删除、修改和查询等。下面是...