- 数据结构
- List集合
- Set集合
- Collections
1 数据结构
1.1 栈stack
先进后出,压栈就是存储元素,弹栈就是取栈顶端元素。【弹夹】
1.2 队列queque
先进先出,入口、出口各占一侧。【过安检】
1.3 数组Array
查询快、增删慢、有序、开辟一段连续空间。
1.4 链表linked list
- 查询慢、增删快
- 两部分:存储数据元素的数据域、存储下一个结点地址的指针域。
- 双向链表有序
1.5 红黑树
- 二叉树:每个节点最多有两个子树
- 排序树/查找树:左大右小。
- 红黑树:速度特别快,趋于平衡树。
2 List集合
- 有序
- 可重复
- 有索引
2.1 List接口常用方法
public void add(int index, E element) : 将指定的元素,添加到该集合中的指定位置上。
public E get(int index) :返回集合中指定位置的元素。
public E remove(int index) : 移除列表中指定位置的元素, 返回的是被移除的元素。
public E set(int index, E element) :用指定元素替换集合中指定位置的元素,返回值的更新前的元素
2.2 子类
ArrayList:线程不安全,速度快,数组结构,常用语查找、遍历数据。
Vector:单线程安全,速度慢
LinkedList:链表结构,方便增删
LinkedList方法
//新增 addFirst(E e); addLast(E e); push(E e);//和addFirst一样的效果 //删除 removeFirst(); removeLast(); pop();//removeFirst效果一样 //获取 getFirst(); getLast();
3 Set接口
- 没有索引
- 不能重复
3.1 HashSet
无序、底层是Hash表结构(速度快)
3.1.1HashSet集合新增对象
- 计算对象的hash值,如果该值不存在就直接存储,存在的话进行equals方法比较,true不新增,false新增。
- 自定义类型元素,需要重写对象中的hashCode和equals方法
3.1.2哈希表结构
- jdk8以前:数组+链表
- jdk8+:数组+链表+红黑树(同一哈希值下挂的元素>=8)
3.2LinkedHashSet
有序、它是链表和哈希表组合的一个数据存储结构
3.3 可变参数
修饰符 返回值类型 方法名(参数类型... 形参名){ }
- 终极写法数据类型是Object
- 一个方法只能有一个可变参数
- 有多个参数时,可变参数必须放在末尾
4 Collections
4.1 常用方法
public static <T> boolean addAll(Collection<T> c, T... elements) :往集合中添加一些元素。 public static void shuffle(List<?> list) 打乱顺序 :打乱集合顺序。 public static <T> void sort(List<T> list) :将集合中元素按照默认规则排序。 public static <T> void sort(List<T> list,Comparator<? super T> ) :将集合中元素按照指定规则排序
- 被排序集合的泛型必须要实现Comparable接口
4.2 Comparator比较器
- public int compare(String o1, String o2) :比较其两个参数的顺序。
- 如果要按照升序排序, 则o1 小于o2,返回(负数),相等返回0,01大于02返回(正数) 如果要按照 降序排序 则o1 小于o2,返回(正数),相等返回0,01大于02返回(负数)。
4.3Comparable和Comparator两个接口的区别。
- 通过Collections.sort和Arrays.sort排序
Comparable:强行对实现它的每个类的对象进行整体排序。
Comparator强行对某个对象进行整体排序。
Collections.sort(list, new Comparator<Student>() { @Override public int compare(Student o1, Student o2) { return o2.getAge()‐o1.getAge(); //以学生的年龄降序 } });