集合类
Java语言的java.unil
包中提供了一些集合类,这些集合类文被称为客器,提到容器不难会想到数组,集合类与数相的不同之处是,数组的长度是固定约,集合约长度是可变的∶ 数组用来存放基本类型的数据,集合用案存散对象的引用。常用的集合有List集合、Set集合、Map集合,其中Li与Set客理了Collection 接口。如下图表示:
注意:Collection 接口是层次构构中的根接口,构成Collection 的单位,枝称之为元素,Collection 接口通常不使直核使用,但该接口提供了添加和删除元素、管理数指的方法。由于List 接口与 Set 按口都实现了 Collection 接口,因此这些方法对 List 集合与Set 集合是通用的。
一、接口
1、List接口
List是列表类型,以线性方式存储对象,自身的方法都与索引有关,个别常用方法如下。
方法 | 返回值 | 功能描述 |
---|---|---|
add(int index, Object obj) |
void | 用来向集合中的指定索引位置添加对象,集合的索引位置从0开始,其他对象的索引位置相对向后移一位 |
set(int index, E element) |
Object | 用指定元素替换列表中指定位置的元素,返回以前在指定位置的元素 |
indexOf(Object obj) |
int | 返回列表中对象第一次出现的索引位置,如果集合中不包含该元素则返回-1 |
lastIndexOf(Object obj) |
int | 返回列表中对象最后一次出现的索引位置,如果集合汇总不包含该元素则返回-1 |
listIterator() |
ListIterator |
用来获得一个包含所有对象的ListIterator迭代器 |
例:创建集合对象,并向集合中添加元素,修改元素,通过迭代器遍历集合元素。
public class Demo01List {
public static void main(String[] args) {
String a = "A", b = "B", c = "C", d = "D"; //定义要插入集合的字符串对象
List<String> list = new LinkedList<>(); // 创建list集合对象
list.add(a); //向集合中添加元素
list.add(b);
list.add(c);
Iterator<String> iter = list.listIterator(); //创建list集合的迭代器
while (iter.hasNext()){ //遍历集合中的元素
System.out.print(iter.next() + " ");
}
list.add(1,d); //将对象d添加到索引位置为1的位置
list.set(2,a); //将索引位置为2的对象改为a
Iterator<String> it = list.listIterator(); //创建list集合的迭代器
System.out.println();
while (it.hasNext()){ //遍历集合中的元素
System.out.print(it.next() + " ");
}
}
运行结果:
A B C
A D A C
注意:List 集合中可以包含重复的对象,若要获取重复对象第一次出现的索引位置可以使用 indexOf()
方法。想要任取重复对貌最后一次出现的索引挖置,可以使用 lastIndexOf()
方法。使用 indexOf()
与 lastIndexOf()
方法时,如果指定约对象在List集合中只有一个。则通过这再个力法获得的索明位置是相同的。
2、Set接口
Set接口常用方法如下:
方法 | 返回值 | 功能描述 |
---|---|---|
add(Object obj) |
boolean | 若集合中尚存在未指定的元素,则添加此元素 |
addAll(Collection col) |
boolean | 将参数集合中所有元素添加到集合的尾部 |
remove(Object obj) |
boolean | 将指定的参数对象移除 |
clear() |
void | 移除此Set中的所有元素 |
iterator() |
Iterator | 返回此Set中的元素上进行迭代的迭代器 |
size() |
int | 返回此Set集合中的所有元素数 |
isEmpty() |
boolean | 如果Set不包含元素,则返回true |
注意:Set靠合中不允许存在重复值,因此可以使用 Set 集合中的addAll()
方法,将集合添加到Set集合中并除掉重复值。
例:
public class Demo02Set {
public static void main(String[] args) {
String a = "A", b = "B", c = "C", d = "D"; //定义要插入集合的字符串对象
List<String> list = new ArrayList<>(); //创建一个list集合对象
list.add(a); //向集合中添加元素
list.add(b);
list.add(c);
list.add(a); //重复值
Set<String> set = new HashSet<String>();
set.add(a); //向set集合添加元素
System.out.println(set);
set.addAll(list); //将list中的所有元素添加到set集合中
Iterator<String> iterator = set.iterator(); //创建set集合的迭代器
while (iterator.hasNext()){
System.out.print(iterator.next() + "");
}
System.out.println();
System.out.println(set.size()); //输出set集合中的元素个数
set.remove(a); //移除对象为a的元素
Iterator<String> iterator1 = set.iterator(); //创建set集合的迭代器
while (iterator1.hasNext()){
System.out.print(iterator1.next() + "");
}
set.clear(); //移除set中的所有元素
System.out.println();
System.out.println(set.isEmpty()); //判断set中是否存在元素,不存在为true,否则为false
}
}
运行结果:
[A]
ABC
3
BC
true
3、Map接口
Map接口提供了将键映射到值的对象,一个映射不能包含重复的键,每个键最多只能映射一个值。Map接口同样提供了clear()、isEmpty()
、size()
等方法,还有以下常用方法:
方法 | 返回值 | 功能描述 |
---|---|---|
put(key k, value v) | Object | 向集合中添加指定的key与value的映射关系 |
get(Object key) | boolean | 如果存在指定的键对象,则返回该对象对应的值,否则返回null |
values() | Collection | 返回该集合中所有值对象形成的Collection集合 |
例:
public class Demo03Map {
public static void main(String[] args) {
Map map = new HashMap();
map.put("1", "A");
map.put("2", "B");
map.put("3", "C");
for (int i = 1; i < 4; i++) {
System.out.println("第" + i + "个元素是:" + map.get("" + i + ""));
}
}
}
二、接口的实现
1、List接口的实现
使用List 集合,通常情况下需要声明为List类型,然后通过List 接口的实现为来对集合速行实例化。List 接口的实现类常用的有 ArrayList
与LinkedList
。
ArrayList
类实现了可变的数组`,可以根据索引位置对集合进行快速的随机访问。LinkedList
类采用链表结构保存对象,便于向集合中插入和删除对象。语法格式如下:
List<E> list = new ArrayList<>(); //E表示是合法的Java数据类型
List<E> list = new LinkedList<>();
2、Set接口的实现
Set接口的实现类常用的有HashSet
和TreeSet
,语法格式如下:
Set<E> set = new HashSet<>(); //E表示是合法的Java数据类型
Set<E> set = new TreeSet<>();
3、Map接口的实现
Map接口的实现类常用的有HashMap
和TreeMap
,建议使用HashMap
(效率相对较高)。
Map map = new HashMap();
Map map = new TreeMap();
三、迭代器
利用 Iterator接口创建达代然,Iterator接口位于java.util 包下。Iterator接口中有3个方法。
- hasNext() 如果仍有元索可以迭代,则返目true。
- Next()∶五回迭代的下一个元素。
- remove()∶ 从选代器指向的collection 中移除选代器返同的最后一个元素(可选操作)。
例:创建一个迭代器
Iterator<String> iterator = set.iterator(); //创建set集合的迭代器
while (iterator.hasNext()){
System.out.print(iterator.next() + "");
}