总述
通俗的说,集合就是一个放数据的容器,准确的说是放数据对象引用的容器,为什么存放引用,我觉得是因为,引用就是别名,是一个快捷方式,它不是实体,只是一个通向实体的指针,如果存放实体的话,其他方法或类就用不了这个实体了,通过使用引用就可以,实体不动,无限次引用。
常用的集合类型主要有3种:list(列表)、set(集)和map(映射)。
List
List是一个有序单值序列,List的特点是有序,可重复。序号从0开始。
List接口有三种实现方式:
○第一种:ArrayList,底层由数组实现,线程安全,特点:查询速度快,增删慢。
○第二种:LinkedList,底层由链表实现,线程不安全,操作效率高,特点:查询速度慢,增删快。
○第三种:Vector(了解即可)实现与ArrayList是一样的,但是Vector是线程安全的,操作效率低。
ArrayList方法(Staff类已经建好):
package saved;
import java.util.ArrayList;
import java.util.List;
public class ListTest {
public static void main(String[] args) {
Staff person1=new Staff();
person1.name="jensen";
Staff person2=new Staff();
person2.name="Ryan";
List<Staff> StaffList=new ArrayList<>();
StaffList.add(person1);
StaffList.add(person2);
}
}
LinkedList方法:
List<Staff> StaffList=new LinkedList<>();
Vector方法:
List<Staff> StaffList=new Vector<>();
List常用方法:
添加:
方法 | 作用 |
---|---|
boolean add(E e): | 在链表后添加一个元素,如果成功,返回true,否则返回false; |
addFirst(E e): | 在链表头部插入一个元素;(LinkedList方法才有) |
addLast(E e) | 在链表尾部添加一个元素;(LinkedList方法才有) |
add(int index, E element): | 在指定位置插入一个元素。 |
push(E e): | 与addFirst一样,实际上它就是addFirst; |
删除:
方法 | 作用 |
---|---|
boolean remove(object o): | 移除链表中指定元素; |
remove(int index): | 移除链表中指定位置元素; |
removeFirst(): | 移除链表中第一个元素,与remove类似;(LinkedList方法才有) |
removeLast(): | 移除链表中最后一个元素;(LinkedList方法才有) |
boolean removeFirstOccurrence(Object o): | 移除链表中第一次出现所在位置的元素;(LinkedList方法才有) |
boolean removeLastOccurrence(Object o): | 移除链表中最后一次出现所在位置的元素;(LinkedList方法才有) |
获取元素:
方法 | 作用 |
---|---|
get(int index): | 按照标号获取元素,但是不只是查询,不会把原数据删除 |
getFirst(): | 获取第一个元素; |
getLast(): | 获取最后一个元素; |
peek() | 获取第一个元素,但是不移除;相当于.get(0) |
peekFirst(): | 获取第一个元素,但是不移除; |
peekLast(): | 获取最后一个元素,但是不移除; |
pop(): | 与removeFirst一样,实际上它就是removeFirst; |
poll(): | 与removeFirst一样,实际上它就是removeFirst; |
poll和pop的区别:基本相同,当头结点为空的时候,两个函数的处理方式不同:poll()选择返回null,pop()选择抛出异常。
set
是一个无序单值集合,特点:无序,不可重复。
上面提到Set是无序,所以HashSet里面没有重复的数据,可以允许为null值,它是Set接口的一个实现类
set接口的实现方式:
○ HashSet 底层是使用了哈希表来支持的,特点: 存取速度快.
○ TreeSet 如果元素具备自然顺序的特性,那么就按照元素自然顺序的特性进行排序存储。
HashSet 方法
import java.util.*;
public class ListTest {
public static void main(String[] args) {
Staff person1=new Staff();
person1.name="jensen";
Staff person2=new Staff();
person2.name="Ryan";
Set<Staff> staffSet=new HashSet<>();
}
}
TreeSet 方法
Set<Staff> staffSet=new TreeSet<>();
常用方法
方法 | 作用 |
---|---|
add(E e) | 如果此 set 中尚未包含指定元素,则添加指定元素。 |
clear() | 从此 set 中移除所有元素。 |
clone() | 返回此 HashSet 实例的浅表副本:并没有复制这些元素本身。 |
contains(Object o) | 如果此 set 包含指定元素,则返回 true。 |
remove(Object o) | 如果指定元素存在于此 set 中,则将其移除。 |
查询方法:可以先将set转换成list,然后在取:
Map
Map映射集合的根接口,存放的是键值对
实现方法
○ HashMap 通过使用映射关系来到达存储数据,通过hashcode快速查找,具体特点:无序,速度快
○ TreeMap 映像树,基于红黑树实现,没有调优选项,处于平衡状态,具体特点:有序,速度慢
常用方法
添加:put方法
查询:get方法
删除:remove方法
修改某个key的value