JAVA集合框

来源:互联网 发布:淘宝秀福利 编辑:程序博客网 时间:2024/06/05 20:19
--Collection接口

查询方法:int size() – 返回集合对象中包含的元素个数

boolean isEmpty() – 判断集合对象中是否还包含元素,如果没有任何元素,则返回true

boolean contains(Object obj) – 判断对象是否在集合中

boolean containsAll(Collection c) – 判断方法的接收者对象是否包含集合中的所有元素

修改方法:boolean add(Object obj) – 向集合中增加对象

boolean addAll(Collection<?> c) – 将参数集合中的所有元素增加到接收者集合中

boolean remove(Object obj) –从集合中删除对象

boolean removeAll(Collection c) -将参数集合中的所有元素从接收者集合中删除

boolean retainAll(Collection c) – 在接收者集合中保留参数集合中的所有元素,其它元素都删除

void clear() – 删除集合中的所有元素

Set接口:对equals和hashCode有更强的约定;实现了两个主要类是HashSet和TreeSet

SortedSet接口:其中元素是升序排列的,增加了与次序相关的操作;通常用于存放词汇表这样的内容

List接口:可包含重复元素; 声明时可带一个参数,即List<E> ;

实现4个类:Vector ; ArrayList 一种类似数组的形式进行存储,因此它的随机访问速度极快 ;

LinkedList:内部实现是链表,适合于在链表中间需要频繁进行插入和删除操作;栈Stack

Map接口:不是Collection接口的继承 ;用于维护键/值对(key/value pairs);描述了从不重复的键到值的映射,是一个从关键字到值的映射对象 ;其中不能有重复的关键字,每个关键字最多能够映射到一个值 ;声明时可以带有两个参数,即Map<K, V>,其中K表示关键字的类型,V表示值的类型

SortedMap接口:一种特殊的Map,其中的关键字是升序排列的 ; 与SortedSet对等的Map,通常用于词典和电话目录等;在声明时可以带有两个参数,即SortedMap<K, V>,其中K表示关键字的类型,V表示值的类型

接口的实现 :Set -> HashSet ; SortedSet -> TreeSet ; List -> Vector / ArrayList/ LinkedList  Map -> HashMap  SortedMap -> TreeMap

 

--对集合运算的算法

对集合运算的算法 :大多数算法都是用于操作List对象;有两个(min和max)可用于任意集合对象

排序算法sort :对List重新排序;简单形式只是将元素按照自然次序排列 ;第二种形式需要一个附加的Comparator对象作为参数,用于规定比较规则,可用于实现反序或特殊次序排序

洗牌算法shuffle :其作用与排序算法恰好相反,它打乱List中的任何次序。也就是说以随机方式重排元素,任何次序出现的几率都是相等的

常规数据处理算法 :

reverse:将一个List中的元素反向排列 ;fill:用指定的值覆写List中的每一个元素,这个操作在重新初始化List时有用 ;copy:接受两个参数,目标List和源List,将源中的元素复制到目标,覆写其中的内容。目标List必须至少与源一样长,如果更长,则多余的部分内容不受影响

查找算法binarySearch:1.假定List是按照自然顺序升序排列的

2. 需要增加一个Comparator对象,表示比较规则,并假定List是按照这种规则排序的。

寻找最值——用于任何集合对象

min和max算法返回指定集合中的最小值和最大值  有两种形式 :

1. 按照元素的自然顺序返回最值

2. 需要附加一个Comparator对象作为参数,并按照Comparator对象指定的比较规则返回最值

 

Arrays类:专门用于操作数组的使用方法;可将数组视为列表(list)的静态工厂;

 fill (type[] a, type val):给数组填充,就是简单地把一个数组全部或者某段数据填成一个特殊的值

equals (type[] a, type[] b):实现两个数组的比较,相等时返回true

sort (type[] a): 对数组排序

binarySearch ( ): 对数组元素进行二分法查找

Arrays.asList (Object[] a):实现数组到ArrayList的转换

 

Vector / ArrayList

实现了Collection接口的具体类 ; 能够存储任意对象,但通常情况下,这些不同类型的对象都具有相同的父类或接口 ;不能存储基本类型(primitive)的数据,除非将这些数据包裹在包裹类中 ;其容量能够根据空间需要自动扩充;增加元素方法的效率较高,除非空间已满,在这种情况下,在增加之前需要先扩充容量

Vector方法是同步的,线程安全

ArrayList方法是非同步的,效率较高

int size() ——返回元素的个数。

boolean isEmpty() ——如果不含元素,则返回true

Object get(int pos) ——返回指定位置的元素

void set(int pos, Object obj) ——用参数对象替换指定位置的对象

boolean remove(Object obj) ——去除给定对象的第一次出现,如果找到了对象,则返回true。去除一个对象后,其后面的所有对象都依次向前移动

Object remove(int pos) —— 去除给定位置的元素,并返回被去除的对象

boolean removeAll(Collection<?> col) ——从接收者对象中去除所有在参数对象中出现的元素,如果接收者对象的结果有变化,则返回true

void clear() ——去除所有的元素

boolean contains(Object obj) ——返回是否包含指定的对象,如果包含则返回true;否则,返回false

boolean containsAll(Collection<?> col) —— 返回是否包含参数col中的所有对象

int indexOf(Object obj) ——返回给定对象在Vector /ArrayList中第一次出现的位置,如不存在,则返回-1

