arraylist

对象的序列化和反序列化浅析

时间秒杀一切 提交于 2020-03-01 09:30:58
对象的序列化和反序列化浅析 什么是序列化和反序列化?   对象序列化,就是将Object转换成byte序列,反之叫对象的反序列化   序列化流(ObjectOutputStream),是过滤流----writeObject   反序列化流(ObjectInputStream)---readObject 序列化接口(Serializable)介绍   这是一个位于java.io包下的空接口, 没有任何方法,只是一个标准 ,这不更是接口的精髓所在嘛,哈哈,对于接口的概念还比较模糊的朋友可参考我的这一篇博文: Java基础之抽象类与接口   此外,对象必须实现此序列化接口 ,才能进行序列化,否则将抛出异常 transient关键字   在实际开发过程中,我们常常会遇到这样的问题,这个类的有些属性需要序列化,而其他属性不需要被序列化,打个比方,如果一个用户有一些敏感信息(如密码,银行卡号等),为了安全起见,不希望在网络操作(主要涉及到序列化操作,本地序列化缓存也适用)中被传输,这些信息对应的变量就可以加上transient关键字。换句话说,这个字段的生命周期仅存于调用者的内存中而不会写到磁盘里持久化。   总之,java 的transient关键字为我们提供了便利,你只需要实现Serilizable接口,将不需要序列化的属性前添加关键字transient,序列化对象的时候

给定一棵二叉树,设计一个算法,创建含有某一深度上所有结点的链表(比如:若一棵树的深度为D,则会创建出D个链表)

