【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 ...
随机推荐
- 我眼中的大数据(二)——HDFS
Hadoop的第一个产品是HDFS,可以说分布式文件存储是分布式计算的基础,也可见分布式文件存储的重要性.如果我们将大数据计算比作烹饪,那么数据就是食材,而Hadoop分布式文件系统HDFS就是烧菜的 ...
- Python实验报告——第3章 流程控制语句
实验报告 [实验目的] 1.掌握python中流程控制语句的使用,并能够应用到实际开发中. [实验条件] 1.PC机或者远程编程环境 [实验内容] 1.完成第三章流程控制语句实例01-09,实战一到实 ...
- kubepi访问
ko最新版本会默认安装kubepi,端口没有对外暴露,点击dashboard打开的就是默认安装的kubepi 如果安装了最新版本的ko,之前单独运行的kubepi就可以stop了
- Kibana仪表盘(Dashboard)详解
Kibana 仪表板(Dashboard) 展示保存的可视化结果集合. 在编辑模式下,您可以根据需要安排和调整可视化结果集,并保存仪表板,以便重新加载和共享. 创建一个仪表板 如何创建一个仪表板: 点 ...
- 示例:Service连接应用程序
整体思路: 1.创建pod 2.创建关联上一步pod的service 3.使用不同的方式配置service从而能够在集群内部访问 4.使用ssl方式加密访问service 5.配置service为no ...
- Gitlab添加K8S集群
介绍如何在Gitlab项目中添加K8S集群,以便使用K8S集群部署gitlab-runner帮我们运行gitlab的CI/CD. 参考官方文档:https://docs.gitlab.com/ee/u ...
- centos离线安装nvm
PS:因为项目需,客户现场不能联网需要不同的node版本来切换,里面已经内置好了node 8.11.2和12.1.0 两个版本,使用nvm可以切换 链接:https://pan.baidu.com/s ...
- PAT (Basic Level) Practice 1020 月饼 分数 25
月饼是中国人在中秋佳节时吃的一种传统食品,不同地区有许多不同风味的月饼.现给定所有种类月饼的库存量.总售价.以及市场的最大需求量,请你计算可以获得的最大收益是多少. 注意:销售时允许取出一部分库存.样 ...
- Git使用与心得体会
Git使用与心得体会 一.闲聊 闲暇时间学一下Git,也算是不用在网页端操作github了 二.Git相关 集中式与分布式 Git是一个分布式的版本控制系统,而传统的SVN则属于集中式 集中式与分布式 ...
- PHP全栈开发(五):PHP学习(2. echo 和 print 输出、数组、foreach循环、字符串)
在PHP中有两个基本的输出语句,就是echo 和 print 这两个东东有什么不同呢. echo 可以一次输出一个或者多个字符: echo "这是一个", "字符串,&q ...