数据结构
1.什么是数据结构?数据结构有哪些?
数据结构是指数据在内存中存放的机制。
不同的数据结构在数据的查询,增删该的情况下性能是不一样的。
数据结构是可以模拟业务场景。
常见的数据结构有:栈,队列,数组,链表。
(1)栈:先进后出(后进先出) First In Last Out(FILO)
(2)队列:先进先出(后进后出) First In First Out(FIFO)
(3)数组:
增删慢:每次增删元素时需要创建新的数组,需要拷贝大量的数组元素。
查询快:可以直接根据索引获得对应的元素。
查询快的根本原因是因为数组是块连续的内存区域。
(4)链表(双链表)
链表的数据是游离在内存区域中的。
增删快:每次增删元素不需要移动元素位置,只需要修改上一个元素记住下一个元素的地址值。
查询慢:每次查询元素都需要从链表头或链表尾部开始遍历查询。
索引决定了是从链表头还是链表尾部开始查询
如果索引大于等于元素个数的一半,从链表尾部开始查询,否则从链表头开始查询。
链表的元素是游离的,计算机底层只能一个一个的去找元素。
(5)红黑树(二叉树):一般用于做排序存储。
只有一个根节点。
每个节点至多有两个元素。
LinkedList集合

LikedList也是List集合的实现类。
实现了List接口
特点 : 有序 (存取顺序一致),有索引,元素可重复
底层是双链表结构,查询慢,增删快,线程不安全的,效率高。
双链表很容易拿到头尾元素的位置,所以对头尾元素的操作速度最快。

LinkedList独有的方法:
LinkedList<引用数据类型> list= new LinkedList( );
list.addFirst(E e): 将元素添加到链表头
list. addLast(E e): 将元素添加到链表尾部
list. getFirst(): 获得链表头元素
list. getLast(): 获得链表尾部元素
list. removeFirst(): 删除链表头元素
list. removeLast(): 删除链表尾部元素
总结:
如果需要执行大量的增删操作,则选择LinkedList
如果不需要执行增删操作,而是查询操作,则选择ArrayList
其实开发用的最多的还是ArrayList,一般业务都是查询居多!

Set系列集合
1.特点:元素是无序不重复的。
两个实现类
(1): HashSet(实现类,元素是无序不重复的)
(2): LinkedHashSet(实现类,元素是有序不重复的)

2. 为什么Set集合可以去掉集合中的重复元素?
-- 对于基本数据类型,集合直接判断值是否相等,相等就去掉重复的元素。
-- 对于引用数据类型,集合默认是先调用元素对象的hashCode()方法
判断两个对象的堆内存地址是否相等。
(hashCode()方法是Object类的方法,所以一切对象都可以使用这个方法)
如果相等,集合会继续调用对象的equals与另一个对象比较,如果相等,认为两个元素重复了。
如果不相等,认为两个元素 不重复。

集合判断引用对象是否重复的流程
先调用两个对象的 hashCode()方法返回的哈希值是否相等(所谓的对象的内存地址)
/ \
true(相等) false(不相等)
/ \
集合会继续调用两个对象的equals比较 不重复*
/ \
true false
/ \
重复 不重复

开发通常需要重写hashCode()方法,和equals方法给集合指定重复规则!!
以便让集合按照我们自己的规则把重复的元素自动去掉!!

(1).HashSet集合
HashSet底层也是基于一个数组实现的。
HashSet元素的存储是采用了哈希表机制来存储的。
HashSet集合无序的根本原因:是因为它是基于哈希表存储元素的。
什么是哈希表:哈希表是一种数据结构.

