day03【List、Set】

  • 数据结构
  • 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();
         //以学生的年龄降序     
         } });
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值