目录
1.三者共同点
这三个接口都是Collection的子接口,同时继承了 Collection 接口中的方法,并且扩展了自己特有的方法。
2.List接口
2.1List的特点:
1.有序性: List的元素是有序的,即可以按照插入顺序排序,也可以通过指定位置来操作元素(我们可以指定在那个位置插入那个元素,也可以指定那个位置删除元素)
2.允许重复元素:List中可以包含重复的元素,且每个元素都有单独的索引.
3.可以随机访问:List支持随机访问元素,只要我们知道元素的下标索引
4.支持排序:在List中可以使用sort来排序,也可以使用Comparator接口来定义自己的排序.
总结:List接口是有序的,可以有重复的元素,支持随机访问的具有通用操作方法和排序功能的集合接口.
2.2.ArrayList的使用
添加元素 add()
更改元素 set()
通过索引得到元素 get()
判断元素是否相等 contains()
转换成数组等 toArray()
......
import java.util.*;
public class Test {
public static void main(String[] args) {
ArrayList<String> arrayList = new ArrayList<>();
arrayList.add("a");
arrayList.add(null);
arrayList.add(null);//如果你想想我一样在2,1位置插入元素,就应该怎么做,因为在插入"c"的时候会越界,先插个null就可以避免越界问题
arrayList.add(2,"c");//此处插入2位置,当并没有替换掉null
arrayList.add(1,"b");
// arrayList.set(1,"b");//要替换的话,使用set即可
// arrayList.set(2,"c");
// 对元素进行排序由于有null存在所以重写Collections方法
Collections.sort(arrayList, new Comparator<String>() {
@Override
public int compare(String o1, String o2) {
if (o1 == null && o2 == null) {
return 0; // 两个 null 值相等
} else if (o1 == null) {
return 1; // o1 为 null,o2 较大
} else if (o2 == null) {
return -1; // o2 为 null,o1 较大
} else {
return o1.compareTo(o2); // 比较 o1 和 o2 的大小
}
}
});
//打印元素:
for (int i = 0; i < arrayList.size(); i++) {
System.out.println(arrayList.get(i));
//判断c是否在ArayList中
System.out.println( arrayList.contains("c"));
}
List<Integer> Larray = new ArrayList<>();
Larray.add(1);
Larray.add(2);
Larray.add(3);
// 转换为数组
Object[] a =new Object[Larray.size()];
a = Larray.toArray();
System.out.println(Arrays.toString(a)); // 输出:[1, 2, 3]
}
}
2.3LinkList的使用
LiinkList的底层是双向链表,链表之间通过引用将节点连接起来,所以在任意位置插入或者删除元素的时候,无需移动元素,效率比数组高.
add() 插入元素
set() 更改元素
contains() 判断元素是否在链表
indexOf(Object 0) 返回第一个o所在下标
......
import java.util.LinkedList;
public class LinkedList1 {
public static void main(String[] args) {
LinkedList<Integer> linked = new LinkedList<>();
//添加元素
linked.add(1);
linked.add(2);
linked.add(3);
//设置3的位置为4
linked.add(3,4);
//修改0位置为-1
linked.set(0,-1);
linked.add(666);
linked.add(5);
linked.add(666);
//得到0位置的数字
int t = linked.get(0);
System.out.println("0下标的值为 "+t);
linked.addFirst(666);
//判断999是否在链表中
boolean bl=linked.contains(999);
System.out.println("999是否在链表:"+bl);
System.out.println("遍历链表");
for(int i:linked){
System.out.print(i+" ");
}
}
}
2.4ArrayList和LinkedList的区别
3.Queue接口
3.1Queue的特点
1.先进先出(FIFO)
队列中的元素遵守先进先出的规则,最先进入队列的元素最先出列
2.限制访问
队列有两个限制访问的端点,一个是队头,一个是队尾,元素只能从队尾添加,队头删除
3.1LinkedList的使用(Queue)
offer() 添加元素
poll() 删除队首第一个元素并返回它
peek() 返回队首第一个元素
import java.util.LinkedList;
import java.util.Queue;
public class Queue1 {
public static void main(String[] args) {
Queue<Integer> queue = new LinkedList<>();
//添加元素
queue.offer(1);
queue.offer(2);
queue.offer(3);
queue.offer(4);
//遍历元素
for (int i:queue){
System.out.println(i);
}
System.out.println("返回第一个元素,并删除"+queue.poll());
System.out.println("返回第一个元素"+queue.peek());
}
}
3.2Deque
双端队列( deque )是指允许两端都可以进行入队和出队操作的队列, deque 是 “double ended queue” 的简称。元素可以从队头出队和入队,也可以从队尾出队和如入队
3.2.1ArrayDeque
add() 添加元素
addFirst() 在头部添加元素
addLast() 在尾部添加元素
getFirst() 获取头部元素
getLast() 获取尾部元素
pllFirst() 删除头部元素并返回
poppLast() 删除尾部元素并返回
removeFirst() 删除头部元素
removeLast() 删除尾部元素
Deque<Integer> stack = new ArrayDeque<>();
//添加元素
stack.add(1);
stack.addFirst(-1);
stack.addLast(3);
stack.add(4);
stack.add(5);
stack.add(6);
stack.add(7);
for (int i:stack){
System.out.print(i+" ");
}
System.out.println();
//删除元素
stack.poll();
stack.removeFirst();
stack.removeLast();
for (int i:stack){
System.out.print(i+" ");
}
4.Set接口
1.不允许有重复的元素
Set接口中的元素不允许重复,如果试图添加相同的元素,那么将不起作用,你可以添加,但是没用2.无序集合
与List接口不同,Set接口中的元素是无序的,所以不能通过索引来访问Set中的元素
3.装载类型不同
Set只能装对象类型的1元素,无法存储基本类型.如果需要存储基本类型,可以通过其对应的包装类型或者使用第三方库来实现
4.顺序不保障
实现Set接口的类不保障元素的顺序,在遍历Set时可能按照元素的插入顺序,哈希值顺序或者其他的顺序进行遍历.
总结:使用Set接口可以快速的判断一个集合中是否存在某个元素,同时保障集合中不会存在重复的元素,在处理大量元素时非常高效.
4.1hashSet
add() 添加数据
remove(Object o ) 移除指定o若不存在则返回false,存在返回true并删除o
size() 获取Set中的元素个数
contains(Object o) 判断是否存在指定元素,存在返回true,否则返回false
clear() 清零
import java.util.HashSet;
import java.util.Set;
public class Set1 {
public static void main(String[] args) {
Set<String> set = new HashSet<>();
//添加元素
set.add("Apple"); // 返回 true
set.add("Banana"); // 返回 true
set.add("Apple"); // 返回 false,因为 "Apple" 已经存在于Set中了
set.add("peach");
set.add("mango");
set.add("Watermelon");
//元素个数
int t = set.size();
System.out.println("元素有:"+t);
//删除元素
set.remove("Apple");//返回true
set.remove("banana");//返回false,"banana"不存在set中
//判断元素是否存在
set.contains("Apple");//返回true
set.contains("banbana");//返回false
//打印
for(String st :set) {
System.out.print(st+" ");
}
//清零
set.clear();
//无数据打印不了,你可以加两个数据进去试试
for(String st :set) {
System.out.print("这是清零后的:"+st+" ");
}
}
}
4.2TreeSet
add(E e)
向TreeSet中添加一个元素,如果元素已经存在,则不会对集合做任何改变,返回false;如果元素不存在,则插入该元素到正确的位置,并返回true。
remove(Object o)
从TreeSet中删除指定的元素,如果元素存在,则返回true;否则返回false。
size() 返回TreeSet中的元素个数。
contains(Object o)
检查指定元素是否存在于TreeSet中,如果存在,则返回true;否则返回false。
first()
返回TreeSet中的第一个元素,如果集合为空,则抛出NoSuchElementException异常。
last()
返回TreeSet中的最后一个元素,如果集合为空,则抛出NoSuchElementException异常。
lower(E e)
返回小于指定元素的最大元素,如果没有符合要求的元素,则返回null。
higher(E e)
返回大于指定元素的最小元素,如果没有符合要求的元素,则返回null。
ceiling(E e)
返回大于等于指定元素的最小元素,如果没有符合要求的元素,则返回null。
floor(E e)
返回小于等于指定元素的最大元素,如果没有符合要求的元素,则返回null。
import java.util.HashSet;
import java.util.Set;
import java.util.TreeSet;
public class Set1 {
public static void main(String[] args) {
Set<String> set = new HashSet<>();
//添加元素
set.add("Apple"); // 返回 true
set.add("Banana"); // 返回 true
set.add("Apple"); // 返回 false,因为 "Apple" 已经存在于Set中了
set.add("peach");
set.add("mango");
set.add("Watermelon");
//元素个数
int t = set.size();
System.out.println("元素有:"+t);
//删除元素
set.remove("Apple");//返回true
set.remove("banana");//返回false,"banana"不存在set中
//判断元素是否存在
set.contains("Apple");//返回true
set.contains("banbana");//返回false
//打印
for(String st :set) {
System.out.print(st+" ");
}
//清零
set.clear();
//无数据打印不了,你可以加两个数据进去试试
for(String st :set) {
System.out.print("这是清零后的:"+st+" ");
}
TreeSet<Integer> settree = new TreeSet<>();
//添加元素
settree.add(1);//true
settree.add(2);
settree.add(3);
settree.add(1);//false
settree.add(5);
//删除元素
settree.remove(1);//true
settree.remove(666);//false
//返回元素个数
int tt = settree.size();
//是否存在元素
settree.contains(2);//true
settree.contains(666);//false
//返回第一个元素,集合为空抛NOSuchElementException
int first = settree.first();
System.out.println("第一个元素:"+first);
//返回TreeSet的最后一个元素,集合为空抛出NoSuchElementException
int last = settree.last();
System.out.println("最后一个元素:"+last);
//返回小于指定元素的最大元素,如无返回null
int lower = settree.lower(3);
System.out.println("小于3的最大元素:"+lower);
//返回大于指定元素的最小元素,如无返回null
int highter = settree.higher(3);
System.out.println("d大于3的最小元素"+highter);
//返回大于等于指定元素的最小值,如无返回null
int ceiling = settree.ceiling(3);
System.out.println("大于等于3的最小元素"+ceiling);
//返回小于等于指定元素的最大元素,如果没有符合要求的元素,则返回null。
int floor = settree.floor(2);
System.out.println("小于等于指定元素的最大元素"+floor);
//遍历
for(int i :settree){
System.out.print(i+" ");
}
}
}