List接口,特点,方法
Vector是老版本的ArrayList
唯一的区别就是Vector是线程安全的
E elmentAt(int index)
Enumeration<E> elements()
E firstElement()
E last Element()
void removeElementAt(int index)
void setElementAt(E obj,int index)
void insertElementAt(Eobj, int index)
public static void main(String[] args) {
Vector<String> v = new Vector<>();
v.addElement("张三");
v.addElement("李四");
v.addElement("王五");
// Enumeration<E> elements()
Enumeration<String> elements = v.elments();
while (elements.hasMoreElements() {
System.out.println(elements.nextElement());
}
}
Stack
boolean empty()
测试堆栈是否为空。
E peek()
查找堆栈颈部的对象,但不从堆栈中移除它。
E pop()
移除堆栈顶部的对象,并作为此函数的值返回该对象。
E push(E item)
把项压入堆栈顶部。
int search(Object o)
返回对象在堆栈中的位置,以1为基数。
例子:
public static void main(String[] args) {
Stack<String> stack = new Stack<>();
//stack.add("A");
//stack.add("B");
//stack.add("C");
//System.out.println(stack);
stack.push("A");
stack.push("B");
stack.push("C");
System.out.println(stack);
}
ArrayList底层数据结构是数组,所以数组有的特点,ArrayList都有
有序,有索引
元素可以重复
可以存储null倍
随机访问速度快,修改快,增加/插入或者移除/删除的效率慢
线程不安全
去重复:
创建一个新集合
选择排序思想去重复
如何排序?
Collections.sort(list);
如何变安全?
Collections.synchronizedList(list);
遍历方式:
六种
ArrayDeque是基于数组实现的双端队列
具备数组的特点
有索引,查询修改效率高,增加和删除效率低
具备队列功能
具备双端队列的功能
具备栈结构的功能
LinkedList是基于链表实现的双端队列
具备链表的特点
链表有数据和地址位组成,查询和修改效率低,增加和删除效率高
具备队列功能
具备双端队列和功能
具备栈结构的功能
- 如果项目中大量使用查询和修改操作,建议使用ArrayDeque
- 如果大量增加和删除操作,建议使用LinkedList
- 如果希望使用栈结构,也不建议使用Stack,建议使用ArrayDeque或者LinkedList
- 如果希望线程安全,建议Collections.synchronizedCollection(deque);变安全
Set接口的特点:
无序【存储无序】
唯一
可以存储null值,但是null不能重复
举一个例子:
public static void main(String[] args) {
set<String> set = new HashSet<>();
set.add("张三");
set.add("李四");
set.add("李四");
set.add("王五");
System.out.println(set);
HashSet
HashSet
为什么hashset能够保证元素唯一?
为什么是无序的?
为什么除了第一次运行,每次结果都是一样的?
需要了解HashSet集合是如何储存?
集合存储方式依赖于 数据机构
HashMap