【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)); } }
【Java SE进阶】Day03 数据结构、List、Set、Collections的更多相关文章
- Java SE 枚举,注解,增强for循环
Java SE 进阶 1.Enum 枚举对象名通常使用全部大写,常量的命名规范 构造器私有化 本类内部创建一组对象 对外暴露对象(通过为对象添加 public final static 修饰符) 可以 ...
- 数据结构与算法(3)- C++ STL与java se中的vector
声明:虽然本系列博客与具体的编程语言无关.但是本文作者对c++相对比较熟悉,其次是java,所以难免会有视角上的偏差.举例也大多是和这两门语言相关. 上一篇博客概念性的介绍了vector,我们有了大致 ...
- Java复习总结(二)Java SE 面试题
Java SE基础知识 目录 Java SE 1. 请你谈谈Java中是如何支持正则表达式操作的? 2. 请你简单描述一下正则表达式及其用途. 3. 请你比较一下Java和JavaSciprt? 4. ...
- Java Se :Map 系列
之前对Java Se中的线性表作了简单的说明.这一篇就来看看Map. Map系列的类,并不是说所有的类都继承了Map接口,而是说他们的元素都是以<Key, Value>形式设计的. Dic ...
- java se doc
J2SE 5.0 Performance White Paper http://www.oracle.com/technetwork/java/5-136747.html Java Tuning Wh ...
- 【读书笔记】《写给大忙人看的Java SE 8》——Java8新特性总结
虽然看过一些Java 8新特性的资料,但是平时很少用到,时间长了就忘了,正好借着Java 9的发布,来总结下一些Java 8中的新特性. 接口中的默认方法和静态方法 先考虑一个问题,如何向Java中的 ...
- Java SE之快速失败(Fast-Fail)与快速安全(Fast-Safe)的区别[集合与多线程/增强For](彻底详解)
声明 特点:基于JDK源码进行分析. 研究费时费力,如需转载或摘要,请显著处注明出处,以尊重劳动研究成果:博客园 - https://www.cnblogs.com/johnnyzen/p/10547 ...
- Java SE教程
第0讲 开山篇 读前介绍:本文中如下文本格式是超链接,可以点击跳转 >>超链接<< 我的学习目标:基础要坚如磐石 代码要十份规范 笔记要认真详实 一.java内容介绍 ...
- 《写给大忙人看的Java SE 8》——Java8新特性总结
阅读目录 接口中的默认方法和静态方法 函数式接口和Lambda表达式 Stream API 新的日期和时间 API 杂项改进 参考资料 回到顶部 接口中的默认方法和静态方法 先考虑一个问题,如何向Ja ...
- 【译】Java SE 14 Hotspot 虚拟机垃圾回收调优指南
原文链接:HotSpot Virtual Machine Garbage Collection Tuning Guide,基于Java SE 14. 本文主要包括以下内容: 优化目标与策略(Ergon ...
随机推荐
- Systemd 进程管理教程
systemd 介绍 systemd是目前Linux系统上主要的系统守护进程管理工具,由于init一方面对于进程的管理是串行化的,容易出现阻塞情况,另一方面init也仅仅是执行启动脚本,并不能对服务本 ...
- 使用logstash读取MySQL数据传输到es,并且@timestamp字段采用MySQL中的字段时间--建议采用这个
MySQL中数据样式 ES中数据样式 input { jdbc { jdbc_connection_string => "jdbc:mysql://192.168.0.145:3306 ...
- shell脚本中执行source命令不生效的解决办法
一个shell脚本文件中有一个source命令,使用bash a.sh命令执行后source命令进行验证没有生效. 这是因为在shell脚本中执行source会看到效果,但是shell脚本执行完后再次 ...
- 【编程学习】MATLAB
目录 一.MATLAB基础 1. 学会完成MATLAB的安装与启动 1.1 软件包下载 1.2 安装步骤 2. 矩阵的基本操作与运算 2.1 矩阵的简单输入与操作 2.2 矩阵的基本运算 2.2.1 ...
- UDP协议的网络编程
public class UDPTest { //发送端@Testpublic void sender() throws IOException { DatagramSocket socket = n ...
- 9. RabbitMQ系列之消息发布确认
Publisher Confirms发布确认是用于实现可靠发布的RabbitMQ扩展. 我们将使用发布确认来确保已发布的消息已安全到达代理.我们将介绍几种使用publisher确认的策略,并解释其优缺 ...
- Mysql知识点整理
索引相关 abcd联合索引搜索ba会走索引么 会,重排 索引的底层实现是B+树,为何不采用红黑树,B树? (1):B+Tree非叶子节点只存储键值信息,降低B+Tree的高度,所有叶子节点之间都有一个 ...
- springboot+redis+虚拟机 springboot连接linux虚拟机中的redis服务
文章目录 1.前提条件:确保虚拟机开启.并且连接到redis 2.新建立一个springboot项目,创建项目时勾选web选项 3.在pom中引入redis依赖 4.在application.prop ...
- Django之同时新增数据到两个数据库表与同时返回两个表的数据(插拔式)
models:比如有以下三个模型 from django.db import models """ 基类,其他类继承即可获得对应的字段 """ ...
- 齐博x1如何开启自定义标签模板功能
为安全起见,同时也为了避免用户随意添加风格导致默认模板不协调,系统默认关闭了类似V系列的自定义修改模板功能.如下图所示,默认是关闭的 你如果需要启用的话,把下面的代码,参考下图导进去后,就可以增加一个 ...