今天开始学习集合,其实内容不难,就是要掌握Collection接口各个实现类的方法,尤其是“增”、“删除”、“改”、“查”的方法。
1.集合类
- 为什么出现集合类?
面向对象语言对事物的体现都是以对象的形式,所以为了方便对多个对象的操作,Java就提供了集合类。 - 数组和集合类同是容器,有何不同?
数组虽然也可以存储对象,但长度是固定的;集合长度是可变的。数组中可以存储基本数据类型也可以存储对象,集合只能存储对象。 - 集合类的特点
集合只用于存储对象,集合长度是可变的,集合可以存储不同类型的对象
2.Collection接口:
Collection 接口是 List、Set 和 Queue 接口的父接口,该接口里定义的方法既可用于操作 Set 集合,也可用于操作 List 和 Queue 集合。
JDK不提供此接口的任何直接实现,而是提供更具体的子接口(如:Set和List)实现。
Set:元素无序、不可重复的集合
List:元素有序,可重复的集合
在 Java5 之前,Java 集合会丢失容器中所有对象的数据类型,把所有对象都当成 Object 类型处理;从 Java5 增加了泛型以后,Java 集合可以记住容器中对象的数据类型
Collection 接口方法:
- size():返回集合中元素的个数列表内容
- add(Object obj):向集合中添加一个元素
- addAll(Collection coll):将形参coll中包含的所有元素添加到当前集合中
- isEmpty():判断集合是否为空
- clear():清空集合元素
- contains(Object obj):判断集合中是否包含指定的obj元素。如果包含,返回true,反之返回false。判断的依据:根据元素所在的类的equals()方法进行判断。明确:如果存入集合中的元素是自定义类的对象。要求:自定义类要重写equals()方法!
- containsAll(Collection coll):判断当前集合中是否包含coll中所有的元素
- retainAll(Collection coll):求当前集合与coll的共有的元素,返回给当前集合
- remove(Object obj):删除集合中的obj元素。若删除成功,返回true。否则,返回false
- removeAll(Collection coll):从当前集合中删除包含在coll中的元素。
- equals(Object obj):判断集合中的所有元素是否完全相同
- hashCode():
- toArray() :将集合转化为数组
iterator():返回一个Iterator接口实现类的对象,进而实现集合的遍历!
使用迭代器Iterator实现集合的遍历 Iterator i = coll.iterator(); while(i.hasNext()){ System.out.println(i.next()); } 使用增强for循环实现集合的遍历 for(Object i:coll){ System.out.println(i); } //增强for循环中i是新定义的局部变量,其值的修改不会对coll本身造成影响。
3.List接口
List集合类中元素有序、且可重复,集合中的每个元素都有其对应的顺序索引。
List容器中的元素都对应一个整数型的序号记载其在容器中的位置,可以根据序号存取容器中的元素。
JDK API中List接口的实现类常用的有:ArrayList、LinkedList和Vector。
List中相对于Collection,新增加的方法
- void add(int index, Object ele):在指定的索引位置index添加元素ele
- Object get(int index):获取指定索引的元素
- Object remove(int index):删除指定索引位置的元素
- Object set(int index, Object ele):设置指定索引位置的元素为ele
- int indexOf(Object obj):返回obj在集合中首次出现的位置。没有的话,返回-1
- int lastIndexOf(Object obj):返回obj在集合中最后一次出现的位置.没有的话,返回-1
- List subList(int fromIndex, int toIndex):返回从fromIndex到toIndex结束的左闭右开一个子list
4.List实现类之一:ArrayList
ArrayList 是 List 接口的典型实现类
本质上,ArrayList是对象引用的一个变长数组
ArrayList类:底层数据结构是数组,查询快,增删慢
ArrayList 是线程不安全的,而 Vector 是线程安全的,即使为保证 List 集合线程安全,也不推荐使用Vector
Arrays.asList(…) 方法返回的 List 集合既不是 ArrayList 实例,也不是 Vector 实例。 Arrays.asList(…) 返回值是一个固定长度的 List 集合
5.List实现类之二:LinkedList
LinkedList类: 底层数据结构是链表,查询慢,增删快
线程不安全,效率高,对于频繁的插入或删除元素的操作,建议使用LinkedList类,效率较高
LinkedList的特有功能:
添加功能
public void addFirst(Object e)
public void addLast(Object e)获取功能
public Object getFirst()
public Obejct getLast()删除功能
public Object removeFirst()
public Object removeLast()
6.List 实现类之三:Vector
Vector 是一个古老的集合,JDK1.0就有了。大多数操作与ArrayList相同,区别之处在于Vector是线程安全的。
Vector类: 底层数据结构是数组,查询快,增删慢
线程安全,效率低
Vector的特有功能:
- 添加功能
public void addElement(Object obj) – add() 获取功能
public Object elementAt(int index) – get()
public Enumeration elements() – Iterator iterator()
boolean hasMoreElements() hasNext()
Object nextElement() next()JDK升级的原因: 1)安全 2)效率 3)简化书写