一、数据结构

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

【Java SE进阶】Day03 数据结构、List、Set、Collections的更多相关文章

  1. Java SE 枚举,注解,增强for循环

    Java SE 进阶 1.Enum 枚举对象名通常使用全部大写,常量的命名规范 构造器私有化 本类内部创建一组对象 对外暴露对象(通过为对象添加 public final static 修饰符) 可以 ...

  2. 数据结构与算法(3)- C++ STL与java se中的vector

    声明:虽然本系列博客与具体的编程语言无关.但是本文作者对c++相对比较熟悉,其次是java,所以难免会有视角上的偏差.举例也大多是和这两门语言相关. 上一篇博客概念性的介绍了vector,我们有了大致 ...

  3. Java复习总结(二)Java SE 面试题

    Java SE基础知识 目录 Java SE 1. 请你谈谈Java中是如何支持正则表达式操作的? 2. 请你简单描述一下正则表达式及其用途. 3. 请你比较一下Java和JavaSciprt? 4. ...

  4. Java Se :Map 系列

    之前对Java Se中的线性表作了简单的说明.这一篇就来看看Map. Map系列的类,并不是说所有的类都继承了Map接口,而是说他们的元素都是以<Key, Value>形式设计的. Dic ...

  5. java se doc

    J2SE 5.0 Performance White Paper http://www.oracle.com/technetwork/java/5-136747.html Java Tuning Wh ...

  6. 【读书笔记】《写给大忙人看的Java SE 8》——Java8新特性总结

    虽然看过一些Java 8新特性的资料,但是平时很少用到,时间长了就忘了,正好借着Java 9的发布,来总结下一些Java 8中的新特性. 接口中的默认方法和静态方法 先考虑一个问题,如何向Java中的 ...

  7. Java SE之快速失败(Fast-Fail)与快速安全(Fast-Safe)的区别[集合与多线程/增强For](彻底详解)

    声明 特点:基于JDK源码进行分析. 研究费时费力,如需转载或摘要,请显著处注明出处,以尊重劳动研究成果:博客园 - https://www.cnblogs.com/johnnyzen/p/10547 ...

  8. Java SE教程

    第0讲 开山篇 读前介绍:本文中如下文本格式是超链接,可以点击跳转 >>超链接<< 我的学习目标:基础要坚如磐石   代码要十份规范   笔记要认真详实 一.java内容介绍 ...

  9. 《写给大忙人看的Java SE 8》——Java8新特性总结

    阅读目录 接口中的默认方法和静态方法 函数式接口和Lambda表达式 Stream API 新的日期和时间 API 杂项改进 参考资料 回到顶部 接口中的默认方法和静态方法 先考虑一个问题,如何向Ja ...

  10. 【译】Java SE 14 Hotspot 虚拟机垃圾回收调优指南

    原文链接:HotSpot Virtual Machine Garbage Collection Tuning Guide,基于Java SE 14. 本文主要包括以下内容: 优化目标与策略(Ergon ...

随机推荐

  1. Systemd 进程管理教程

    systemd 介绍 systemd是目前Linux系统上主要的系统守护进程管理工具,由于init一方面对于进程的管理是串行化的,容易出现阻塞情况,另一方面init也仅仅是执行启动脚本,并不能对服务本 ...

  2. 使用logstash读取MySQL数据传输到es,并且@timestamp字段采用MySQL中的字段时间--建议采用这个

    MySQL中数据样式 ES中数据样式 input { jdbc { jdbc_connection_string => "jdbc:mysql://192.168.0.145:3306 ...

  3. shell脚本中执行source命令不生效的解决办法

    一个shell脚本文件中有一个source命令,使用bash a.sh命令执行后source命令进行验证没有生效. 这是因为在shell脚本中执行source会看到效果,但是shell脚本执行完后再次 ...

  4. 【编程学习】MATLAB

    目录 一.MATLAB基础 1. 学会完成MATLAB的安装与启动 1.1 软件包下载 1.2 安装步骤 2. 矩阵的基本操作与运算 2.1 矩阵的简单输入与操作 2.2 矩阵的基本运算 2.2.1 ...

  5. UDP协议的网络编程

    public class UDPTest { //发送端@Testpublic void sender() throws IOException { DatagramSocket socket = n ...

  6. 9. RabbitMQ系列之消息发布确认

    Publisher Confirms发布确认是用于实现可靠发布的RabbitMQ扩展. 我们将使用发布确认来确保已发布的消息已安全到达代理.我们将介绍几种使用publisher确认的策略,并解释其优缺 ...

  7. Mysql知识点整理

    索引相关 abcd联合索引搜索ba会走索引么 会,重排 索引的底层实现是B+树,为何不采用红黑树,B树? (1):B+Tree非叶子节点只存储键值信息,降低B+Tree的高度,所有叶子节点之间都有一个 ...

  8. springboot+redis+虚拟机 springboot连接linux虚拟机中的redis服务

    文章目录 1.前提条件:确保虚拟机开启.并且连接到redis 2.新建立一个springboot项目,创建项目时勾选web选项 3.在pom中引入redis依赖 4.在application.prop ...

  9. Django之同时新增数据到两个数据库表与同时返回两个表的数据(插拔式)

    models:比如有以下三个模型 from django.db import models """ 基类,其他类继承即可获得对应的字段 """ ...

  10. 齐博x1如何开启自定义标签模板功能

    为安全起见,同时也为了避免用户随意添加风格导致默认模板不协调,系统默认关闭了类似V系列的自定义修改模板功能.如下图所示,默认是关闭的 你如果需要启用的话,把下面的代码,参考下图导进去后,就可以增加一个 ...