(2).LinkedHashSet集合
有序不重复的。
哈希表+链表的,为每个元素的添加做了一个链,以便记录添加顺序
有序不重复。
总结:
ArrayList集合:基于数组(有索引,可重复,有序的)
查询快,增删慢,查询业务多的使用这个。
LinkedList:基于链表
查询慢,增删快 查询业务少,增删业务多的情况下使用这个。
HashSet集合:
HashSet:底层是哈希表(JDK1.8之后:数组+链表+红黑树,JDK1.8之前:数组+链表)
增删和查询都比较快。
LinkedHashSet集合:
为每个元素的添加做了一个链,以便记录添加顺序
增删和查询都比较快。
可变参数
1.什么是可变参数
在 Java 5 中提供了变长参数,允许在调用方法时传入不定长度的参数
用法:
public static void 方法名(数据类型...变量名){
}
注意点:可变参数实际上就是一个数组。
可变参数传输:
(1)不传输参数。
(2)可以列举若干个参数传输
(3)直接传输一个数组。
(4)不能接受集合
(5)可变参数只能放在形参列表的最后面
(6)一个形参列表中只能有一个可变参数。
Collections集合工具类
1.什么是集合工具类?
Collections和集合没有任何关系,而是用来操作集合的
2.功能
将数组中的所有元素添加到指定的集合中。
addAll(Collection<T> c, T... elements)
shuffle(List<?> list) :将集合中的元素乱序。
*注意:只能打乱List系列集合,原因是只有List是有序的。
sort(List<T> list) 将集合中的元素排序,默认是升序排序。
有序:指的是添加顺序
排序:指的是大小顺序
注意:只能对List集合进行排序。
基本数据类型sort方法可以自动进行升序排序。 (基本数据类型本身就有大小属性)
引用数据类型sort方法默认搞不定!!(没有大小属性,不清楚大小属性)
引用数据类型应该使用如下方法进行排序:
参数一:被排序的集合
参数二: 比较器(程序员自定制定的比较规则)
sort(List<T> list, Comparator<? super T> c)
Collections.sort(list集合名, new Comparator<数据类型>() {
}

数据结构(java)的更多相关文章

  1. 纯数据结构Java实现(5/11)(Set&Map)

    纯数据结构Java实现(5/11)(Set&Map) Set 和 Map 都是抽象或者高级数据结构,至于底层是采用树还是散列则根据需要而定. 可以细想一下 TreeMap/HashMap, T ...

  2. 数据结构Java实现01----算法概述

    [声明] 欢迎转载,但请保留文章原始出处→_→ 生命壹号:http://www.cnblogs.com/smyhvae/ 文章来源:http://www.cnblogs.com/smyhvae/p/4 ...

  3. 数据结构(Java描述)之线性表

    基础概念 数据结构:是相互之间存在一种或多种关系的数据元素的集合. 逻辑结构和物理结构 关于数据结构,我们可以从逻辑结构和物理结构这两个维度去描述 逻辑结构是数据对象中数据元素之间的关系,是从逻辑意义 ...

  4. 数据结构Java实现05----栈:顺序栈和链式堆栈

    一.堆栈的基本概念: 堆栈(也简称作栈)是一种特殊的线性表,堆栈的数据元素以及数据元素间的逻辑关系和线性表完全相同,其差别是线性表允许在任意位置进行插入和删除操作,而堆栈只允许在固定一端进行插入和删除 ...

  5. 数据结构Java实现03----单向链表的插入和删除

    文本主要内容: 链表结构 单链表代码实现 单链表的效率分析 一.链表结构: (物理存储结构上不连续,逻辑上连续:大小不固定)            概念: 链式存储结构是基于指针实现的.我们把一个数据 ...

  6. 数据结构Java实现02----线性表与顺序表

    [声明] 欢迎转载,但请保留文章原始出处→_→ 生命壹号:http://www.cnblogs.com/smyhvae/ 文章来源:http://www.cnblogs.com/smyhvae/p/4 ...

  7. 面试常考的数据结构Java实现

    1.线性表 2.线性链表 3.栈 4.队列 5.串 6.数组 7.广义表 8.树和二叉树 的结点),并且,二叉树的子树有左右之分,其次序不能任意颠倒. 二叉树的性质: :在二叉树的第 i 层上至多有2 ...

  8. Java数据结构: java.util.BitSet源码学习

    接着上一篇Blog:一道面试题与Java位操作 和 BitSet 库的使用,分析下Java源码中BitSet类的源码. 位图(Bitmap),即位(Bit)的集合,是一种常用的数据结构,可用于记录大量 ...

  9. 数据结构——Java实现单链表

    一.分析 单链表是一种链式存取的数据结构,用一组地址任意的存储单元存放线性表中的数据元素.链表中的数据是以结点来表示的,每个结点由元素和指针构成.在Java中,我们可以将单链表定义成一个类,单链表的基 ...

  10. 数据结构java(一)数组链表

    链表是数据结构中最基础的内容,链表在存储结构上分成两种:数组形式储存,链式存储. 相比c语言需要的结构体,在java中由于有了面向对象编程,将指针‘藏’了起来,不需要分配内存. 所以只需要创建一个对象 ...

随机推荐

  1. python3接口测试之webservice接口测试第三方库选择及新手问题

    一.使用python3做webervice接口测试的第三方库选择suds-jurko库,可以直接pip命令直接下载,也可以在pypi官网下载压缩包进行手动安装 二.安装好后,导入Client:from ...

  2. 前后端分类状态下SpringSecurity的玩法

    前后端分离状态下,后端SpringSecurity该如何变动呢? 如何变动取决于前后端分离状态下,前后端交互的特点,纯json交互,闲言少叙,上干货 主配置类 @Configuration @Enab ...

  3. Python网络爬虫实战(二)数据解析

    上一篇说完了如何爬取一个网页,以及爬取中可能遇到的几个问题.那么接下来我们就需要对已经爬取下来的网页进行解析,从中提取出我们想要的数据. 根据爬取下来的数据,我们需要写不同的解析方式,最常见的一般都是 ...

  4. 华为Quidway S5700开启SNMP协议

    开启SNMP协议通过Console口登录主要用于交换机第一次上电或者本地配置.或者无法通过远程访问时,可通过Console口登录.如何才能通过Console口登录交换机呢?在配置通过Console口配 ...

  5. 去掉first li 的list图标

    ul中,第一个 li 前的小图标,默认情况下为小圆点,在这种情况下,给 first li 设置 list-style-type: none;可以成功去除前面的小圆点的. 当给 li 设置了 list ...

  6. Knative 实战:三步走!基于 Knative Serverless 技术实现一个短网址服务

    短网址顾名思义就是使用比较短的网址代替很长的网址.维基百科上面的解释是这样的: 短网址又称网址缩短.缩短网址.URL 缩短等,指的是一种互联网上的技术与服务,此服务可以提供一个非常短小的 URL 以代 ...

  7. 解析 HTTP 请求 header 错误

    1.org.apache.coyote.http11.Http11Processor.service 解析 HTTP 请求 header 错误 2.原因:在创建项目名称的时候,文件名不能带有中文,只能 ...

  8. charles 外部代理设置

    本文参考:charles 外部代理设置 external proxy 外部代理设置 有时候您可能需要使用网络上的代理服务器才能访问Internet. 在这种情况下,您需要为Charles配置外部代理. ...

  9. 微信小程序全局变量的设置、使用、修改

    1. 全局变量的设置 在miniprogram > app.js 文件中设置,globalData对象就是存储全局变量的. App({ globalData: { hasLogin: false ...

  10. ORA-08102异常重现及恢复

    现象: 在表上面新建主键报ORA-08102的异常: SQL> alter table t add primary key(id); alter table t add primary key( ...