A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

鹏Oba

初级黑马

  • 黑马币:

  • 帖子:

  • 精华:

© 鹏Oba 初级黑马   /  2019-3-30 15:41  /  615 人查看  /  0 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

数据结构
  • 查询快:数组的地址是连续的,我们通过数组的首地址可以找到数组,通过数组的索引可以快速的查找某一个元素
  • 增删慢:数组的长度是固定的,我们想要增加/删除一个元素,必须要创建一个新数组,把源数组的数据复制过来再把新数组的地址赋值给变量,源数组会在内存中被销毁(垃圾回收)
  • ArrayList几个是如何保证长度可变
    • 第一次创建集合对象时,底层会开辟一个的长度为10的数组空间,我们可以不断的添加元素!
    • 添加完10个元素以后,集合会自动进行扩容,规则:每次开辟新数组的空间都是上一次数组长度的1.5倍


链表结构
  • 查询慢:链表中的地址不是连续的,每次查询元素必须从头开始查询
  • 增删慢:链表结构,增加/删除一个元素,对链表结构没有影响。所以增删快。
  • 链表分类
    • 单向链表:链表中只有一条链子,不能保证元素的顺序(存储在元素和取出元素的顺序可能不一致)
      • 当前元素会记录下一个元素的地址值

    • 双向链表:链表中有两条链子,有一条链子是专门记录元素的顺序,是一个有序集合
      • 当前元素会记录下一个元素的地址值,同时下一个元素也会记录上一个元素的地址值       



  • LinkedList集合查询的特点:
    • 如果查询索引小于集合长度的/2,从前向后一个一个的查找。查找到传入的索引位置结束。
    • 如果查询的索引大于等于集合长度/2,从后向前一个一个的查找。查找到传入的索引位置结束。


二、List集合1.List接口中的常用方法
方法名
说明

add(int inde,E e)向指定索引处添加元素
get(int index)获取指定索引元素
set(int inde,E e)修改指定索引元素
remove(int index)删除指定索引元素
  • List三大特点
    • 有序集合,存储元素和取出元素是一直的
    • 有索引,包含了一些带索引的方法
    • 允许存储重复元素


2.ArrayList集合
方法名
说明

addFirst(E e)将指定元素插入列表的开头
addLast(E e)将指定元素添加到此列表的结尾,等效于add()
push(E e)将元素推入此列表所表示的堆栈,等效于addFirst()
getFirst获取列表的第一个元素
getLast获取列表的最后一个元素
removeFirst移除此列表的第一个元素
removeLast移除此列表的最后一个元素
  • LinkedList特点
    • 底层是一个链表结构:查询慢,增删快
    • 里面包含了大量操作首尾元素的方法

    注意:LinkedList集合特有的方法,不能使用多态
3.List集合实现类的区别
  • ArryList和LinkedList有什么区别
    • 相同点:都是单列集合
    • 不同点:
      • ArrrayList底层是数组实现。查询快,增删慢
      • LinkedList底层是链表实现。查询慢,增删快



  • ArrarList、LinkedList和Vector有什么区别
    • 相同点:ArrayList和Vector底层都是数组实现的
    • 不同点:
      • ArrarList和LinkedL都是现成不安全的。速度快、数据不看全。JDK1.2版本出现
      • Vectour是线程安全的。速度慢。数据安全!JDK1.0版本出现



Set接口的特点
  • 不允许存储重复的元素
  • 没有索引,没有带索引的方法,也不能使用普通的for循环遍历java.uitl.HashSet集合  implements Set接口

HashSet特点:
  • 不允许存储重复的元素
  • 没有索引,没有带索引的方法,也不能使用for循环
  • 是一个无无序的集合,存储元素和取出的元素的顺序可能不一致
  • 底层是一个哈希表结构(查询速度非常的快)
  • 没有排序的功能
  • 使用迭代器、增强for进行遍历

哈希值
  • 是一个十进制的整数,由系统随机给出(就是对象的地址值,是一个逻辑地址,是模拟出来得到的地址,不是数据实际存储的地址值)在Object类有一个方法,可以获取对象的哈希值——int hashCode()返回该对象的哈希值
    • hashCode()方法的源码:
      • public native int hashCode();
        • native:代表方法调用的是本地操作系统的方法




Set集合保证元素唯一性原理
  • 根据元素的哈希值来确定该元素所保存的位置
  • 如果哈希值不同,直接存储
  • 如果哈希值相同,继续比较equals()方法
    • true:不存储
    • false:以桶机构存储(如果挂载的元素超过8个,自动转为红黑树结构)


  • 字符串中"通话"与"重地"的哈希值相同

HLinkedHashSet集合
  • 可以保证元素的存储顺序

可变参数
  • JDK1.5之后出现的新特性
  • 使用前提
    • 当方法的参数列表数据类型已经确定,但是参数的个数不确定。就可以使用可变参数


  • 使用格式:定义方法时使用
    • 修饰符 返回值类型 方法名(数据类型...变量名){}


  • 可变参数的原理
    • 可变参数底层是一个数组,根据句传递参数个数不同,会粗昂见不同长度的数组,来储存这些参数
    • 传递的参数个数,可以是0个(不传递)。1,2.。。。多个


注意事项:
  • 一个方法的参数列表只能有一个可变参数
  • 如果方法的参数有多个,那么可变参数必须下载参数列表的末尾

可变参数的特殊写法:
  • pubulic static void 变量名(Object...obj){}
    • 变量名(Object...obj)——不用定义数据类型,任意类型的参数都可以存储



0 个回复

您需要登录后才可以回帖 登录 | 加入黑马