黑马程序员-集合
来源:互联网 发布:国内java大牛的博客 编辑:程序博客网 时间:2024/06/07 10:22
------- android培训、java培训、期待与您交流! ----------
什么叫集合
持有对象!与数组功能相似。
java中的集合类都在java.util包中。
集合与数组的区别
从存储的数据类型来看:
可以定义基本类型的数组,用来存储基本类型数据。也可以定义引用类型的数组,存储引用类型的数据;
集合只能存储引用类型,而不能存储基本类型。
从长度来看:
数组一旦定义后,其长度就不能改变;
集合的长度会自动变化。
Collection功能介绍
使用ArrayList实现类
1 添加功能
boolean add(int index, Object o):在指定位置插入元素
boolean add(int index, Collection c):指定位置插入集合
2 删除功能
boolean remove(Object o):在集合中移除指定元素,移除成功返回true;否则返回false。
boolean removeAll(Collection c):在集合中指定集合,移除一个就算成功。
boolean retainAll(Collection c):
void clear():清空集合!
3 判断功能
boolean contains(Object o):判断当前集合中是否包含参数对象。
boolean containsAll(Collection c):判断当前集合中是否包含指定集合对象,包含所有才算包含。
boolean isEmpty():判断集合是否为空,size为0就是空。
4 元素个数(集合长度)
int size():返回集合元素个数
5 转换数组
Object[] toArray():把集合对象转换成数组
6 遍历功能
Iterator iterator():把迭代器对象!
List
List特有功能
1 List特有功能介绍
void add(int index, Object o):插入元素
boolean addAll(int index, Collection c):插入集合
Object get(int index):通过下标获取元素
int indexOf(Object o):返回参数在list中的下标位置,从前向后找。
int lastIndexOf(Object o):返回参数在 list的下标位置,从后向前找。
ListIterator listIterator():返回一个List独有的迭代器!
ListIterator listIterator(int index):返回一个List独有的迭代器,但指定从哪个下标位置开始。
Object remove(int index):移除指定下标位置上的元素。返回值是被移除的元素!
Object set(int index, Object o):设置指定下标位置上的元素为o。
List sublist(int fromIndex, int toIndex):返回一个子列表List。从当前List的fromIndex位置到toIndex位置截取一个子集合返回。其实只集合只是新集合的一个投影!
因为List也是有索引的,所以很多方法都需要小心下标越界的问题!
2 List一般性方法使用
void add(int index, Object o)
Object remove(int index)
Object set(int index, Object o)
Object get(int index)
boolean addAll(int index, Collection c)
int indexOf(Object o)
int lastIndexOf(Object o)
3 遍历List
使用迭代器来遍历:Iterator it = list.iterator()
使用size()和get()来遍历。
4 获取子列表(subList()方法)
获取子序列:List subList(int fromIndex, int toIndex)
LinkedList特有方法
l void addFirst(Object):把元素添加到列表头。
l void addLast(Object):把元素添加到列表尾。
l Object getFirst():获取列表头元素
l Object getLast():获取列表尾元素
l Object removeFirst():返回并移除列表头
l Object removeLast():返回并移除列表尾
Vector特有方法
Vector在1.2时也实现了List接口。
Vector是老类,1.0版本的!
Vector与ArrayList很相似,它们的关系就好比StringBuffer和StringBuilder的关系。
Vector是线程安全的,即所有方法都同步,但效率低!
ArrayList是线程不安全的,但效率要高!
l void addElement(Object):等同与add()方法。
l Object elementAt(int):等同与get()方法。
l Object removeElement(Object):等同与remove()方法。
l Enumeration elements():很怪异的东西,返回值Enumeration,叫枚举器!这个东东是老迭代器。老类们只认识Enumberation,不认识Iterator,而且现在这些老类们还有很多有价值的,所以它们在使用Enumberation,我们也就只能去学习一下Enumeration了。
Set
HashSet
Ÿ HashSet是Set的子类,因此也没有重复元素
Ÿ 底层使用哈希算法保证没有重复元素
Ÿ 存储对象时,先调用对象的hashCode()方法计算一个哈希值,在集合中查找是否有哈希值相同的对象。
如果没有哈希值相同的对象,直接存入。
如果有哈希值相同的对象,则和哈希值相同的对象进行equals()方法比较。
equals()方法比较结果相同则不存,不同就存入。
Ÿ 往HashSet集合里存储的对象必须正确重写hashCode和equals方法
Ÿ HashSet存储元素效率非常高
TreeSet
Ÿ TreeSet集合通过二叉树算法保证无重复元素,并对元素进行排序
Ÿ 在使用TreeSet时必须指定比较的算法,指定的方式有两种:
自然顺序:将要存储的类实现Comparable接口,重写compareTo方法,在方法中指定算法
比较器顺序:在创建TreeSet时,传入一个比较器Comparator,在比较器的compare方法中指定算法
常用实现类
HashSet、TreeSet、LinkedHashSet
默认使用HashSet
Map
Ø Map集合的特点
Ÿ Map存储了一系列键值的映射关系
Ÿ Map集合需要保证键的唯一性
Ÿ 可以通过键获得值,反之则不能
Ÿ Map集合存储元素使用put(key,value)方法
Ø Map集合的两种遍历方式
Ÿ 通过keySet方法返回由键组成的集合,迭代该集合的元素就拿到了所有的键,再调用get方法根据键拿到值
Ÿ 通过entrySet方法返回键值映射关系组成的集合,迭代该集合就拿到了一个个的键值映射关系,通过getKey方法拿到键,通过getValue方法拿到值。
HashMap
通过HashSet原理保证键唯一性
底层使用哈希表结构
无序!
线程不安全的!,存取速度快,允许存放null键,null值。
对于常用方法可以保证稳定的性能!
因为使用哈希表,所以键元素类型必须重写equals()和hashCode()方法
HashMap没有独有方法,所有方法都是从Map继承而来。
Hashtable
线程安全,速度慢,不允许存放null键,null值,已被HashMap替代。
Hashtable和HashMap比较
Hashtable是1.0的老版本类,是线程安全的,键和值都不能为null;
HashMap是1.2的新版本类,是线程不安全的,键和值都可以为null;
TreeMap
底层使用二叉树结构;
有序!使用键类型的自然顺序,或者TreeMap的比较器排序;
使用TreeMap要求键类型有自然顺序,或者给TreeMap提供比较器;
Properties
1 Properties特性
1.0的老版本类
Hashtable的子类(线程安全的、底层哈希表、键值都不能为null)
有自己的映射获取方法,不建议使用父类的映射获取方法
可以与IO流交互(很强大的功能)
2Properties独有方法
Object setProperty(String name, String value):代替父类的put()方法来映射值;
String getProperty(String name):代替父类的get()方法;
Enumeration<?> propertyNames():获取所有键。
LinkedHashMap的特性
l HashMap的子类
l 没有独有方法
l 保证元素迭代顺序与添加顺序相同
l 好比LinkedHashSet与HashSet的关系
- 黑马程序员:集合类
- 黑马程序员 集合类
- 黑马程序员:集合框架
- 黑马程序员---集合
- 黑马程序员_java集合
- 黑马程序员_集合
- 黑马程序员 java 集合
- 黑马程序员-集合相关
- 黑马程序员,集合List
- 黑马程序员-List集合
- 黑马程序员_集合
- 黑马程序员-集合框架
- 黑马程序员-集合
- 黑马程序员-集合框架
- 黑马程序员-集合总结
- 黑马程序员-集合类
- 黑马程序员---集合,泛型
- 黑马程序员 集合学习
- Linux 守护进程的编程方法
- 批量上传uploadify封装在thinkphp,并且添加缩略图和删除功能
- 可不可以重入
- 一个华为人辞职创业后的几个反思
- 顺序队列
- 黑马程序员-集合
- 基于iframe的图片无刷新上传和用ajax生成缩略图和即时删除,封装于thinkphp
- z-stack代码分析--osalInitTasks函数
- SQL Server Database Mirroring - Creating and using Mirror Endpoints in Principal, Mirror and Witness
- DriverManager.registerDriver和 Class.forName()的异同
- 几本经典的云计算方面的书籍下载-电子书下载
- Function overloading and const keyword
- 多态是如何实现的
- DP问题初步(杭电1003)