数据结构

  常用的数据存储结构:栈,队列,数组,列表,红黑树。

  栈:先进后出(入口和出口在用一侧)

  队列:先进先出

  数组:

    查询快:因为数组的地址是连续的,通过数组的首地址找到数组中的元素。

    增/删慢:因为数组的长度是固定的,增/删一个元素,需要创建一个新的数组

  链表:

    查询慢:链表中的地址不是连续的,每次查询都必须从头开始。

    增/删快:链表结构增删一个元素对链表的整体结构没有影响。

    链表的每一个元素也称为一个节点,每个节点包含一个数据源,两个指针域  |自己的地址|数据|下一个节点的地址|

    单向链表:只有一条链子,不能保证元素的顺序

    双向链表:有两条链子,有一条链子专门用来记录元素的顺序,是一个有序集合

  红黑树:

    二叉树:分支不能超过两个

    排序树/查找树:在二叉树的基础上,元素有大小顺序,左子树小,右子树大

    平衡树:左子树数量等于右子树数量

    不平衡树:左子树数量与右子树数量不一样

    红黑树:趋近与平衡树,查询速度快

      约束: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)

  两个对象比较的结果有三种:大于,等于,小于。
   如果要按照升序排序,则o1小于o2,返回(负数),相等返回0,01大于02返回(正数)
  如果要按照降序排序则o1小于o2,返回(正数),相等返回0,01大于02返回(负数)
Map集合
  将键映射到值:1.键唯一2.键和值---映射一个键对应一个值3.靠键维护它们的关系
  双列集合:一个key,一个value
常用方法:
  put(k,v)  添加键和值,key不重复返回null,重复返回被替代的value
  get(k)  获取key对应的value,返回value
  remove(k)  删除key和value,返回value
  containsKey()  判断是否有指定key,有true无false
  containsValue()  判断是否有指定value,有true无false
遍历Map集合
  Set<K>keySet():把Map集合所有键存到Set集合中,再遍历集合中的key通过key找到value
  Map.Entry<K.V>:在Map接口中有一个内部接口Entry用来记录键和值。
  Set<Map.Entry<K,V>> entrySet():把Map集合内部的多个Entry对象存储到Set集合中,遍历Set集合,使用Entry对象的方法getKey()和getValue()
  HashMap集合:1.基于哈希表(查询速特别快)2.是一个无序的集合
  LinkedHashMap集合 extends HashMap集合:底层是哈希表+链表,是一个有序集合,保证迭代的顺序
HashMap存储自定义类型,作为key元素需要重写hashCode()和equals(),保证key唯一
HashTable<k,v>
  底层是一个哈希表,单线程
  不能存储Null值,Null键
 
JDK9对集合添加的优化
List接口,Set接口,Map接口里添加了一个静态的方法of
1.of方法只适用于List接口,Set接口,Map接口,不适用于接口的实现类
2.of的返回值是一个已经确定的集合,不能再使用add和put方法添加元素
3.Set接口和Map接口调用of方法时,不能有重复元素

