Collection 接口方法
Collection 是所有单列集合的父接口,因此在 Collection 中定义了单列集合(List 和 Set)通用的一些方法,如下
方法声明 | 功能描述 |
---|---|
boolean add(Object o) | 向集合中添加一个元素 |
boolean addAll(Collection c) | 向指定 Collection 中的所有元素添加到该集合中 |
void clear() | 删除该集合中的所有元素 |
boolean remove(Object o) | 删除该集合中指定的元素 |
boolean removeAll(Collection c) | 删除指定集合中的所有元素 |
boolean isEmpty() | 判断该集合是否为空 |
boolean contains(Object o) | 判断该集合中是否包含某个元素 |
boolean containsAll(Oject c) | 判断该集合中是否包含指定集合中的所有元素 |
Iterator iterator() | 返回在该集合的元素上进行迭代的迭代器,用与遍历该集合所有元素 |
int size() | 获取该集合元素个数 |
List 集合常用方法
List 作为 Collection 集合的子接口,将实现了 List 接口的对象称为 List 集合。不但继承了 Collection 接口中的全部方法,而且还提供如下方法
方法声明 | 功能描述 |
---|---|
void add(int index, Object element) | 将元素 element 插入在 List 集合的 index 处 |
boolean addAll(int index, Collection c) | 将集合 c 所包含的所有元素插入到 List 集合的 index 处 |
Object get(int index) | 返回集合索引 index 处的元素 |
Object remove(int index) | 删除 index 索引处的元素 |
Object set(int index, Object element) | 将索引 index 处元素替换成 element 对象,并将替换后的元素返回 |
int indexOf(Object o) | 返回对象 o 在 List 集合中出现的位置索引 |
int lastIndex(Object o) | 返回对象 o 在 List 集合中最后一次出现的位置索引 |
List subList(int fromIndex, int toIndex) | 返回从索引 fromIndex(包括)到 toIndex(不包括)处所有元素集合组成的子集合 |
ArrayList 集合
ArrayList 集合是 List 接口的一个实现类 ,因此该集合中大部分方法都是从 Collection 和 List 继承过来的。
由于 ArrayList 集合的底层是使用一个数组来保存元素,在增加或删除指定位置的元素时,会导致创建新的数组,效率比较低,因此不适合做大量的增删操作。但通过索引的方式来访问元素,查找效率高。
注意:在使用 ArrayList 集合时,若没有指定集合中存储什么类型的元素,会产生安全隐患,会涉及到泛型安全机制的问题。
示例如下:
ArrayList list = new ArrayList(); //创建 ArrayList 集合
list.add("stu1"); //向集合中添加元素
list.add("stu2")
System.out.println("集合的长度:" + list.size());
System.out.println("第二个元素是:" + list.get(1));
LinkedList 集合
LinkedList 集合内部维护了一个双向循环链表,链表中的每一个元素都使用引用的方式来记住它的前一个元素和后一个元素,从而将所有的元素彼此连接起来。当增删元素时,通过修改元素间的引用关系,即可增删元素。
对增删元素定义如下特有的方法:
方法声明 | 功能描述 |
---|---|
void add(int index, E element) | 在此列表中指定的位置插入指定的元素 |
void addFirst(Object o) | 将指定元素插入此列表的开头 |
void addLast(Object o) | 将指定元素插入到此列表的结尾 |
Object getFirst() | 返回此列表的第一个元素 |
Object getLast() | 返回此列表的最后一个元素 |
Object removeFirst() | 移除并返回此列表中的第一个元素 |
Object removeLast() | 移除并返回此列表中的最后一个元素 |
示例如下:
LinkedList link = new LinkedList(); //创建 LinkedList 集合
link.add("stu1");
link.add("stu2");
link.add(3, "stu3"); //向该集合中指定位置插入元素
link.addFirst("First"); //向该集合中第一个位置插入元素
link.remove(3); //移除该集合中指定位置的元素
link.removeFirst(); //移除该集合中第一个元素
System.out.println(link.toString());//打印集合中的元素
Iterator 接口
Iterator接口
Iterator 接口是 Java 集合框架中的一员
Iterator 接口与 Collection、Map 接口的区别:
- Collection 接口与 Map 接口主要用于存储元素
- Iterator 主要用于迭代访问(遍历)Collection 中的元素,因此 Iterator 对象被称为迭代器
注意:当通过迭代器获取 ArrayList 集合中的元素时,都会将这些元素当作 Object 类型来看待。若想得到特定类型的元素,则需要进行强制类型转换。在迭代每个元素时,可用foreach循环,这样更加方便。
通过 Iterator 迭代器提供的 hasNext() 方法和 next() 方法,实现集合中元素的迭代,迭代的方向是正向迭代。
正向迭代就是从集合中的第一个元素向最后一个元素迭代。
示例如下:
ArrayList list = new ArrayList(); //创建 ArrayList 集合
list.add("stu1"); //向该集合中添加字符串
list.add("stu2");
Iterator it = list.iterator(); //获取 Iterator 对象
while(it.hasNext()) { //判断 ArrayList 集合中是否存在下一个元素
Object obj = it.next(); //取出 ArrayList 集合中的元素
System.out.println(obj);
}
若使用 foreach循环,则更加方便
ArrayList list = new ArrayList(); //创建 ArrayList 集合
list.add("stu1"); //向该集合中添加元素
list.add("stu2");
for(Object obj:list){ //使用 foreach 循环遍历 ArrayList 对象
System.out.println(obj);//打印 ArrayList 集合中的元素
}
ListIterator
为了使迭代方式更加多元化,JDK 中还定义了一个 Iterator类的子类ListIterator迭代器,在父类的基础上增加了一些特有的方法如下:
方法声明 | 功能描述 |
---|---|
void add(Object o) | 将指定的元素插入此表(可选操作) |
boolean hasPrevious() | 如果以逆向遍历列表,列表迭代器有多个元素,则返回 true |
Object previous() | 返回里诶保重的前一个元素 |
void remove() | 从列表中移除由 next 或 previous 返回的最后一个元素(可选操作) |
通过 ListIterator 中提供的 hasPrevious() 和 previous() 这两个方法,可以实现反向迭代元素。
示例如下:
ArrayList list = new ArrayList();
list.add("stu1");
list.add("stu2");
ListIterator it = list.Iterator(list.size()); //获得 ListIterator 对象
while(it.hasPrevious()){ //判断该对象中是否有上一个元素
Object obj = it.previous(); //迭代该对象的上一个元素
System.out.print(obj + " ");//打印该对象中的元素
}
Enumeration 接口
JDK 中提供了一个 Vector 集合,是 List 接口的一个实现类,用法与 ArrayList 完全相同,但两者有一定的区别如下:
- Vector 集合是线程安全的
- ArrayList 集合是线程不安全的
在 Vector 类中提供了一个 elements() 方法用于返回 Enumeration 对象,通过 Enumeration 对象就可以遍历该集合中的元素。
示例如下:
Vector v = new Vector(); //创建 Vector 对象
v.add("stu1"); //向该 Vector 对象中添加元素
v.add("stu2");
Enumeration en = v.elements(); //获得 Enumeration 对象
while(en.hasMoreElements()){ //判断该对象是否有更多元素
Object obj = en.nextElement();//取出该对象的下一个元素
System.out.println(obj);
}
Set 接口
Set 接口和 List 接口一样,同样继承自 Collection 接口
Set 接口主要有两个实现类,即 HashSet 和 TreeSet,两者特点如下:
- HashSet 是根据对象的哈希值来确定元素在集合中的存储位置,具有良好的存取和查找性能
- TreeSet 是以二叉树的方式来存储元素,可以实现对集合中的元素进行排序
HashSet 集合
当向 HashSet 集合中添加一个对象时,首先会调用该对象的 hashCode() 方法来确定元素的存储位置,然后再调用对象的 equals() 方法来确保该位置没有重复元素。
Set 集合与 List 集合存取元素的方式都一样
示例如下:
HashSet set = new HashSet(); //创建 HashSet 集合
set.add("stu1"); //向该 Set 集合中添加字符串
set.add("stu2");
Iterator it = set.iterator(); //获取 Iterator 对象
while(it.hasNext()) { //通过 while 循环,判断集合中是否有元素
Object obj = it.next(); //若有元素,通过迭代器的 next() 方法获取元素
System.out.println(obj);
}
TreeSet 集合
TreeSet 集合内部采用自平衡的排序二叉树来存储元素,这样的结构可以保证 TreeSet 集合中没有重复的元素,并且可以对元素进行排序。
示例如下:
TreeSet ts = new TreeSet(); //创建 TreeSet 集合
ts.add("stu1"); //向 TreeSet 集合中添加元素
ts.add("stu2");
Iterator it = ts.iterator(); //获取 Iterator 对象
while(it.hasNext()){
System.out.println(it.next());
}