【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 ...
随机推荐
- 将 Docker Engine 节点从 dockershim 迁移到 cri-dockerd
官网地址:https://kubernetes.io/zh-cn/docs/tasks/administer-cluster/migrating-from-dockershim/migrate-doc ...
- 通过 Docker 部署 Mysql 8.0 主从模式
文章转载自:http://www.mydlq.club/article/106/ 系统环境: Mysql 版本:8.0.23 Docker 版本:19.03.13 一.为什么需要 Mysql 主从复制 ...
- CentOS7部署FastDFS+nginx模块
软件下载 # 已经事先把所需软件下载好并上传到/usr/local/src目录了 https://github.com/happyfish100/libfastcommon/archive/V1.0. ...
- http和https分别是什么?
http中文名:超文本传输协议英文名:Hyper Text Transfer Protocol解释:是一个简单的请求-响应协议,它通常运行在TCP之上.它指定了客户端可能发送给服务器什么样的消息以及得 ...
- 微信小程序发布与支付
一.小程序的发布流程 小程序协同工作和发布官网链接 1.背景 小程序的平台里,开发者完成开发之后,需要在开发者工具提交小程序的代码包,然后在小程序后台发布小程序. 2.流程 上传代码 代码管理服务器上 ...
- Qt+ECharts开发笔记(五):ECharts的动态排序柱状图介绍、基础使用和Qt封装Demo
前言 上一篇的demo使用隐藏js代码的方式,实现了一个饼图的基本交互方式,并预留了Qt模块对外的基础接口. 本篇的demo实现了自动排序的柱状图,实现了一个自动排序柱状图的基本交互方式,即Qt ...
- .NET 5 设计 API (资源站)
跟新于 2022-11日 数据抓取端 随着数据的增多,问题也越来越多 用redis 主要是为了 以后进行,多个数据库写入. 例如我搭建一个 别的数据库论坛,我直接拿数据去redis里面拿,就不用跨库查 ...
- .NET MAUI 社区工具包 1.3版本发布
2022 年 10 月 4 日,微软发布了 .NET MAUI 社区工具包的 1.3 版,具体参见微软官方博客:https://devblogs.microsoft.com/dotnet/announ ...
- 关于IOC容器
1.什么是 IOC (1)控制反转,把对象创建和对象之间的调用过程,交给 Spring 进行管理 (2)使用 IOC 目的:为了耦合度降低
- 作用域通信对象:session用户在登录时通过`void setAttribute(String name,Object value)`方法设置用户名和密码。点击登录按钮后,跳转到另外一个页面显示用户
作用域通信对象:session session对象基于会话,不同用户拥有不同的会话.同一个用户共享session对象的所有属性.作用域开始客户连接到应用程序的某个页面,结束与服务器断开连接.sessi ...