1. List
1. LinkedList
LinkedList的使用
package com.wz.linkedlist_class;
import java.util.LinkedList;
public class test01 {
public static void main(String[] args) {
LinkedList<String> list = new LinkedList<>();
list.add("AAA");
list.add("BBB");
list.add("CCC");
list.add("DDD");
for (String element:list
) {
System.out.println(element);
}
}
}
LinkedList的队列模式,先进先出
package com.wz.linkedlist_class;
import java.util.LinkedList;
public class test02 {
/**
* LinkedList的队列模式.先进先出
* @param args
*/
public static void main(String[] args) {
LinkedList<String> list = new LinkedList<>();
list.add("AAA");
list.add("BBB");
list.add("CCC");
list.add("DDD");
//判断队列是否为空
while(!list.isEmpty()){
//删除队列第一个元素
String element = list.removeFirst();
System.out.println(element);
}
}
}
LinkedList的栈模式,先进后出
package com.wz.linkedlist_class;
import java.util.LinkedList;
public class test03 {
/**
* LinkedList的栈模式.先进后出
* @param args
*/
public static void main(String[] args) {
LinkedList<String> list = new LinkedList<>();
list.add("AAA");
list.add("BBB");
list.add("CCC");
list.add("DDD");
//判断队列是否为空
while(!list.isEmpty()){
//删除最后一个元素
String element = list.removeLast();
System.out.println(element);
}
}
}
LinkedList的其他方法
list.addFirst();//添加到第一个位置
list.addLast()//添加到最后一个位置
list.offerFirst();//添加到第一个位置
list.offerLast();//添加到最后一个位置
list.offer("");//添加到最后一个位置
list.element();//获取第一个元素
list.getFirst();//获取第一个元素
list.getLast();//获取最后一个元素
list.peek();//获取第一个元素
list.peekFirst();//获取第一个元素
list.peekLast();//获取最后一个元素
list.pool();//删除第一个元素
list.PoolFirst();//删除第一个元素
list.removeFirst();//删除第一个元素
list.poolLast();//删除最后一个元素
list.removeLast();//删除最后一个元素
list.removeFirstOccurrence("XXX");//删除第一次出现的元素;
list.removeLastOccurrence("XXX");//删除最后一次出现的元素;
2. Vector
Vector的使用
/**
* 知识点:了解Vector的历史
* Vector是元老级别的类,在JDK1.0开始就实现。JDK1.2开始才有的集合框架的概念,
* 当时绝大部分程序员已经习惯使用Vector,为了更好的推广集合的概念,也出于保留Vector
* 的思想,Java的设计者让Vector多实现了List接口,才将其保留下来
*
* 需求:使用Vector老的方法
* 经验:
* 1.命名喜欢使用Element
* 2.现在很少人使用Vector集合
* 3.面试官喜欢问Vector的底层原理
*/
public static void main(String[] args) {
Vector<String> v = new Vector<>();
//添加元素
v.addElement("aaa");
v.addElement("bbb");
v.addElement("ccc");
v.addElement("ddd");
v.addElement("eee");
v.addElement("fff");
v.addElement("ggg");
v.removeElementAt(0);//根据下标删除元素
v.removeElement("bbb");//根据元素删除元素
//遍历元素
Enumeration<String> elements = v.elements();
while(elements.hasMoreElements()){//判断是否有可迭代的元素
String nextElement = elements.nextElement();//返回下一个元素
System.out.println(nextElement);
}
}
3. Stark
Stark的栈模式,先进后出
class Stack extends Vector
Vector类能调用的方法,Stack也有
public static void main(String[] args) {
Stack<String> stack = new Stack<>();
//将元素添加到栈顶
stack.push("aaa");
stack.push("bbb");
stack.push("ccc");
stack.push("ddd");
//获取栈顶元素
String peek = stack.peek();
System.out.println("获取栈顶元素:" + peek);//ddd
//获取元素距离栈顶的个数(从1开始)
int search = stack.search("bbb");
System.out.println("获取元素距离栈顶的个数:" + search);
//判断集合是否不为空
while(!stack.empty()){
//删除栈顶元素并返回
String pop = stack.pop();
System.out.println(pop);
}
System.out.println("元素个数为:" + stack.size());//0
}
1. Set
1. HashSet
/**
* 知识点:理解HashSet的特点
* 特点:无序+去重
*
* 理解无序:存入顺序和取出顺序不一致,无序不代表随机
*
* 存入顺序的逻辑:
* 1.获取元素的hash值 -- hashCode()
* 2.利用hash值计算出在数组中的下标
* 3.判断下标上是否有元素
* 3.1 没有 - 就直接添加
* 3.2 有 - 判断元素之间是否相同 -- ((hash) && (== || equals))
* 3.2.1 相同 -- 不存,达到去重的效果
* 3.2.2 不同 -- 添加元素,JDK1.7头插法、JDK1.8尾插法
*
* 取出顺序的逻辑:
* 遍历数组
*/
package com.wz.HashSet_class;
import java.util.HashSet;
public class test02 {
public static void main(String[] args) {
HashSet<String> set = new HashSet<>();
set.add("AAA");
set.add("BBB");
set.add("CCC");
set.add("DDD");
set.add("AAA");
set.add("aaa");
for (String element:set
) {
System.out.println(element);
}
}
}
2. LinkedHashSet
class LinkedHashSet extends HashSet
存入顺序的逻辑 - 和HashSet是一样的
取出顺序的逻辑:从双向链表的头部开始遍历