Collection接口 存储元素的最高级!!!->集合、队列、栈、列表
java.util.Collection
合集描述(我猜期末会考这个)
<1>Collection为最高级别接口
<2>Collection下面的接口:
Set(集合)、List(线性表)、Queue(队列)
<3>Collection便利抽象类:
AbstractSet(抽象集合)、AbstractList(抽象列表)、AbstractSequentialList(抽象顺序表)、AbstractQueue(抽象队列)、AbstractCollection(抽象合集)
<4>具体类:
ArrayList(本质上还是数组)、Vector(多线程、效率低,与ArrayList相似)、LinkedList(链表)、Stack(栈,继承Vector)、PriorityQueue(优先级队列)
迭代器 Iterator 是一个接口,定义了一组方法
iterator 是Collection的一个方法
通过什么方法从迭代器得到合集的一个元素?
1.创建List,获取一些元素
2.创建迭代器
3.获取元素
注意,iterator.next() 是输出下一个元素 iterator.hashNest() 是判断是否有下一个元素,输出布尔值
import java.util.ArrayList; import java.util.Iterator; import java.util.List; public class Main { public static void main(String[] args) { // 创建一个列表 List<String> list = new ArrayList<>(); list.add("Element 1"); list.add("Element 2"); list.add("Element 3"); // 创建一个迭代器 Iterator<String> iterator = list.iterator(); // 使用迭代器获取元素 while (iterator.hasNext()) { String element = iterator.next(); System.out.println(element); } } }
ArrayList和LinkedList比较
ArrayList是数组线性表类,LinkedList是链表类。
ArrayList用动态创建的数组存储元素,如果元素个数超过数组的容量,就创建一个更大的数组,并且将当前数组中的所有元素都赋值到新的数组中。
通过下标访问元素->ArrayList
如果是要在线性表起始位置插入或删除元素->LinkedList
频繁地读用ArrayList,频繁地改(写)用LinkedList
什么时候出现UnsupporteOperationException异常?
父类的方法,子类要全部继承,但是父类的有些方法,子类可能没有→父类的方法子类进行重写→抛出异常
- 不支持的操作(通常是集合或容器类中某个方法不支持)
- 可变性限制:在一个不可变的集合上执行修改操作
- 只读视图:比如使用Collections.unmodifiableList或Collections.unmodifiableMap创建的不可修改视图
不支持的迭代器操作(例如在不支持删除元素的情况下使用remove)
Comparable和Comparator接口有什么不同?
Comparable Comparator 所在包不同 java.lang java.util 包含的抽象方法不同 coimpareTo compare 使用方法不同 内部 外部
优先队列
PriorityQueue<Integer> priorityQueue=new PriorityQueue<>();
默认情况下,元素以自然顺序排序 最小的元素对应最高的优先级
如何实现优先队列的自然顺序颠倒?
Collections.reverseOrder();
我猜这个会考
addAll 并 removeAll 差 retainAll 交
用这个代码检验
import java.util.ArrayList; import java.util.List; public class u1 { public static void main(String[] args) { List<String> list1=new ArrayList<>(); list1.add("red"); list1.add("blue"); list1.add("green"); List<String> list2=new ArrayList<>(); list2.add("red"); list2.add("yellow"); list2.add("blue"); list1.clear(); System.out.println(list1); System.out.println(list2); } }
编程题
从文本文件读取单词,升序排列
import java.io.FileNotFoundException;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Scanner;
public class WordSort {
public static void main(String[] args) {
// TODO Auto-generated method stub
java.io.File file = new java.io.File("C:/Users/py/IdeaProjects/untitled/src/test");
ArrayList<String> words = new ArrayList<String>();
ArrayList<String> allWords = new ArrayList<String>(); //这两个String都能删
Scanner input = null;
try {
input = new Scanner(file);
while (input.hasNext()) { //读取下一个字符
String temp = input.next();
allWords.add(temp);//allWords是输出所有字符的
char t = temp.charAt(0);
if (t >= 'a' && t <= 'z' || t >= 'A' && t <= 'Z')//是字符,就加入temp
words.add(temp);
}
System.out.println(allWords);
System.out.println(words);
Collections.sort(words);//升序显示所有的字符
System.out.println(words);
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} finally {
input.close();
}
}
}