美文网首页
Java集合

Java集合

作者: HamletSunS | 来源:发表于2019-07-27 11:49 被阅读0次

首先需要明确的是接口只是定义了方法的标准与规范,父类才决定了具体的底层实现

数组的局限性

定长,数组索引越界(ArrayIndexOutOfBoundsException)运行时异常

解决方案
使用vector或ArrayList替代,可以变长,其中vector是线程安全的,ArrayList是线程不安全的 -- 相关知识:多线程

ArrayList常见的使用方法
增删改查:
add()

  • 只有元素,加在最后
  • 有索引,元素。插入在指定位置
    remove() --有重载,参数为int时是索引,返回删除的对象;参数为具体对象时,返回的是bool值表示删除是否成功

set()
get()
其他方法:toArray --变成数组 addAll--与其他容器合并 size()
clear()
contains()

ArrayList 与 List

List是接口,ArrayList是实现了接口List的一个实现类

ArrayList与泛型(Generic)

默认元素类型是Object类型,可以是任何类型的元素,但是取元素的时候需要转换,当元素类型不一致时,会造成不知道要转成什么类型(当前元素显示的类型是Object,但实际上可能指向的是其他类型),因此引入了泛型---相关知识点,泛型

ArrayList的遍历

  1. for循环
    借助size()方法获取长度,用get()方法遍历所有
  2. Iterator迭代器遍历
    arrobj.iterator()返回迭代器

LinkedList

首先要明确的是,ArrayList是用数组(顺序表)这个数据结构实现的,而LinkedList是用链表这个数据结构实现的。
同ArrayList一样,实现了List接口,大多数方法是相同的,但有一些有区别的地方。LinkedList除了实现List接口外,还实现了Deque接口(双向队列这个数据结构),可以方便的对头尾元素进行操作。另外值得一提的是Deque这个接口又继承自Queue(队列)这个接口。
另外,底层实现是由继承的父类决定的。实现的接口只是统一了方法名。
注意区分一下:
数组和链表是从存储结构进行的区分。
队列、线性表是从逻辑结构进行的区分。

Deque接口中的方法
addFirst
addLast
getFirst
getLast
removeFirst -- 返回元素,并在集合中删除该元素
removeLast -- 返回元素,并在集合中删除该元素
Queue接口中的方法
offer --入队
poll --出对
peek --查看队首元素

HashMap

常用方法
get --返回当前值
put(生疏点) --插入新元素,并返回插入元素的key之前对应的值
key不能一样,一样的话会更新key对应的值
value可以一样

遍历(生疏点)
keySet()
key集合
valueSet()
值集合
entrySet()
键值对集合

Collection

Collection是一个接口,List,Set,Deque(继承的是Queue接口),Queue接口都继承自它。它与Map接口没关系,Map接口定义的方法是按照键值对来的,而Collection是按照单个对象来的

Collections

Collections是一个工具类(注意与接口Collection区分)
该工具类提供的方法

  • reverse()
  • shuffle()
  • sort()
  • swap(arr,1,2)
  • rotate(arr,2)
  • synchronizedList(arr) 线程安全化

ArrayList和HashSet的区别

有序 与 无序
可重复 与 不可重复
数组实现 和 哈希表实现

ArrayList 和 LinkedList 性能对比

最根本的不同是底层实现的数据结构的不同,一个是数组,一个是链表。
当插入和删除时LinkdedList性能更好
当修改和定位时ArrayList性能更好

HashMap和HashTable的区别

2个区别:
前者可以把key设为null,后者不行
前者线程不安全,后者安全

HashSet LinkedHashSet TreeSet区别

不同点在于顺序性,相同点在于都不可重复
顺序性:依次是无需、按照插入顺序、按照value大小

hashcode原理

hashcode
每个Java对象都有一个与之对应的hashcode(散列值),当使用哈希表的底层数据结构时,会根据当前对象的hashcode去计算其在哈希表中存储的位置,这样查找的效率就相当于是数组结构的定位操作,效率很快。缺点是空间复杂度比较高,需要专门维护一个哈希表(空间冗余)。
HashSet判断是否重复
先通过当前对象的hashcode值计算在散列表中的位置,若该位置没元素,则不重复。
若有元素,再通过euqals去比较,再看是否重复

集合比较器 Comparator和Comparable

二者均是接口
Comparator接口由一个单独的子类去实现,作为Collections工具类sort方法的一个参数去传入
Comparable接口由要比较的集合元素本身去实现,此时Collections工具类sort方法可以直接对原本不可比较的集合元素进行比较
覆写的比较方法 返回值为int,>0说明前者或者自身逻辑大
重难点解析:
编写比较函数的时候往往会混淆到底是哪个元素更大
我的思路是

  1. 首先明确工具类的排序顺序是从逻辑小 排到 逻辑大的
  2. 编写接口中的比较函数的时候,若返回int值大于等于0,说明前者或者自身的元素逻辑大,否则代表前者或者自身的元素逻辑小(因为是两个接口,一个接口的比较函数是2个参数,一个接口仅有一个参数)

相关文章

  • 一篇文章,全面解读Android面试知识点

    Java Java基础 Java集合框架 Java集合——ArrayList Java集合——LinkedList...

  • 收藏夹

    博文 Java 集合:Java 集合学习指南 Java 集合:Java 集合源码剖析 HashMap:HashMa...

  • Java 集合框架_开篇

    Java 集合框架系列 Java 集合框架_开篇Java 集合框架_ListJava 集合框架_ArrayList...

  • Java 集合框架_List

    Java 集合框架系列 Java 集合框架_开篇Java 集合框架_ListJava 集合框架_ArrayList...

  • 9、java集合

    1、什么是java集合 java集合是用来存储多个数据引用的数据类型。 2、java集合分类 java集合类在ja...

  • 【集合框架】

    集合框架(怎么实现、适用场景) hash相关 Java集合框架 Java集合框架综述Java集合框架面试问题集锦 ...

  • Java基础——集合体系Map详解

    Java基础——集合体系Map详解 上文中我们了解了集合体系中的单列集合:Java基础——集合以及Java集合——...

  • Java基础

    Java集合框架 一、Java集合类简介: Java集合大致分为四种体系:Set:无序、不可重复的集合List:有...

  • JavaSE集合类

    JavaSE集合类 概述 Java中集合类概述Java中数组与集合的比较Java中集合框架层次结构 Collect...

  • 集合系列(一):集合框架概述

    集合系列(一):集合框架概述 Java 集合是 Java API 用得最频繁的一类,掌握 Java 集合的原理以及...

网友评论

      本文标题:Java集合

      本文链接:https://www.haomeiwen.com/subject/rkrsrctx.html