java集合框架

来源:互联网 发布:linux终端进度条 编辑:程序博客网 时间:2024/06/06 03:29

我们知道,String的长度不可变,于是出现了StringBuilder和StringBuffer,同样的,在存放数据的时候,我们有的时候会觉得数组不能变也很难用,于是乎,我们有了集合。

集合和数组不一样的点在于数组可以存放基本数据类型的值,也可以存放对象类型,而集合中只能保存对象的引用。

集合主要由Collection和Map派生出来,在这里,我们先说Collection接口。

Collection

|--Set 无序的 不可重复的

|--List 有序的 可重复的

|--Queue 队列的

首先说的是Collection接口的方法

boolean add(Object o)向集合中添加一个元素,如果这个添加生效了,那么则返回true

boolean addAll(Collection c)

void clear()清除后,集合length变成0

boolean contains(Object o)返回集合里是否包含着指定元素

boolean contiansAll(Collection c)

boolean isEmpty()当长度为0时 true 否则为false

Iterator iterator()返回一个Iterator的对象,可以用来遍历 

boolean remove(Object o)删除指定元素o,当包含多个o的时候,只删除第一个o

boolean removeAll(Collection c)删除集合中c所包含的所有元素

boolean retainAll(Collection c)从集合中删除集合c中不包含的元素,和上面一个方法正好相反

int size()返回集合里元素的个数

Object[] toArrary()把集合转成一个数组,所有的集合元素转成对应的数组元素


以上方法都可以在API 中找到,并且还有更多的方法,简单的说,就是添加,删除,返回个数,以及清空集合。

使用Iterator可以遍历集合元素,PS Iterator和Collection是紧密相连的

1Iterator it = c.iterator(); 

2 while(it.hasNext()){

System.out.println(it);

//if(c.equals("aaa")){

c.remove();

}

}

要注意的是,我们不能在其中删除,可能会引发ConcurrentModificationException;

遍历元素还可以用foreach。这里就不演示了

Set 均是线程不安全的

|--HashSet

|--TreeSet

|--EnumSet

HashSet

对于HashSet来说,HashSet是Set的典型实现,大多时候使用Set集合时就是使用HashSet

特点: 无序的(无序不是随机)

不是同步的

值可以是null


当往HashSet里面存放对象的时候,因为HashSet是先通过对对象调用hashCode()方法得到它的hashCode值,然后根据这个值来觉得放在哪里,如果两个对象仅仅是重写了equals方法的话,因为hashCode值不同,所以这两个对象都可以放进去,但可能这两个对象是有着相同的属性的,我们希望它是不能放进去的,所以我们也要重写hashCode()方法

HashSet还有一个子类叫做LinkedHashSet类,它添加的时候是按顺序添加的,使用了链表来维持次序,所以性能略低于HashSet,但是遍历的时候可以按顺序遍历

TreeSet

是SortedSet接口的实现类,可以保证集合元素处于排序状态,采用红黑树的数据结构来存储集合元素。以后有机会再补吧

EnumSet

是一个为枚举类设计的Set,其中的元素必须是枚举类型的,以后有机会再补

Set的总结:选用:除了需要一个保持顺序的Set时用TreeSet,其余时候全都用HashSet

这三个set都是线程不安全的


List

|--ArraryList线程不安全的

|--Vector 线程安全的

List

作为Collection的子接口,除了可以用Collection的方法以外,由于List是有序的,所以我们在对于顺序上多了一些方法来操作

void add(int index,Object o)

void addAll(int index, Collection c)

Object get(int index)

int indexOf(Object o)

int lastIndexOf(Object o)

Object remove(int index)

Object set(int index,Object element) //替换,但是不能超过原List的size-1;

List subList(int fromIndex,int toIndex) //包含前面,不包含后面,返回其中元素组成的子集合


void replaceAll(UnaryOperator operator):根据新的计算规则重新设置List集合的所有元素

void sort(Comparator c)根据Coparator参数对List集合的元素排序

简单的说,就是基于索引的进行操作

对于List,判断两个对象相等只要通过equals()方法进行比较就可以了

List的实现类ArraryList和Vector,

void ensureCapacity(int minCapacity)

void trimToSize()

ArraryList和Vector在用法上几乎完全相同,最大的区别是ArraryList是线程不安全的Vector是线程安全的


Map Key-Value

|--HashMap 线程不安全 可以null

|--Hashtable线程安全 不可以null

Map 最大的特点就是一一对应的key和value

主要的方法

void clear();

boolean containsKey(Object key)//只要对象通过equals方法比较返回true即可

boolean containsValue(Object value)

boolean isEmpty()

Set entrySet()返回Map中包含的key-value对所组成的set集合,每个集合元素都是Map.Entry对象(Entry是Map的内部类)

Set keySet()返回该Map中所有key组成的Set集合

Object get(Object key) 返回指定key所对应的value,如果不包含该key,则返回null

Object put(Object key,Object Value)添加一个kv对,如果有了,则会覆盖。

void putAll(Map m)

Object remove(Object key)

boolean remove(Object key,Object value)成功删了 返回true

int size()

Collection values()返回该map里所有value组成的collection

内部类Entry 封装了一个键值对:有以下三个方法

Object getKey()

Object getValue()

Object setValue(V value)

HashMap和Hashtable 

HashMap 线程不安全

|--LinkedHashMap 类似于LinkedHashSet

Hashtable 线程安全


Collections工具类

主要操作: 1 排序(针对于List)

|-- void reverse(List list) 反转

void shuffle(List list)随机排序(洗牌)

void sort(List list)按升序排列 

void sort(List list,Comparator c)根据C对List进行排序

void swap(List list,int i , int j)交换ij元素

void rotate(List list ,int distance)disance为正数的时候,将list集合的后distance个元素“整体”移动到前面

distance为负数的时候,将list集合的前distance个元素移到后面

2 查找、替换

max(Collection coll)

min(Collection coll)

frequency(Collection c , Object o)返回指定集合中指定元素的出现次数

replaceAll (List list,Object oldVal,Object newVal)替换List对象的所以旧值

3 同步控制

synchronizedXxx

Collection c = Collections.synchronizedCollection(new ArraryList);

List l = Collections.synchronizedList(new ArraryList());

Set s = Collections.synchronizedSet(new HashSet());

Map m =Collections.synchronizedMao(new HashMap());

4 设置不可变集合

等等
































0 0
原创粉丝点击