目录
在继续IO流之前,本周我们先补充一部分与集合相关的内容。
集合
简介
与集合有关的除了前面所涉及到的数组,还有Collection 和 Map,不过这两个是Java的根接口,这两个接口又包含了一些子接口或实现类。图 1 和图 2 分别为 Collection 和 Map 的子接口及其实现类。
![](https://img-blog.csdnimg.cn/11b51cb9b8f740d7ba1e4ec78f68e9f7.png)
![](https://img-blog.csdnimg.cn/3819b2cca4964106b2e798cfa13eb51a.png)
每个接口都有其对应的功能,如下表所示。
接口名称 | 作 用 |
---|---|
Iterator 接口 | 集合的输出接口,主要用于遍历输出(即迭代访问)Collection 集合中的元素,Iterator 对象被称之为迭代器。迭代器接口是集合接口的父接口,实现类实现 Collection 时就必须实现 Iterator 接口。 |
Collection 接口 | 是 List、Set 和 Queue 的父接口,是存放一组单值的最大接口。所谓的单值是指集合中的每个元素都是一个对象。一般很少直接使用此接口直接操作。 |
Queue 接口 | Queue 是 Java 提供的队列实现,有点类似于 List。 |
Dueue 接口 | 是 Queue 的一个子接口,为双向队列。 |
List 接口 | 是最常用的接口。是有序集合,允许有相同的元素。使用 List 能够精确地控制每个元素插入的位置,用户能够使用索引(元素在 List 中的位置,类似于数组下标)来访问 List 中的元素,与数组类似。 |
Set 接口 | 不能包含重复的元素。 |
Map 接口 | 是存放一对值的最大接口,即接口中的每个元素都是一对,以 key➡value 的形式保存。 |
正如上表所述,List接口使用最多,故我们先学习List接口,其余的以后慢慢学。
List接口
List接口主要有两个常用的实现类:ArrayList 类和 LinkedList 类。常用方法如以下两表。
方法名称 | 说明 |
---|---|
E get(int index) | 获取此集合中指定索引位置的元素,E 为集合中元素的数据类型 |
int index(Object o) | 返回此集合中第一次出现指定元素的索引,如果此集合不包含该元 素,则返回 0 |
int lastIndexOf(Object o) | 返回此集合中最后一次出现指定元素的索引,如果此集合不包含该 元素,则返回 -1 |
E set(int index, Eelement) | 将此集合中指定索引位置的元素修改为 element 参数指定的对象。 此方法返回此集合中指定索引位置的原元素 |
List<E> subList(int fromlndex, int tolndex) | 返回一个新的集合,新集合中包含 fromlndex 和 tolndex 索引之间 的所有元素。包含 fromlndex 处的元素,不包含 tolndex 索引处的 元素 |
import java.util.ArrayList;
import java.util.List;
public class IO1 {
public static void main(String[] args) {
List<String> list1 = new ArrayList<>();
int index = list1.size();
int lastIndexOf = list1.lastIndexOf(1);
System.out.println("lsxtIndexOf:" + lastIndexOf);
System.out.println("index:" + index);
list1.add("北京");
list1.add("上海");
list1.add("深圳");
list1.add("广州");
System.out.println("List:" + list1);
index = list1.size();
System.out.println("index:" + index);
List<String> other = new ArrayList<>();
other.add("重庆");
other.add("武汉");
other.add("成都");
other.add("杭州");
other.add("上海");
System.out.println("other:" + other);
index = list1.size();
for (int i = 0; i < other.size(); i++) {
list1.add(index, other.get(i));
index = list1.size();
}//含List的遍历
System.out.println("List:" + list1);
System.out.println("index:" + index);
list1.add(String.valueOf(other));
System.out.println("List:" + list1);
int shanghai0 = list1.indexOf("上海");
int shanghai1 = list1.lastIndexOf("上海");
System.out.println("上海的第一次出现的索引号:"+shanghai0);
System.out.println("上海的最后一次出现的索引号:"+shanghai1);
}
}
运行结果如下
lsxtIndexOf:-1
index:0
List:[北京, 上海, 深圳, 广州]
index:4
other:[重庆, 武汉, 成都, 杭州, 上海]
List:[北京, 上海, 深圳, 广州, 重庆, 武汉, 成都, 杭州, 上海]
index:9
List:[北京, 上海, 深圳, 广州, 重庆, 武汉, 成都, 杭州, 上海, [重庆, 武汉, 成都, 杭州, 上海]]
上海的第一次出现的索引号:1
上海的最后一次出现的索引号:8
方法名称 | 说明 |
---|---|
void addFirst(E e) | 将指定元素添加到此集合的开头 |
void addLast(E e) | 将指定元素添加到此集合的末尾 |
E getFirst() | 返回此集合的第一个元素 |
E getLast() | 返回此集合的最后一个元素 |
E removeFirst() | 删除此集合中的第一个元素 |
E removeLast() | 删除此集合中的最后一个元素 |
import java.util.LinkedList;
import java.util.List;
public class IO1 {
public static void main(String[] args) {
List<String> list2 = new LinkedList<>();
((LinkedList<String>) list2).addFirst("你好");
((LinkedList<String>) list2).addFirst("谢谢");
((LinkedList<String>) list2).addFirst("对不起");
System.out.println("List2:" + list2);
((LinkedList<String>) list2).addLast("你好");
((LinkedList<String>) list2).addLast("谢谢");
((LinkedList<String>) list2).addLast("对不起");
((LinkedList<String>) list2).addLast("xx");
System.out.println("List2:" + list2);
System.out.println(((LinkedList<String>) list2).getFirst());
System.out.println(((LinkedList<String>) list2).getLast());
((LinkedList<String>) list2).removeLast();
System.out.println("List2:" + list2);
for(int i = 0; i < list2.size(); i++){
System.out.print(list2.get(i) + "\t");
}
//遍历
}
}
运行结果如下
List2:[对不起, 谢谢, 你好]
List2:[对不起, 谢谢, 你好, 你好, 谢谢, 对不起, xx]
对不起
xx
List2:[对不起, 谢谢, 你好, 你好, 谢谢, 对不起]
对不起 谢谢 你好 你好 谢谢 对不起
由于这周事情比较多,所以这周仅学习了很少的内容。下周就继续IO流的学习,此外,编程如果不实践还有什么意义,接下来将会进行图书管理系统的代码实现。