java-day12
数据结构
常用的数据存储结构:栈,队列,数组,列表,红黑树。
栈:先进后出(入口和出口在用一侧)
队列:先进先出
数组:
查询快:因为数组的地址是连续的,通过数组的首地址找到数组中的元素。
增/删慢:因为数组的长度是固定的,增/删一个元素,需要创建一个新的数组
链表:
查询慢:链表中的地址不是连续的,每次查询都必须从头开始。
增/删快:链表结构增删一个元素对链表的整体结构没有影响。
链表的每一个元素也称为一个节点,每个节点包含一个数据源,两个指针域 |自己的地址|数据|下一个节点的地址|
单向链表:只有一条链子,不能保证元素的顺序
双向链表:有两条链子,有一条链子专门用来记录元素的顺序,是一个有序集合
红黑树:
二叉树:分支不能超过两个
排序树/查找树:在二叉树的基础上,元素有大小顺序,左子树小,右子树大
平衡树:左子树数量等于右子树数量
不平衡树:左子树数量与右子树数量不一样
红黑树:趋近与平衡树,查询速度快
约束:1.节点可以是红色或是黑色 2.根节点是黑色的 3.叶子节点是黑色的 4.每个红色节点的子节点都是黑色的 5.任何一个节点到齐每个叶子节点的所有路径上黑色系欸但数相同
List集合
Collectgion子类,有序,可重复,有索引
List接口中带索引的方法
创建List对象
List<String> list = new ArrayList<>()
add(index,element) 添加元素
remove(index) 删除元素,有返回值
set(index,element) 用指定元素替换指定位置的元素,返回替换元素
get(index) 获取指定位置元素
List的实现类
ArrayList集合(底层是一个数组)
查询快,增删慢
LinkedList集合(底层是一个链表)
查询慢,增删快
有大量操作首尾的方法:addFirst(),addLast().removeFirst(),removeLast(),getFirst(),getLast().
LinkedList集合有特用方法,所以不能用多态创建
LinkedList<E> linked =new LinkedList<>()
Vector集合(底层是一个数组)
Set集合
HashSet实现类 (底层是一个哈希表结构)查询快
无须,不可重复,无索引
创建 Set<E> set = new HashSet<>(); 使用迭代器或增强for循环遍历
哈希值:一个十进制的整数,由系统随机给出(就是对象的地址是一个逻辑地址,是模拟出来的,不是数据存储的实际物理地址)
在Object类中有一个方法可以获取对象的哈希值 int hashCode() 返回对象的哈希码值
哈希表结构:数组+链表/红黑树(提高查询速度,当链表的个数大于8位时,用红黑树)
数组结构:把元素进行分组(相同的哈希值元素一组)
链表/红黑树结构:把相同哈希值连接到一起
Set集合中不允许有重复元素的原理
Set集合调用add方法时,会调用元素的hashCode方法和equals方法判断元素是否重复(先调用hashCode方法后调用equals方法)
HashSet存储自定义类型元素,存储的元素必须重写hashCode方法和equals方法
LinkedHashCode集合
底层是一个哈希表和链表,多了一条列表记录元素的存储顺序保证元素有序,有序,不可重复
可变参数:底层是一个数组
当方法的参数列表数据类型已确定,但是参数的个数不确定就可以使用可变参数
使用格式:修饰符 返回值类型 方法名(数据类型...变量名){}
使用:
定义一个初始化变量,遍历数组
注意事项:1.一个方法只能有一个可变参数 2.一个有多个参数列表时,可变参数要放在最后面
可变参数的特殊写法:修饰符 返回值类型 方法名(Object...obj){}
Collections工具类
addAll():一次性添加多个元素
shuffle():打乱集合顺序
sort():默认规则排序(升序)
sort(List<T> list,Comparator <? super T>):方法灵活的完成,这个里面就涉及到了Comparator这个接口,位于位于java.util包下,排序是comparator能实现的功能之一,该接口代表一个比较器,比较器具有可比性!顾名思义就是做排序的,通俗地讲需要比较两个对象谁排在前谁排在后,那么比较的方法就是:
public?int?compare(String?o1,?String?o2)
java-day12的更多相关文章
- LY.JAVA.DAY12.String类
2018-07-24 14:06:03 String类概述 字符串是由多个字符组成一串数据(字符序列) 字符串可以看成字符数组 一旦被赋值就不能被改变 值不能变 1.过程概述: 方法区---字符 ...
- LY.JAVA.DAY12.Scanner
2018-07-24 13:23:18 Scanner类 一个可以使用正则表达式来解析基本类型和字符串的简单文本扫描器 package cn.itcast_01; /* * Scanner:用于接收键 ...
- 尚学堂 JAVA DAY12 概念总结
面向过程和面向对象的区别.(5 分)面向过程就好像:一位父亲吩咐自己8岁的小儿子去买啤酒.他需要考虑儿子从出门后的每一个步骤,叮嘱儿子出门怎么走,如何过马路,到了超市如何找到酒水区,怎么识别需要的品牌 ...
- 尚学堂 JAVA DAY12 java程序执行时内存的分配
- java - day12 - InteraceTest
接口的实现.继承等 package test.interfacedemo; import test.interfacedemo.Inter; public class InterfaceDemo { ...
- java - day12 - ShapeTest
抽象类的定义及使用 抽象类不能实例化,但抽象类名的数组类型可以,见案例 package com.example; public class ShapeTest { public static void ...
- java一点小的知识点
1.在dos底下编译运行java文件时,若有包名,需要建立包名对应的文件夹,然后编译的时候写出包名:java.mypack.PackageDemo 2.代码中有包名的时候,自动创建文件夹并编译的方法: ...
- Spark案例分析
一.需求:计算网页访问量前三名 import org.apache.spark.rdd.RDD import org.apache.spark.{SparkConf, SparkContext} /* ...
- 【JAVA零基础入门系列】Day12 Java类的简单应用
俗话说的好,实践出真知,所以除了理论知识掌握扎实以外,更重要的是要多加操练,这样才能掌握核心科技. 今天我们就用刚学会的类来实践一下,目标便是完成上一篇中的剁手任务. 我们的商品类已经准备好了,代码重 ...
- 我爱Java系列之《JavaEE学习笔记day12》---【缓冲流、转换流、序列/反序列化流、打印流】
[缓冲流.转换流.序列/反序列化流.打印流] 一.缓冲流 1.字节缓冲输出流 java.io.BufferedOutputStream extends OutputStream 高效字节输出流 写入文 ...
随机推荐
- [SCOI2014]方伯伯的玉米田 题解(树状数组优化dp)
Description 方伯伯在自己的农田边散步,他突然发现田里的一排玉米非常的不美. 这排玉米一共有N株,它们的高度参差不齐. 方伯伯认为单调不下降序列很美,所以他决定先把一些玉米拔高,再把破坏美感 ...
- (转)OpenFire源码学习之二:Mina基础知识
转:http://blog.csdn.net/huwenfeng_2011/article/details/43413009 Mina概述 Apache MINA(Multipurpose Infra ...
- php开发面试题---创建型设计模式1(创建型设计模式有哪几种)
php开发面试题---创建型设计模式1(创建型设计模式有哪几种) 一.总结 一句话总结: 共五种:(简单工厂模式).工厂方法模式.抽象工厂模式.单例模式.建造者模式.原型模式. 1.学设计模式最好的方 ...
- 制作linux根文件系统
转载地址:http://wenku.baidu.com/view/2cb1b4707fd5360cba1adb14.html 2011十一月 24 转 嵌入式根文件系统制作 (3985) (0) 转自 ...
- The Preliminary Contest for ICPC Asia Nanjing 2019( B H F)
B. super_log 题意:研究一下就是求幂塔函数 %m的值. 思路:扩展欧拉降幂. AC代码: #include<bits/stdc++.h> using namespace std ...
- tensorflow 训练网络loss突然出现nan的情况
1.问题描述:开始训练一切都是那么的平静,很正常! 突然loss变为nan,瞬间懵逼! 2.在网上看了一些解答,可能是梯度爆炸,可能是有关于0的计算.然后我觉得可能是关于0的吧,然后进行了验证. 3. ...
- MySQL数据库(一)—— 数据库介绍、MySQL安装、基础SQL语句
数据库介绍.MySQL安装.基础SQL语句 一.数据库介绍 1.什么是数据库 数据库即存储数据的仓库 2.为什么要用数据库 (1)用文件存储是和硬盘打交道,是IO操作,所以有效率问题 (2)管理不方便 ...
- java-day22
数据库设计的范式 * 概念:设计数据库时,需要遵循的一些规范.要遵循后边的范式要求,必须先遵循前边的所有范式要求 设计关系数据库时,遵从不同的规范要求,设计出合理的关系型数据库,这些不 ...
- linux下读取移动硬盘
前提是安装了ntfs-3g软件,系统才能识别到移动硬盘. 第一步.fdisk -l 该命令查看系统识别到的磁盘,如果移动硬盘系统能够识别, 在屏幕上会输出“/dev/sdb1”之类的字样. ...
- jsk
题目描述 码队的女朋友非常喜欢玩某款手游,她想让码队带他上分.但是码队可能不会带青铜段位的女朋友上分,因为码队的段位太高(已经到达王者),恐怕不能和他的女朋友匹配游戏. 码队的女朋友有些失落,她希望能 ...