集合(List、Set、Map)

一、集合与数组

数组:长度固定,数组元素可以是基本类型,也可以是对象。不适合在对象数量未知的情况下使用。

集合:(只能存储对象,对象类型可以不一样)的长度可变,可在多数情况下使用。

Java集合类存放于 java.util 包中,是一个用来存放对象的容器。

注意:

①、集合只能存放对象。比如你存一个 int 型数据 1放入集合中,其实它是自动转换成 Integer 类后存入的,Java中每一种基本类型都有对应的引用类型。

②、集合存放的是多个对象的引用,对象本身还是放在堆内存中。

③、集合可以存放不同类型,不限数量的数据类型。

Collection接口(add()、contains()、size()、clear()、isEmpty()、addAll()、containsAll()、remove()、removeAll())

子接口:List、Set

List:有序、可重复(get(index)下标从0开始,set(index,element))

Set:无序、不可重复集

Iterator,所有的集合类,都实现了Iterator接口。

1.hasNext()是否还有下一个元素。
2.next()返回下一个元素。
3.remove()删除当前元素。

 iterator的形式:
Iterator it = arr.iterator();
while(it.hasNext()){ object o =it.next(); ...}

List转换为数组:toArray()

数组转换为List:  Arrays.asList()

集合的排序:Collections.sort()

Vector和ArrayList

vector是线程同步的,线程安全的。

vector增长率为目前数组长度的100%

arraylist增长率为目前数组长度的50%。

Map(put()、get()、containskey()

Map集合

实现类:HashMap、Hashtable、LinkedHashMap和TreeMap

 

HashMap

根据键的HashCode值存储数据,无序,键唯一,值可重复,非同步的

Hashtable

HashMap的线程安全版,它支持线程的同步任一时刻只有一个线程能写Hashtable

不允许记录的键或者值为null,同时效率较低。

ConcurrentHashMap

线程安全,并且锁分离。ConcurrentHashMap内部使用段(Segment)来表示这些不同的部分,每个段其实就是一个小的hash table,它们有自己的锁。只要多个修改操作发生在不同的段上,它们就可以并发进行。

LinkedHashMap

LinkedHashMap保存了记录的插入顺序,在用Iteraor遍历LinkedHashMap时,先得到的记录肯定是先插入的,在遍历的时候会比HashMap慢,有HashMap的全部特性。

TreeMap

TreeMap实现SortMap接口,能够把它保存的记录根据键排序,默认是按键值的升序排序(自然顺序),也可以指定排序的比较器,当用Iterator遍历TreeMap时,得到的记录是排过序的。不允许key值为空,非同步的

 

 

 

猜你喜欢

转载自www.cnblogs.com/zouhong/p/9445813.html