java-day12的更多相关文章

  1. LY.JAVA.DAY12.String类

    2018-07-24 14:06:03 String类概述 字符串是由多个字符组成一串数据(字符序列) 字符串可以看成字符数组 一旦被赋值就不能被改变    值不能变 1.过程概述: 方法区---字符 ...

  2. LY.JAVA.DAY12.Scanner

    2018-07-24 13:23:18 Scanner类 一个可以使用正则表达式来解析基本类型和字符串的简单文本扫描器 package cn.itcast_01; /* * Scanner:用于接收键 ...

  3. 尚学堂 JAVA DAY12 概念总结

    面向过程和面向对象的区别.(5 分)面向过程就好像:一位父亲吩咐自己8岁的小儿子去买啤酒.他需要考虑儿子从出门后的每一个步骤,叮嘱儿子出门怎么走,如何过马路,到了超市如何找到酒水区,怎么识别需要的品牌 ...

  4. 尚学堂 JAVA DAY12 java程序执行时内存的分配

  5. java - day12 - InteraceTest

    接口的实现.继承等 package test.interfacedemo; import test.interfacedemo.Inter; public class InterfaceDemo { ...

  6. java - day12 - ShapeTest

    抽象类的定义及使用 抽象类不能实例化,但抽象类名的数组类型可以,见案例 package com.example; public class ShapeTest { public static void ...

  7. java一点小的知识点

    1.在dos底下编译运行java文件时,若有包名,需要建立包名对应的文件夹,然后编译的时候写出包名:java.mypack.PackageDemo 2.代码中有包名的时候,自动创建文件夹并编译的方法: ...

  8. Spark案例分析

    一.需求:计算网页访问量前三名 import org.apache.spark.rdd.RDD import org.apache.spark.{SparkConf, SparkContext} /* ...

  9. 【JAVA零基础入门系列】Day12 Java类的简单应用

    俗话说的好,实践出真知,所以除了理论知识掌握扎实以外,更重要的是要多加操练,这样才能掌握核心科技. 今天我们就用刚学会的类来实践一下,目标便是完成上一篇中的剁手任务. 我们的商品类已经准备好了,代码重 ...

  10. 我爱Java系列之《JavaEE学习笔记day12》---【缓冲流、转换流、序列/反序列化流、打印流】

    [缓冲流.转换流.序列/反序列化流.打印流] 一.缓冲流 1.字节缓冲输出流 java.io.BufferedOutputStream extends OutputStream 高效字节输出流 写入文 ...

随机推荐

  1. 搭建本地 8.8 W 乌云漏洞库

    这个是关于两个图片马的帖子. https://zhuanlan.zhihu.com/p/27486144 这个是开源地址: https://github.com/m0l1ce/wooyunallbug ...

  2. [SCOI2009]迷路(矩阵快速幂) 题解

    Description windy在有向图中迷路了. 该有向图有 N 个节点,windy从节点 0 出发,他必须恰好在 T 时刻到达节点 N-1. 现在给出该有向图,你能告诉windy总共有多少种不同 ...

  3. js中的函数声明和函数表达式的区别

    目录 一.声明与表达式的格式 1.1 声明式的格式: 1.2 表达式的格式: 二.区别 2.1 函数表达式可以直接在后面加括号执行,而函数声明不可以. 2.2 函数表达式可以被提前解析出来 2.3 命 ...

  4. Springboot开篇

    1.Spring -boot-starter-web:用于构建web 应用模块,加入后包含spring mvc框架,默认内嵌tomcat容器 2.spring-boot-starter-jpa:用于构 ...

  5. 初探gitlab & gitlab-runner & asp.net core持续集成

    文章简介  gitlab & gitlab-runner 简介 基于gitlab & gitlab-runner 的asp.net core webapi 极简持续集成实践 gitla ...

  6. scala 集合类型

    Iterable 是序列(Seq), 集(Set) 映射(Map)的特质 序列式有序的集合如数组和列表 集合可以通过== 方法确定对每个对象最多包含一个 映射包含了键值映射关系的集合 列表缓存: 使用 ...

  7. webstorm vue eslint 自动修正配置

    原文:https://medium.com/@netczuk/even-faster-code-formatting-using-eslint-22b80d061461 https://stackov ...

  8. hdu6354 /// 线段树

    题目大意: 给定n m x y z 长度为n的序列初始为0 接下来m个操作 l r v 将l r区间内比v小的数都变成v l r v由x y z和给定的函数生成 线段树维护区间 最大值 最小值 再加 ...

  9. 【POJ】1679 The Unique MST

    题目链接:http://poj.org/problem?id=1679 题意:给你一组数据,让你判断是否是唯一的最小生成树. 题解:这里用的是kuangbin大佬的次小生成树的模板.直接判断一下次小生 ...

  10. 教你如何有效防止DDos攻击?

    DDos又称分布式拒绝服务,DDos是利用大量合理的请求造成资源过载,导致服务不可用.就比如一个餐馆总共有100个座位,突然有一天某个商家恶意竞争,雇佣了200个人来到这个餐馆坐着不吃不喝,门口还排着 ...