JAVA集合框
来源:互联网 发布:淘宝秀福利 编辑:程序博客网 时间:2024/06/05 20:19
查询方法: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存取对象
- 如果声明Vector时不指定Vector中元素的类型,那么当使用get()方法取出Vector中的元素时,get()方法返回的类型都是Object类型。
- 如果声明Vector时指定了Vector中元素的类型,则使用get方法后取出的元素就是指定的类型,且不能塑型成其他类型。
- 当使用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类允许
- JAVA集合框
- Java集合框详解
- Java集合:集合框架
- java集合---set集合
- JAVA 集合 的 集合
- 【集合】Java集合对比
- JAVA集合-Map集合
- JAVA集合-Set集合
- JAVA集合-List集合
- java集合------Map集合
- Java集合----List集合
- Java集合----Set集合
- Java集合----Map集合
- JAVA集合
- JAVA集合
- Java集合
- JAVA集合
- Java集合
- 转载——数据库设计的技巧,从遵从范式到效率提升
- 7.2 求点类中距离
- 编程开发技能梳理
- Ubuntu 上VirtualBox键盘失效解決法
- Lucene 2 教程
- JAVA集合框
- Linux 系统内核空间与用户空间通信的实现与分析
- 对getter / setter的认识
- Android Sync 同步 源码问题解决方案
- Axis2插件在eclipse中的安装
- DevExpress ASPxComboBox数据绑定问题
- 图书管理系统
- 每天30分钟,实现自我增值
- ubuntu11.10我的vim设置