java基础知识记录

1. java集合类,然后重点看看 ArrayList   LinkedList   HashMap的实现方式。

2. 看看json  xml 的解析方式

3. Http  Tcp 在android端的调用方式

4. 看APNS的服务。

5. 淘宝的android测试框架

 

Collection
├List(有序的Collection集合,此接口能准确的控制每个元素的插入位置,与Set的区别是:允许有相同元素)
│├LinkedList    (没有实现同步,需要快速插入、删除元素使用 LinkedList)
│├ArrayList(实现可变大小的数组,非同步,如果需要快速随机访问元素,则使用ArrayList)
│└Vector(类似ArrayList,但实现同步,h)
│ └Stack
└Set(是一种不包含重复元素的Collection,即任意两个元素e1 和e2,都有e1.equals(e2)=false)
Map(Map没有继承Collection接口,Map提供key到value的映射,Map中不能包含相同的key)
├Hashtable(实现同步,继承Map接口,实现一个key-value的哈希表,)
├HashMap(非同步,类似Hashtable)
└WeakHashMap

 

总结:

1. 如果涉及到 堆栈、队列,则考虑使用List,需要快速插入、删除元素,应该使用LinkedList,如果需要快速随     机访问元素则考虑使用ArrayList。

2. 如果在单线程环境下,或者访问仅仅在一个线程中进行,考虑非同步的类,其效率较高,如果多个线程

    可能同时操作一个类,应该使用同步的类。

3. 要特别注意对哈希表的操作,作为key的对象要正确复写equals和hashCode方法。

4. 尽量返回接口而非实际的类型,如返回List而非 ArrayList,这样如果以后需要将ArrayList换成LinkedList,客户端的代码不需要改变。这就是针对抽象编程。

 

同步性:

在上边的括号后都有描述

 

数据增长:

从内部实现来讲,ArrayList和Vector都是使用数组(Array)来控制集合中的对象,当你向这两种类型中增加元素时,当元素的数组超过了内部数组目前的长度,Vector默认情况下自动增长原来一倍的数组长度(vector增长率为目前数组长度的100%),ArrayList是增长50%(目前数组长度

的50%).所以最后你获得的这个集合所占的空间总是比你需要的要大。所以,如果你要在集合中

保存大量的数据,那么使用Vector有一些优势

 

使用模式:

        在ArrayList  和Vector中,从一个指定的位置(通过索引)查找数据或者在集合的末尾增加、移除一个元素所花费的时间是一样的,这个时间我们用o(1)来表示。

      但是在其他位置(非末尾)增加或者删除元素,则花费的时间呈线性增长O(n-i),其中n表示集合中元素的个数,i表示元素增加、移除的索引位置,为什么会这样呢?

     因为在进行上述操作的时候,集合中第i和第i之后的所有元素,都要执行移位的操作,这又意味着什么呢?

     这意味着,你只是查找特定位置的元素,或只是在集合的末端增加、移除元素那么使用  vector和ArrayList都可以。如果是其他操作,你最好选择其他的操作集合类,LinkedList集合类在增加或移除集合中任意位置的元素所花费的时间都是一样的:o(1),但它在索引元素时比较慢:o(i),其中i是索引的位置,

 

ArrayList  Vector LinkedList  使用总结

ArrayList和 Vector采用数组方式存储数据,此数组元素数大于实际存储的元素,以便增加和插入元素,都允许直接按序号索引元素,但插入数据要涉及数组元素移动等  内存操作,所以  索引数据快,而插入数据慢。Vector由于使用synchronized(线程安全),所以性能上比ArrayList要差。

 

LinkedList使用双向链表方式  实现存储,按序号索引需要  向前或向后 遍历,但插入数据只需记录本项的前后项即可,所以插入数据速度快。

 

ArrayList  和LinkedList 的比较

1. ArrayList 采用动态数组的数据结构,LinkedList  基于链表的数据结构。

2. 对于随机访问的  get 和set,ArrayList要优于  LinkedList,因为LinkedList 要移动指针。

3. 对于新增 和删除操作 ,add remove,LinkedList要占优势,因为ArrayList要移动数据。

    对于第三点要注意,若只对单条数据的插入和删除,ArrayList 的速度反而优于LinkedList,但若是

批量随机的插入删除数据,LinkedList  速度要优于ArrayList.因为ArrayList,每插入一条数据,都要移动插入点以及以后的元素。

 

参考:http://blog.csdn.net/softwave/article/details/4166598

 

HashMap  HashTable

1. HashMap  通过 hashCode  对其内容进行快速查找。

2. 在Map 中插入、删除 和定位元素,HashMap是最好的选择,使用HashMap要求添加的key(如果是一个类)明确定义了hashCode  和equals实现。

 

3. 历史原因:Hashtable是基于陈旧的dictionary类的,HashMap是java1.2引入的Map接口的实现。

4. 同步性:HashTable是 线程安全的,也就是说同步的,而HashMap是线程不安全的,不是同步的。

5. 值:只有HashMap 可以让你 将空值  作为一个表的条目 的key或value

 

 

 

 

 

     

你可能感兴趣的:(Collection类)