痞子三分冷 提交于 2020-03-01 08:31:59
解法:可以用任意的方式遍历整棵树,只要记住结点位于哪一层即可。 可用将前序遍历算法稍作修改,将level+1传入下一个递归调用。下面是使用深度优先搜索的实现代码。 void createlLinkedList(TreeNode root,ArrayList<LinkedList<TreeNode>> lists,int level) { if(root==null) return;//终止条件 LinkedList<TreeNode> list=null; if(lists.size()==level)//该层不在链表中 { list=new LinkedList<TreeNode>(); /*以先序遍历所有层级,因此,若这是第一次访问第i层,则表示我们已经访问过第0到 i-1层,因此,我们可以安全地将这一层加到链表末端 */ lists.add(list); } else { list=lists.get(level); } list.add(root); createLevelLinkedList(root.left,lists,level+1); createLevelLinkedList(root.right,lists.level+1); } ArrayList<LinkedList<TreeNode>> createLevelLinkedList(TreeNode

ArrayList源码剖析

喜夏-厌秋 提交于 2020-03-01 08:28:56
ArrayList源码剖析 1.源码剖析: public class ArrayList < E > extends AbstractList < E > implements List < E > , RandomAccess , Cloneable , java . io . Serializable { private static final long serialVersionUID = 8683452581122892189 L ; //序列版本号 private static final int DEFAULT_CAPACITY = 10 ; //初始容量为10 private static final Object [ ] EMPTY_ELEMENTDATA = { } ; //Object数组,用来实例化不带容量大小的构造函数 指定ArrayList容量为0时,返回空数组 private transient Object [ ] elementData ; //保存ArrayList中元素的数组 private int size ; //元素个数 ArrayList实际大小 public ArrayList ( int initialCapacity ) { //ArrayList带容量大小的构造函数 super ( ) ; if (

ArrayList和LinkedList的区别

依然范特西╮ 提交于 2020-03-01 08:24:56
一般大家都知道ArrayList和LinkedList的大致区别: 1.ArrayList是实现了基于动态数组的数据结构,LinkedList基于链表的数据结构。 2.对于随机访问get和set,ArrayList觉得优于LinkedList,因为LinkedList要移动指针。 3.对于新增和删除操作add和remove,LinedList比较占优势,因为ArrayList要移动数据。 这一点要看实际情况的。 若只对单条数据插入或删除,ArrayList的速度反而优于 LinkedList。但若是批量随机的插入删除数据,LinkedList的速度大大优于ArrayList. 因为ArrayList每插入一条数据,要移动插入点及之后的所有数据。 这一点我做了实验。在分别有200000条“记录”的ArrayList和LinkedList的首位插入20000条数据,LinkedList耗时约 是ArrayList的20分之1。 for ( int m = 0 ;m < 20000 ;m ++ ) { linkedlist.add(m, null ); // 当在200000条数据之前插入20000条数据时,LinkedList只用了1125多ms.这就是LinkedList的优势所在 } long time4 = new Dte().getTime(); System.out

Android ArrayList

故事扮演 提交于 2020-03-01 07:23:19
在Android开发中我们经常需要对数据进行分类和操作,对于轻量级的数据存储我们可能不需要动用SQLite或效率以及类库不完善的XML, 由于 SharedPreferences不具备数据枚举方法,如果仅仅是一个String或Int数组可以通过一个标记分割设计外, 我们还是主要来看看 Android或者说Java提供的基础数据类型辅助类ArrayList LinkedList Set HashMap的介绍, 如果你熟悉C++的STL或Boost库可以略过本文。 在Java中提供了Collection和Map接口。 其中List和Set继承了Collection接口; 同时用Vector、ArrayList、 LinkedList三个类实现List接口,HashSet、TreeSet实现Set接口。 直接有HashTable、HashMap、 TreeMap实现Map接口。 Vector基于Array的List,性能也就不可能超越Array,并且Vector是“sychronized”的,这个也是Vector和 ArrayList的唯一的区别。 ArrayList:同Vector一样是一个基于Array的,但是不同的是ArrayList不是同步的。 所以在性能上要比Vector优越一些。 Android123提示大家适用于顺序性的查找 LinkedList:不同于前面两种List

List、Array与ArrayList

前提是你 提交于 2020-03-01 06:17:46
数组在内存中是连续存储的,所以它的索引速度很快,而且赋值和修改元素也非常快,比如: string[] s=new string[3]; //赋值 s[0]="a"; s[1]="b"; s[2]="c"; //修改 s[1]="b1"; 但是数组也存在一些不足的地方,比如在两个数据中插入数据,还有我们在声明数组时必须指明数组的长度,过长会是的内存浪费,过短又会造成数据溢出,C#中最先提供了ArrayList来解决这些缺点。 ArrayList是.Net Framework提供的用于数据存储和检索的专用类,它是命名空间System.Collections下的一部分。它的大小是按照其中存储的数据来动态扩充与收缩的。所以,我们在声明ArrayList对象时并不需要指定它的长度。ArrayList继承了IList接口,所以它可以很方便的进行数据的添加,插入和移除.比如: ArrayList list = new ArrayList(); //新增数据 list.Add("abc"); list.Add(123); //修改数据 list[2] = 345; //移除数据 list.RemoveAt(0); //插入数据 list.Insert(0, "hello world"); 从上面实例看,ArrayList好像是解决了所有的缺点,那么它就应该是完美的了,为什么C#2

正确认识Arrays.asList方法

核能气质少年 提交于 2020-03-01 06:15:26
Arrays工具类提供了一个方法 asList , 使用该方法 可以将一个 变长参数 或者 数组 转换成 List 。 其源代码如下: /** * Returns a fixed-size list backed by the specified array. (Changes to * the returned list "write through" to the array.) This method acts * as bridge between array-based and collection-based APIs, in * combination with {@link Collection#toArray}. The returned list is * serializable and implements {@link RandomAccess}. * * <p>This method also provides a convenient way to create a fixed-size * list initialized to contain several elements: * <pre> * List<String> stooges = Arrays.asList("Larry", "Moe", "Curly"); * </pre> * *

java面试题笔记2015-08-20

社会主义新天地 提交于 2020-02-29 21:53:44
为了找到一份好的java工作,网上找来一份java面试题,对自己掌握的知识进行查缺补漏 2015-8-20 begin 1. 编写程序,完成文件复制功能 public static void copyFile(File srcFile,File destFile)throws IOException{ if(!srcFile.exists()){ throw new IllegalArgumentException("文件:"+srcFile+"不存在"); } if(!destFile.exists()){ throw new IllegalArgumentException(destFile+"不是文件"); } FileInputStream in = new FileInputStream(srcFile); FileOutputStream out = new FileOutputStream(destFile); byte[] buf = new byte[8 * 1024]; int bytes = 0; while((bytes = in.read(buf , 0 , buf.length))!= -1){ out.write(buf,0,bytes); out.flush(); } out.close(); in.close(); } /* * 文件 */

详解 泛型 与 自动拆装箱

旧街凉风 提交于 2020-02-29 21:38:50
目录 泛型: 自动拆装箱: 泛型: 首先,本人来介绍一下 什么是泛型 : 泛型概述 : 是一种把类型明确的工作 推迟到创建对象 或者 调用方法的时候 才去 明确的特殊的类型 。 参数化类型 ,把类型当作参数一样的传递。 通俗一点来讲:泛型 是JAVA 中一种十分强大的机制,因为它能够完成在 未知元素类型 的情况下对元素进行操作。 但是,泛型 只在编译阶段有效 ,即在编译过程中,程序会正确的检验泛型结果。而编译成功后,* .class 文件是不包含任何泛型信息的 (这就是JVM 的泛型擦除机制) 并且,泛型类只能在子类或者父类被调用。 那么,本人再来讲解一下使用 泛型的好处 : 泛型的好处 : (1): 把运行时期的问题提前到了编译期间 (2): 避免了强制类型转换 (3):优化了程序设计,解决了黄色警告线 ------------------------------------------------------------ 注意:泛型只在 编译期 有效 但在运行期就 擦除 了 (至于 泛型擦除机制 ,本人将在后续的博文中提到,并且对于这个机制,本人也提出了相应的解决方法,希望同学们对此加以注意!!!) 现在,本人来讲解一下有关 泛型的基本格式 : 泛型类 -------- 权限修饰符(public...) class 类名<泛型类型1,…> 泛型方法 ----- 权限修饰符

ArrayList工作原理

泪湿孤枕 提交于 2020-02-29 14:40:17
1.前言 List接口中,重要的两个实现是ArrayList和LinkedList,其中ArrayList又比LinkedList常用。这是因为ArrayList的读取性能远远高于LinkedList。本篇博文将介绍ArrayList,稍后介绍LinkedList及其两者的区别。 2.ArrayList简介 2.1 ArrayList是什么 Resizable-array implementation of the List interface. Implements all optional list operations, and permits all elements, including null. In addition to implementing the List interface,this class provides methods to manipulate the size of the array that is used internally to store the list. ArrayList是实现了List接口的、大小可变的数组队列 。能够实现所有List接口的可选操作,并允许包括 null 在内的所有元素。除了实现 List 接口外,此类还提供一些方法来存储列表的数组的大小。(此类大致上等同于 Vector 类,除了此类是不同步的。)--