Java集合操作

Java集合框架的整体结构如下:

Java集合框架分为 Collection 和Map 两类(或者是这两个根接口)

如果可以看懂图示:下面的项目可以略过

Collection:

包含三个接口:List Set Queue (图形含义参照Java了解知识点)

1.        短虚线表示接口、长虚线表示抽象类、实现表示实现类

2.        三角实线是表示继承、三角虚线表示实现、箭头虚线表示依赖(箭头方表示的该类在另一方被使用)

这样对我们平常使用的集合框架有一个整体的认识、调用的时候知道怎么使用(例如:遍历Collection的时候可以用Iterator因为继承了嘛)

下面就是对他们的特性进行说明:

Collection:

1.   Collection是一个接口,是高度抽象出来的集合,它包含了集合的基本操作和属性Collection包含了ListSet两大分支。

2.   List是一个有序的队列,每一个元素都有它的索引。第一个元素的索引值是0List的实现类有LinkedList,ArrayList, Vector, Stack

    a)   LinkedList 允许有null(空)元素主要用于创建链表数据结构,该类没有同步方法。,如果多个线程同时访问一个List,则必须自己实现访问同步,解决方法就是在创建List时候构造一个同步的List。例如:

List list=Collections.synchronizedList(new LinkedList(...));

LinkedList 查找效率低。(双向链表查询慢、插入快)

        b)       ArrayList实现了List的接口,实现了可变大小的数组,随机访问和遍历元素时,提供更好的性能。该类也是非同步的,在多线程的情况下不要使用。ArrayList 增长当前长度的50%,插入删除效率低。允许有null    

在删除可插入对象的动作时,为什么ArrayList的效率会比较低呢?

解析: 因为ArrayList是使用数组实现的,若要从数组中删除或插入某一个对象,需要移动后段的数组元素,从而会重新调整索引顺序,调整索引顺序会消耗一定的时间,所以速度上就会比LinkedList要慢许多. 相反,LinkedList是使用链表实现的,若要从链表中删除或插入某一个对象,只需要改变前后对象的引用即可!

    c)     Vector

该类和ArrayList非常相似,但是该类是同步的,可以用在多线程的情况,该类允许设置默认的增长长度,默认扩容方式为原来的2倍。

    d)     Stack

栈是Vector的一个子类,它实现了一个标准的后进先出的栈。

Set:是一个不允许有重复元素的集合。Set的实现类有HastSetTreeSetHashSet依赖于HashMap,它实际上是通过HashMap实现的;TreeSet依赖于TreeMap,它实际上是通过TreeMap实现的。

Set检索效率低下,删除和插入效率高,插入和删除不会引起元素位置改变

    1.       HashSet

该类实现了Set接口,不允许出现重复元素,不保证集合中元素的顺序,允许包含值为null的元素,但最多只能一个。

    2.  TreeSet

该类实现了Set接口,可以实现排序等功能。

    3.  LinkedHashSet

具有可预知迭代顺序的 Set 接口的哈希表和链接列表实现。

    4.       Hashtable不能存储null

Map:

1. HashMap:

    HashMap对象的keyvalue值均可为null     

     HahTable对象的keyvalue值均不可为null

且两者的的key值均不能重复,若添加key相同的键值对,后面的value会自动覆盖前面的value,但不会报错。

2.  TreeMap

自定义排序

3.   LinkedHashMap 

继承于HashMap,使用元素的自然顺序对元素进行排序.

ArraysCollections。它们是操作数组、集合的两个工具类

Arrays

asList方法  使用该方法可以返回一个固定大小的List

binarySearch方法 binarySearch方法支持在整个数组中查找

opyOfcopyOfRange方法 

sort方法 

toString

deepToString方法 需要打印二维数组的内容

equals方法 使用Arrays.equals来比较1维数组是否相等。

deepEquals方法 

Arrays.deepEquals能够去判断更加复杂的数组是否相等。 

 fill方法 填充数组内容

Collections类常用方法总结                                                                                  

 
 
sort
 
1 public static <T extends Comparable<? super T>> void sort(List<T> list)
public static <T> void sort(List<T> list,
4                             Comparator<? super T> c)
 
binarySearch
查找指定集合中的元素,返回所查找元素的索引
max
1 public static <T extends Object & Comparable<? super T>> T max(Collection<? extends T> coll)
2 
3 public static <T> T max(Collection<? extends T> coll,
4                         Comparator<? super T> comp)
 
min
indexOfSubList
 
1 public static int indexOfSubList(List<?> source,
2                                  List<?> target)
lastIndexOfSubList
replaceAll

替换批定元素为某元素,若要替换的值存在刚返回true,反之返回false

1 public static <T> boolean replaceAll(List<T> list,
2                                      T oldVal,
3                                      T newVal)

 

reverse()
public static void reverse(List<?> list)
 rotate
1 public static void rotate(List<?> list,
2                           int distance)
copy
将集合n中的元素全部复制到m中,并且覆盖相应索引的元素
1 public static <T> void copy(List<? super T> dest,
2                             List<? extends T> src)
swap
交换集合中指定元素索引的位置
1 public static void swap(List<?> list,  int i,int j)
 fill

用对象o替换集合list中的所有元素

1 public static <T> void fill(List<? super T> list,   T obj)
nCopies
返回大小为n的List,List不可改变,其中的所有引用都指向o
1 public static <T> List<T> nCopies(int n,   T o)

 

 

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值