arraylist

java ArrayList的序列化分析

僤鯓⒐⒋嵵緔 提交于 2020-03-11 08:27:26
一、绪论 所谓的JAVA序列化与反序列化,序列化就是将JAVA 对象以一种的形式保持,比如存放到硬盘,或是用于传输。反序列化是序列化的一个逆过程。 JAVA规定被序列化的对象必须实现java.io.Serializable这个接口,而我们分析的目标ArrayList同样实现了该接口。 通过对ArrayList源码的分析,可以知道ArrayList的数据存储都是依赖于 elementData数组,它的声明为: transient Object[] elementData; 注意transient修饰着elementData这个数组。 1、先看看transient关键字的作用 我们都知道一个对象只要实现了Serilizable接口,这个对象就可以被序列化,java的这种序列化模式为开发者提供了很多便利,我们可以不必关系具体序列化的过程,只要这个类实现了Serilizable接口,这个类的所有属性和方法都会自动序列化。 然而在实际开发过程中,我们常常会遇到这样的问题,这个类的有些属性需要序列化,而其他属性不需要被序列化,打个比方,如果一个用户有一些敏感信息(如密码,银行卡号等),为了安全起见,不希望在网络操作(主要涉及到序列化操作,本地序列化缓存也适用)中被传输,这些信息对应的变量就可以加上 transient关键字。换句话说,这个字段的生命周期仅存于调用者的内存中而不会写到磁盘里持久化

c#范型

主宰稳场 提交于 2020-03-11 08:20:36
泛型介绍: 范型类和范型方法同事具备 可重用性、类型安全和效率 ,这是非范型类和非范型方法无法具备的。 所谓范型,即通过参数化类型实现同一份代码上操作多种数据类型,范型编程是一种编程范式, 它利用“参数化类型”将类抽象化,从而达到更灵活的复用。 机制: C# 泛型类型替换是在运行时执行的,从而为实例化的对象保留了泛型类型信息。C#泛型代码在被编译为IL代码和无数据时,采用特殊的占位符来表示泛型类型,并用专有的IL指令支持泛型操作。而真正的泛型实例化工作以"on-demand"的方式,发生在JIT编译时。 举例: 泛型通常用与集合以及作用于集合的方法一起使用。.NET Framework 2.0 版类库提供一个新的命名空间 System.Collections.Generic ,其中包含几个新的基于泛型的集合类。建议面向 2.0 版的所有应用程序都使用新的泛型集合类,而不要使用旧的非泛型集合类,如 ArrayList 。 C#泛型编译机制: 第一轮编译时,编译器只为Stack<T>(栈算法)类型产生“泛型版”的IL代码与元数据-----并不进行泛型类型的实例化,T在中间只充当占位符 JIT编译时,当JIT编译器第一次遇到Stack<int>时,将用int替换“泛型版”IL代码与元数据中的T---进行泛型类型的实例化。 CLR为所有类型参数为“引用类型”的泛型类型产生同一份代码

ArrayList、LinkedList区别及实现

随声附和 提交于 2020-03-11 03:24:51
ArrayList /** * 默认初始容量. */ private static final int DEFAULT_CAPACITY = 10; /** * 用于空实例的共享空数组实例. */ private static final Object[] EMPTY_ELEMENTDATA = {}; /** * 用于默认大小的空实例的共享空数组实例。 * 我们将其与EMPTY_ELEMENTDATA区分开来,以了解在添加第一个元素时应该膨胀多少. */ private static final Object[] DEFAULTCAPACITY_EMPTY_ELEMENTDATA = {}; /** * 存储ArrayList元素的数组缓冲区。 * ArrayList的容量是这个数组缓冲区的长度。 * 当添加第一个元素时,任何带有elementData==DEFAULTCAPACITY_EMPTY_ELEMENTDATA的空ArrayList都将被扩展为DEFAULT_CAPACITY. */ transient Object[] elementData; // non-private to simplify nested class access /** * ArrayList的大小(它包含的元素的数量). * * @serial */ private int size; /*

