【Java SE进阶】Day03 数据结构、List、Set、Collections

一、数据结构

1、红黑树

  • 根黑子黑红子黑
  • 接近平衡树(左右孩子数量相同),查询叶子快慢次数不超过2倍

二、List

1、概述

  • 元素有序
  • 线性存储
  • 带有索引
  • 可以重复

2、常用方法

  • 增:add(I,E)
  • 删:E removerI()
  • 改:set(I,E)
  • 查:get(O)

3、常用子类

  • ArrayList
  • LinkedList:提供大量首尾操作的方法,也可作为堆栈和队列使用 
    • addFirst()
    • addLast()
    • getFirst()
    • getLast()
    • removeFirst():移除并 返回
    • removeLast()
    • pop()
    • push()
    • isEmpty()
  • Vector:线程安全
    • Enumeration<E> elements():返回元素的枚举
    • addElement(E):添加到向量末尾,大小加一    

三、Set

1、概述

  • 元素无序
  • 不会重复

2、HashSet

  • 不重复,无序,速度快,初始容量为16
  • 存储结构:
    • 1.8前:数组+链表
    • 1.8后:数组+链表--->数组+红黑树(链表长度超过8位时)
  • 调用add方法时,会分别使用hashCode()和equals()方法判断元素是否重复  

3、LinkedHashSet

  • 链表+哈希表 ,保证元素有序且不重复

4、可变参数(jdk1.5后)

  • 前提:参数类型确定,个数不确定
  • 格式:定义方法时使用(数据类型…参数名)
  • 原理:底层是数组,根据传参个数创建不同长度的数组,可以为0个
  • 注意:只能有一个;参数有多个,可变参数必须写在末尾
  • 举例:计算任意个数之和--add(int..arr)

五、Collections:用于对集合操作的集合工具类

1、常用方法

  • addAll(Collection<T> c, T... elements):使用可变参数向集合中添加元素,如addAll(list,1,2,3,4)
  • shuffle(List):打乱集合顺序
  • sort(List<T> list):升序排序 
  • sort(List<T> list,Comparator<? super T> ):按指定规则排序

2、Comparator

  • 实现方式:Comparable接口(类中实现compareTo方法)和Comparator接口(区别)
  • Comparator作为参数传递,重写compare方法
import java.util.Arrays;

public class User implements Comparable<User> {
    
    public int age;
    public String username;

    public User(int age, String username) {
        this.age = age;
        this.username = username;
    }

    @Override
    public String toString() {
        return this.username;
    }

    @Override
    public int compareTo(User o) {
        if(this.age>o.age) {
            return 1;
        } else if(this.age<o.age) {
            return -1;
        } else {
            return 0;
        }
    }
    
    public static void main(String[] args) {
        User[] arr = new User[3];
        arr[0] = new User(15,"user1");
        arr[1] = new User(10,"user2");
        arr[2] = new User(20,"user3");
        
        System.out.println("排序前:");
        System.out.println(Arrays.toString(arr));
        
        Arrays.sort(arr);
        
        System.out.println("排序后:");
        System.out.println(Arrays.toString(arr));

    }

}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值