Java基础,数据结构,List集合,List的子类,Set

一.数据存储的常见结构

        数据存储的常见结构有:栈,队列,数组,链表和红黑树

1.栈

        栈:stack,又称堆栈,是运算受限的线性表,其限制是仅允许在标的一端进行插入和删除操作,不允许在其他任何位置进行添加,查找,删除操作

特点:

  • 先进后出
  • 栈的入口,出口都是栈的顶端位置

压栈:存元素。把元素存储到栈的顶端位置,栈中已有元素依次向栈底方向移动一个位置

弹栈:取元素。把栈的顶端元素取出来,栈中已有元素依次向栈顶方向移动一个位置

2.队列

        队列:queue,简称队,同堆栈一样,也是一种运算受限的线性表,其限制是仅允许在表的一端进行插入,而在另一端进行删除

特点:

  • 先进先出
  • 队列的入口,出口各占一侧

3.数组

        数组:Array,,是有序的元素序列,数组是在内存中开辟一段连续的空间,并在此空间存放元素

特点:

  • 查找元素快:通过索引,可以快速访问指定位置的元素
  • 增删元素慢

4.链表

        链表:linked list,,由一系列结点node(链表中每一个元素称为结点)组成,结点可以在运行时i动态生成。每个结点包括两个部分:一个是存储数据元素的数据域,另一个是存储下一个结点地址的指针域,介绍一下单链表

特点:

  • 多个结点之间,通过地址进行连接
  • 查找元素慢
  • 增删元素快

5.红黑树

        二叉树:binary tree,是每个结点不超过2的有序树

约束:

  1. 节点可以是红色的或者黑色的

  1. 根节点是黑色的

  1. 叶子节点(特指空节点)是黑色的

  2. 每个红色节点的子节点都是黑色的

  3. 任何一个节点到其每一个叶子节点的所有路径上黑色节点数相同

特点:

速度特别快,趋近平衡树,查找叶子元素最少和最多次数不多于二倍

二.List集合

1.接口

        List接口继承于Collection接口,是单列集合的一个重要分支,习惯地会将实现了List接口的对象称为List集合。在List集合中允许出现重复的元素,所有元素是以一种线性方式进行存储,在程序中可以通过访问集合中的指定元素,另外,List集合还有一个特点就是元素有序,即元素的存入顺序和取出顺序一致,先进先出

特点:

1.它是一个元素存取有序的集合

2.它是一个带有索引的集合,通过索引就可以精确的操作集合中的元素(与数组的索引是一个道理)

3.集合中可以有重复的元素,通过元素的equals方法,来比较是否为重复的元素

2.常用方法

add(int index,E element):增加插入元素,不能超过长度 

get(int index):获取指定位置元素

indexof(Object o):获取指定元素的位置

remove(int index):移除指定位置元素

set(int index,E elemet):替换指定位置元素

三.List的子类

1.ArrayList集合

        集合数据存储的结构是数组结构,元素增删慢,查找快,线程不安全,效率高

开发的时候不能随意使用ArrayList这是不严谨的,要具体看要求

2.LinkedList集合

        集合数据存储的结构是链表结构,方便元素添加删除,查找慢

方法:

        addFirst(),addLast(),getFirst(),getLast(),removeFirst(),removeLast

        pop(),push()

3.Vector类

可以实现可增长的对象数组,线程安全的,效率低

四.Set集合

        元素不可重复,无序

如何确定的元素不重复的原理

  1. 通过hashCode方法获取元素的hash值
  2. 根据hashCode%16,得到一个值0-15
  3. 根据得到的值,判断在容器的指定位置,是否存在元素
  4. 如果不存在,则将元素存在此位置
  5. 如果存在,判断hashCode是否相等
  6. 如果hashCode不相等,则将此元素挂在此数组下面
  7. 如果hashCode相等,通过equals方法,判断内容是否相同
  8. 如果内容不相同,则挂在该元素后面
  9. 如果内容相同,则不存储该元素

自定义元素存入HashSet,要保障不重复,需要重写equals和hashCode

LinkedHashSet特点:有序,不重复

TreeSet:排序,根据元素的自然顺序排序,也可通过定义比较方法,来根据方法排序

  • 20
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值