剑指offer题解56-60(Java)

纵然是瞬间 提交于 2020-03-11 01:02:51
文章目录 56.删除链表中的重复节点 57.二叉树的下一个节点 58.对称二叉树 59.之字形打印二叉树 60.二叉树打印成多行 56.删除链表中的重复节点 在一个排序的链表中,存在重复的结点,请删除该链表中重复的结点,重复的结点不保留,返回链表头指针。 例如,链表1->2->3->3->4->4->5 处理后为 1->2->5 /* public class ListNode { int val; ListNode next = null; ListNode(int val) { this.val = val; } } */ public class Solution { public ListNode deleteDuplication ( ListNode pHead ) { if ( pHead == null || pHead . next == null ) { return pHead ; } //辅助节点,处理头节点就是重复节点的情况 ListNode head = new ListNode ( Integer . MIN_VALUE ) ; head . next = pHead ; ListNode last = head ; ListNode cur = head . next ; while ( cur != null ) { if ( cur . next

C#中的集合类

拟墨画扇 提交于 2020-03-10 12:03:59
C#中的集合类 1.System.Colloctions中表示集合的行为的接口有: 1)ICollection 定义所有集合的大小、枚举数和同步方法。派生于IEnumerable 它定义了集合类最基本的行为,所有的集合类都实现了这个接口(基接口) 但是它的行为太过基本:主要就是一个Count属性,单独实现它没有太大意义 2)IEnumerable 公开枚举数,该枚举数支持在集合上进行简单迭代 它只有一个方法 GetEnumerator(),该方法可以返回一个IEnumerator接口,通过它可以遍历集合 基本上所有的集合类都实现了这个接口 3)IList IList实现是可排序且可按照索引访问其成员的值的集合,它本身实现了ICollection和IEnumerable接口 是所有列表的抽象基类。IList 实现有三种类别:只读、固定大小、可变大小。 4)IDictionary IDictionary实现是键/值对的集合,它本身实现了ICollection和IEnumerable接口 是键/值对的集合的基接口。IDictionary 实现有三种类别:只读、固定大小、可变大小。 IDictionary可称为字典、映射或散列表,它根据键(任意类型)来访问值 ------------------------------ 2.System.Collections中可以直接使用的集合类有: 1

C#集合类

眉间皱痕 提交于 2020-03-10 11:46:06
C#集合类 1.System.Colloctions中表示集合的行为的接口有: 1)ICollection 定义所有集合的大小、枚举数和同步方法。派生于IEnumerable 它定义了集合类最基本的行为,所有的集合类都实现了这个接口(基接口) 但是它的行为太过基本:主要就是一个Count属性,单独实现它没有太大意义 2)IEnumerable 公开枚举数,该枚举数支持在集合上进行简单迭代 它只有一个方法 GetEnumerator(),该方法可以返回一个IEnumerator接口,通过它可以遍历集合 基本上所有的集合类都实现了这个接口 3)IList IList实现是可排序且可按照索引访问其成员的值的集合,它本身实现了ICollection和IEnumerable接口 是所有列表的抽象基类。IList 实现有三种类别:只读、固定大小、可变大小。 4)IDictionary IDictionary实现是键/值对的集合,它本身实现了ICollection和IEnumerable接口 是键/值对的集合的基接口。IDictionary 实现有三种类别:只读、固定大小、可变大小。 IDictionary可称为字典、映射或散列表,它根据键(任意类型)来访问值 ------------------------------ 2.System.Collections中可以直接使用的集合类有: 1

参数名ASCII码从小到大排序(生成签名 )

不羁岁月 提交于 2020-03-10 06:09:49
1、 将整个json报文(剔除signature字段)参数按照参数名ASCII码从小到大排序(字典序),使用URL键值对的格式(key1=value1&key2=value2…)拼接成字符串signBlock。 2、 获取工作密钥signKey, 在signBlock最后拼接上signKey得到signBlock&signKey字符串,,得到sign值signature。 /** * 生成加签Block * * @param jsonString 原始报文 * @return 加签BLOCK */ private String generateSignBlockString(String jsonString) { try { if (null != jsonString && 0 != jsonString.trim().length()) { rglog.debug("jsonString=[{}]", jsonString);//原始报文json JSONObject jsonObject = JSONObject.parseObject(jsonString, Feature.OrderedField); Map maps = jsonObject.getInnerMap(); //Map maps = (Map)JSON.parse(jsonString);

C#集合类

你。 提交于 2020-03-10 06:01:04
1.System.Colloctions中表示集合的行为的接口有: 1)ICollection 定义所有集合的大小、枚举数和同步方法。派生于IEnumerable 它定义了集合类最基本的行为,所有的集合类都实现了这个接口(基接口) 但是它的行为太过基本:主要就是一个Count属性,单独实现它没有太大意义 2)IEnumerable 公开枚举数,该枚举数支持在集合上进行简单迭代 它只有一个方法 GetEnumerator(),该方法可以返回一个IEnumerator接口,通过它可以遍历集合 基本上所有的集合类都实现了这个接口 3)IList IList实现是可排序且可按照索引访问其成员的值的集合,它本身实现了ICollection和IEnumerable接口 是所有列表的抽象基类。IList 实现有三种类别:只读、固定大小、可变大小。 4)IDictionary IDictionary实现是键/值对的集合,它本身实现了ICollection和IEnumerable接口 是键/值对的集合的基接口。IDictionary 实现有三种类别:只读、固定大小、可变大小。 IDictionary可称为字典、映射或散列表,它根据键(任意类型)来访问值 ------------------------------ 2.System.Collections中可以直接使用的集合类有: 1

Java——集合

假如想象 提交于 2020-03-10 02:59:49
文章目录 五、集合 1、集合简介 2、List 2.1 ArrayList 2.2 LinkedList 2.3 区别 2.4 遍历List 2.5 List和Array转换 List -> Array Array -> List 3、编写equals方法 4、Map 4.1 遍历Map 5、编写equals和hashCode 6、EnumMap 7、TreeMap 8、Properties 9、Set 9.1 TreeSet 10、Queue 10.1 LinkedList 11、PriorityQueue 12、Deque 13、Stack 14、Collections 14.1 创建空集合 14.2 创建单元素集合 14.3 排序 14.4 洗牌 14.5 不可变集合 五、集合 1、集合简介 在Java中,如果一个Java对象可以在内部持有若干其他Java对象,并对外提供访问接口,我们把这种Java对象称为集合。很显然,Java的数组可以看作是一种集合。 String [ ] ss = new String [ 10 ] ; // 可以持有10个String对象 ss [ 0 ] = "Hello" ; // 可以放入String对象 String first = ss [ 0 ] ; // 可以获取String对象 为什么在又了数组这种数据类型后,还需要其他集合类?

Java-泛型

左心房为你撑大大i 提交于 2020-03-10 02:57:48
泛型:是一种未知的数据类型,当我们不知到使用什么数据类型的时候可以使用泛型 泛型也可以看成是一个变量,用来接收数据类型: E e :Element 元素 | T E Type 类型 ArrayList集合在定义的时候,不知道集合中都会有什么数据类型,所以类型使用泛型 public class ArrayList{ public boolean add(E e){} public E get(int index){} } 创建集合对象的时候就会确定泛型的数据类型 会把数据类型作为参数传递,赋值给泛型. 使用泛型的好处: ================= public class FanXingCls { public static void main ( String [ ] args ) { // s 来源: CSDN 作者: 小 冷 链接: https://blog.csdn.net/weixin_45540985/article/details/104758428