集合框架

集合:

 当数据多了需要存储,需要容器,但是数据的个数又不确定的时候,无法使用数组(数组长度是固定的,集合长度是可变的),这时便使用了Java中的另一个容器集合。存储的元素都是引用类型。

集合框架

集合框架是为表示和操作集合而规定的一种统一的标准的体系结构。任何集合框架都包含三大块内容:对外的接口、接口的实现和对集合运算的算法。

 

Collection接口中有三个子接口(List,Set,Queue)

Collection中的方法:

addAll(Collection<? extends E> c) 
addAll(int index, Collection<? extends E> c) 
clear() 
contains(Object o) 
containsAll(Collection<?> c) 
isEmpty() 
iterator() 
remove(Object o) 
removeAll(Collection<?> c) 
retainAll(Collection<?> c) 
size() 
toArray() 
toArray(T[] a) 

List中的特有方法:

listIterator() //返回此列表元素的列表迭代器(按适当顺序)。
listIterator(int index) //返回列表中元素的列表迭代器(按适当顺序),从列表的指定位置开始。
subList(int fromIndex, int toIndex) 
返回此集合中的一部分视图,即截取子集,从fromIndex到endIndex,包前不包后,返回的集合引用的是原集合的一部分,所以对sublist操作就是在对list进行操作。对list操作完,就不能操作subList,subList已经失效。
get(int index) 
set(int index, E element) 
indexOf(Object o) 
add(int index, E element) 
lastIndexOf(Object o) 
remove(int index) 

List:有序(存入和取出的顺序一致),元素都有索引(角标),元素可以重复。

实现类:ArrayList,LinkedList,Vector

1.ArrayList底层是动态数组数据结构,是不同步的。查找较LinkedList快。

2.LinkedList底层是双链表数据结构,是不同步的。增加和删除元素较ArrayList快。

3.Vector底层也是动态数组,是同步的,增删、查找效率较低。

Queue接口的实现类:

LinkedList->实现了Queue中的方法:offer后进,poll从头出(移除)。peek方法查看头并不移除。

Queue接口的子接口Deque的实现类:

LinkedList->实现了Deque中方法:offerFirst从头进,offerLast从尾进,pollFirst移除头,pollLast移除尾,peekFirst查看头并不移除,peekLast查看尾并不移除,(类似栈操作)->pop移除尾,push从头进。所以模拟栈结构时,应当用Deque声明

Set:元素不能重复,无序。

实现类:

1.HashSet

内部数据结构是哈希表。它不保证 set 的迭代顺序;特别是它不保证该顺序恒久不变。此类允许使用 null 元素。存入此集合的元素应当重写hashCode()和equals()方法。该集合对象在判断元素的唯一性时,使用hashCode()的返回值,当且仅当hashCode()返回值与该集合中已存在的某个元素hashcode值相同时,才使用equals()方法判断是否内容相同。存入该集合中的元素位置不随该元素内容的改变而改变,因此需要注意存入该集合中的元素不应改变能影响hashCode方法返回值的成员变量的值。

2.LinkedHashSet

是HashSet的子类,具有可预知迭代顺序的 Set 接口的哈希表和链接列表实现。此实现与 HashSet 的不同之外在于,后者维护着一个运行于所有条目的双重链接列表。此链接列表定义了迭代顺序,即按照将元素插入到 set 中的顺序(插入顺序)进行迭代。注意,插入顺序 受在 set 中重新插入的 元素的影响。(如果在 s.contains(e) 返回 true 后立即调用 s.add(e),则元素 e 会被重新插入到 sets 中。)

3.TreeSet

基于 TreeMap的 NavigableSet 实现。实现了SortedSet接口。使用元素的自然顺序(使用元素自己的compareTo()方法)对元素进行排序,或者根据创建 set 时提供的 Comparator 进行排序,具体取决于使用的构造方法。用此集合存放元素时,元素可以实现Comparable接口或者往构造器中传入比较器对象。

Map接口实现类有HashMap,TreeMap,HashTable

1.HashMap:

基于哈希表的 Map 接口的实现。此实现提供所有可选的映射操作,并允许使用 null 值和 null 键。

2.Hashtable

此类实现一个哈希表,该哈希表将键映射到相应的值。任何非 null对象都可以用作键或值。存入该集合中的key也应当重写hashCode和equals方法。原理和HashMap一致。Hashtable是同步的。 如果不需要线程安全的实现,建议使用HashMap代替Hashtable。Hashtable下有个子类叫Properties

3.TreeMap:

基于红黑树(Red-Black tree)的NavigableMap 实现。实现了SortedMap接口。该映射根据其键的自然顺序进行排序,或者根据创建映射时提供的 Comparator进行排序,具体取决于使用的构造方法。用此集合存放元素时,key元素可以实现Comparable接口或者往构造器中传入比较器对象。

Properties:

Properties类表示了一个持久的属性集。Properties可保存在流中或从流中加载。属性列表中每个键及其对应值都是一个字符串。所以创建Properties对象时没有泛型。

Iterator

Iterator是遍历集合的迭代器(不能遍历Map,只能遍历Collection),Collection的实现类都实现了iterator()函数,它返回一个Iterator对象,用来遍历集合,ListIterator则专门用来遍历List。其中,枚举Emumeration和迭代器Iterator功能重复,Iterator多一个删除操作,由于其名字太长,被弃用。

集合工具类

Collections:集合框架中用于操作集合对象的工具类,都是静态方法。

方法:

Colletions.sort(List<E> list):可将list集合进行排序,list中的元素应当实现Comparable接口,或者使用Collections.sort(List<E> list,Comparable<? super T> c)方法。
Collections.shuffle(List<?> list):随机打乱list集合中元素的顺序。
使用Collections中的这些静态方法可以返回一个指定集合的对象,不过在对该集合或视图上的元素进行迭代时,必须手动同步。synchronizedCollection(Collection<T> c)、synchronizedList<List<T> list)、synchronizedMap(<Map<K,V> m)、synchronizedSet<Set<T> s)、synchronizedSortedMap(SortedMap<K,V> m)、synchronizedSortedSet(SortedSet<T> s)。

数组工具类

Arrays:用于操作数组的工具类,类中定义的都是静态工具方法。
1、对数组排序
2、二分查找
3、数组复制
4、将两个数组进行元素的比较,判断两个数组是否相同
5、将数组转成字符串
6、将数组转成list集合(asList方法),为了使用集合的方法操作数组中的元素
    注意:数组长度是固定的,在转成集合后,长度也是固定的,所以不要使用集合的增删功能;如果数组中存储的是基本数据类型,那么转成集合后,数组对象作为集合中的元素存在;如果数组中元素是引用数据类型时,转成集合后,数组元素作为集合元素存在。

【注意】只有Hashtable和Properties不能添加null值和null键。 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值