Java程序设计语言+Java虚拟机+API类库统称为JDK。
对于构建分布式Java应用而言,最重要的有集合、并发、网络(包括网络BIO以及网络NIO)以及序列化,反序列化。
[b]一、集合包[/b]
集合包是Java最常用的包,最常用的有Collection和Map两个接口实现的类,Collection用于存放单个对象,Map用于存放Key-Value形式的键值对。
1、Collection中常用的又分为两个子接口:List和Set,两者明显的区别是List支持重复的对象,而Set不能。
List实现的类有:ArrayList/LinkedList/Vector/Stack;
Set实现的类有:HashSet/TreeSet
[List]
[color=darkred]ArrayList[/color]:基于数组方式实现,非线程安全的
[color=green]LinkedList[/color]:基于双向链表实现的,非线程安全
[color=blue]Vector[/color]:与ArrayList一样,也是基于数组实现的,是基于Synchronized实现的线程安全的ArrayList。
[color=gray]Stack[/color]:继承于Vector,实现了LIFO的弹出与压入的操作。
[Set]
HashSet:基于HashMap实现,非线程安全的。
TreeSet:基于TreeMap实现,非线程安全
特别注意的:对于Set,不能使用get(Object key)方法获取存储在Set集合中的对象,只能通过遍历来实现。
2、Map中常用的类有HashMap和TreeMap
[color=olive]HashMap[/color]:采用数组方式存储key、value构成的Entry对象,非线程安全的,在遍历时无法保持顺序的。
[color=red]TreeMap[/color]:基于红黑树实现,非线程安全,一个支持排序的Map实现。
在单线程下:
在增加元素上,ArrayLisy的性能较差。
在查找元素上,ArrayList、LinkedList、Vector、Stack的性能略差一些,Set、Map类型速度会快一些。
在删除元素上,除除TreeSet和TreeMap外,其他集合类的性能基本无差距。TreeSet基于TreeMap,TreeMap删除时需要排序,所以性能低一些。
在多线程下:
哥集合类的性能下降非常明显,并且随着线程的增加,下降的就越快,相对而言,Set和Map的实现表现好一些。
对于构建分布式Java应用而言,最重要的有集合、并发、网络(包括网络BIO以及网络NIO)以及序列化,反序列化。
[b]一、集合包[/b]
集合包是Java最常用的包,最常用的有Collection和Map两个接口实现的类,Collection用于存放单个对象,Map用于存放Key-Value形式的键值对。
1、Collection中常用的又分为两个子接口:List和Set,两者明显的区别是List支持重复的对象,而Set不能。
List实现的类有:ArrayList/LinkedList/Vector/Stack;
Set实现的类有:HashSet/TreeSet
[List]
[color=darkred]ArrayList[/color]:基于数组方式实现,非线程安全的
[color=green]LinkedList[/color]:基于双向链表实现的,非线程安全
[color=blue]Vector[/color]:与ArrayList一样,也是基于数组实现的,是基于Synchronized实现的线程安全的ArrayList。
[color=gray]Stack[/color]:继承于Vector,实现了LIFO的弹出与压入的操作。
[Set]
HashSet:基于HashMap实现,非线程安全的。
TreeSet:基于TreeMap实现,非线程安全
特别注意的:对于Set,不能使用get(Object key)方法获取存储在Set集合中的对象,只能通过遍历来实现。
2、Map中常用的类有HashMap和TreeMap
[color=olive]HashMap[/color]:采用数组方式存储key、value构成的Entry对象,非线程安全的,在遍历时无法保持顺序的。
[color=red]TreeMap[/color]:基于红黑树实现,非线程安全,一个支持排序的Map实现。
在单线程下:
在增加元素上,ArrayLisy的性能较差。
在查找元素上,ArrayList、LinkedList、Vector、Stack的性能略差一些,Set、Map类型速度会快一些。
在删除元素上,除除TreeSet和TreeMap外,其他集合类的性能基本无差距。TreeSet基于TreeMap,TreeMap删除时需要排序,所以性能低一些。
在多线程下:
哥集合类的性能下降非常明显,并且随着线程的增加,下降的就越快,相对而言,Set和Map的实现表现好一些。