Enumeration elements() —— 返回包含Vector中所有元素的Enumeration类对象。该方法只能应用于Vector对象,不能应用于ArrayList对象。

Iterator iterator() —— 返回包含Vector/ArrayList中所有元素的Iterator类对象

使用Vector存取对象

  1. 如果声明Vector时不指定Vector中元素的类型,那么当使用get()方法取出Vector中的元素时,get()方法返回的类型都是Object类型。
  2. 如果声明Vector时指定了Vector中元素的类型,则使用get方法后取出的元素就是指定的类型,且不能塑型成其他类型。
  3. 当使用get()方法取出Vector中的元素时,返回的类型都是Object类型。Vector的使用者需要记住存入对象的具体类型,当使用get()方法取出后,再塑型成其本来的类型。

Enumeration / Iterator

1. 能够从集合类对象中提取每一个元素,并提供了用于遍历元素的方法

2. Java中的许多方法(如elements())都返回Enumeration类型的对象,而不是返回集合类对象

3. Enumeration接口不能用于ArrayList对象,而Iterator接口既可以用于ArrayList对象,也可以用于Vector对象

Enumeration接口: 提供了两个实例方法

1. hasMoreElements()—— 判断是否还有剩下的元素; 

2. nextElement()—— 取得下一个元素。

增强for循环遍历集合 : for(Type a : 集合对象)

Map接口

以该接口为根的集合类

用于存储“关键字”(key)和“值”(value)的元素对,其中每个关键字映射到一个值

当需要通过关键字实现对值的快速存取时使用

声明的抽象方法主要有:查询方法;修改方法

两个主要实现类:HashTable;HashMap 

查询方法:int size()—— 返回Map中的元素个数

boolean isEmpty()—— 返回Map中是否包含元素,如不包括任何元素,则返回true

boolean containsKey(Objectkey) —— 判断给定的参数是否是Map中的一个关键字(key)

boolean containsValue(Objectval) —— 判断给定的参数是否是Map中的一个值(value)

Object get(Objectkey) —— 返回Map中与给定关键字相关联的值(value)

Collection values()—— 返回包含Map中所有值(value)的Collection对象

Set keySet() ——返回包含Map中所有关键字(key)的Set对象

Set entrySet()—— 返回包含Map中所有项的Set对象

修改方法:Objectput(Object key, Object val) —— 将给定的关键字(key)/值(value)对加入到Map对象中。其中关键字(key)必须唯一,否则,新加入的值会取代Map对象中已有的值

void putAll(Mapm) —— 将给定的参数Map中的所有项加入到接收者Map对象中

Objectremove(Object key) —— 将关键字为给定参数的项从Map对象中删除

void clear() —— 从Map对象中删除所有的项

 

哈希表:也称为散列表,是用来存储群体对象的集合类结构,其两个常用的类是HashTable及HashMap

哈希表存储对象的方式与前面所讲的数组,Vector及ArrayList不同

数组,Vector及ArrayList中对象的存储位置是随机的,即对象本身与其存储位置之间没有必然的联系。因此查找一个对象时,只能以某种顺序(如顺序查找,二分查找)与各个元素进行比较,如果数组或向量中的元素数量很庞大时,查找的效率必然降低

哈希表中,对象的存储位置和对象的关键属性k之间有一个特定的对应关系f,我们称之为哈希(Hash)函数。它使每个对象与一个唯一的存储位置相对应。因而在查找时,只要根据待查对象的关键属性k,计算f(k)的值即可知其存储位置

哈希表相关的一些主要概念

容量(capacity)—— 哈希表的容量不是固定的,随对象的加入,其容量可以自动扩充

关键字/键(key)—— 每个存储的对象都需要有一个关键字key,key可以是对象本身,也可以是对象的一部分(如对象的某一个属性)

哈希码(hash code)—— 要将对象存储到HashTable,就需要将其关键字key映射到一个整型数据,称为key的哈希码(hash code)

哈希函数(hash function)——返回对象的哈希码

项(item)—— 哈希表中的每一项都有两个域:关键字域key及值域value(即存储的对象)。key及value都可以是任意的Object类型的对象,但不能为空(null),HashTable中的所有关键字都是唯一的

装填因子(load factor)—— (表中填入的项数)/(表的容量)

构造方法

Hashtable( ); // 初始容量为101,最大装填因子为0.75

Hashtable(intcapacity);

Hashtable(int capacity, float maxLoadFactor);

Object put(Object key, Object value) —— 值value以key为其关键字加入到哈希表中,如果此关键字在表中不存在,则返回null,否则表中存储的value

Object get(Object key) —— 返回关键字为key的值value,如果不存在,则返回null。

Object remove(Object key) —— 将键/值对从表中去除,并返回从表中去除的值,如果不存在,则返回null

booleanisEmpty() —— 判断哈希表是否为空

booleancontainsKey(Object key) —— 判断给定的关键字是否在哈希表中

booleancontains(Object value) —— 判断给定的值是否在哈希表中

booleancontainsValue(Object value) —— 判断给定的值是否在哈希表中

void clear() —— 将哈希表清空

Enumerationelements() —— 返回包含值的Enumeration对象

Enumerationkeys() —— 返回包含关键字的Enumeration对象

HashMap类与HashTable类很相似,只是HashTable类不允许有空的关键字,而HashMap类允许


原创粉丝点击