一、数据结构

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)); } }

最新文章

  1. java多态的理解
  2. Codeforces CF#628 Education 8 E. Zbazi in Zeydabad
  3. Javascript 事件对象(六)事件默认行为
  4. Java线程面试题 Top 50 (转载)
  5. android开发------初识Activity
  6. 算法求和sum问题
  7. SpringMVC——接收请求参数和页面传参
  8. LAMP编译参数查看
  9. UWSGI安装与使用
  10. kafka leader 服务器均衡。
  11. videojs 视频开发API
  12. 同时操作两个数据库:报错Illegal attempt to associate a collection with two open sessions
  13. TensorFlow框架(4)之CNN卷积神经网络
  14. 栈和队列数据结构的相互实现[LeetCode]
  15. Python+Selenium 自动化实现实例-处理分页(pagination)
  16. Android Studio集成到Genymotion模拟器
  17. java maven打包jar 方法参数名变var1,var2之类的无意义参数名怎么办
  18. u-boot 内核 启动参数
  19. Magic Powder - 2 (CF 670_D)
  20. CSS 天坑 I - 字体单位

热门文章

  1. Logstash集成GaussDB(高斯DB)数据到Elasticsearch
  2. Centos7搭建 KVM 环境
  3. kubernetes为容器定义环境变量
  4. PVC-U排水管的断管与接管
  5. C++面向对象编程之复合、委托和继承
  6. 大数据技术之HBase原理与实战归纳分享-下
  7. for循环及range内置方法
  8. Vue中组件化编码使用(实战练习一)
  9. JUC(1)线程和进程、并发和并行、线程的状态、lock锁、生产者和消费者问题
  10. vue-router路由实现页面的跳转