Java中的容器(集合)持更

接口 List
所有超级接口:
Collection, Iterable
所有已知实现类:
AbstractList, AbstractSequentialList, ArrayList, AttributeList, CopyOnWriteArrayList, LinkedList, RoleList, RoleUnresolvedList, Stack, Vector

java.util.List extends Collection
collection 接口中的方法:addAll();
boolean addAll(Collection<? extends E> c)
将指定 collection 中的所有元素都添加到此 collection 中(可选操作)。

List 接口 方法
public boolean add(E e):向集合末尾处,添加指定的元素
public void add(int index, E e):向集合指定索引处,添加指定的元素,原有元素依次后移
public boolean remove(E e):将指定元素对象,从集合中删除
public E remove(int index):将指定索引处的元素,从集合中删除,返回值为被删除的元素
public E set(int index, E e):将指定索引处的元素,替换成指定的元素,返回值为替换前的元素
public E get(int index):获取指定索引处的元素,并返回该元素

Collection 单列集合的顶层接口

List 接口

特点: 有序 有索引 元素可重复 遍历(迭代)方式:三种方式1:普通for循环 2 .iterator()迭代 3:增强for循环

java.util.ArrayList implements List
特点 :有序 有索引 元素可重复
底层数据结构是数组 查询快 增删慢
线程不安全 效率高

java.util.Vector implements List
有序 有索引 元素可重复
底层数据结构是数组 查询快 增删慢
线程安全 效率低
boolean contains(Object o) 判断是否包含某个元素 contains方法比较的依据是对象的equals方法 因为String重写了equals 所以比较内容
Person没有重写equals方法 默认比较的就是地址 如果想比较内容Person类可以重写equals方法

java.util.LinkedList implements List
LinkdeList集合的特点 有序 有索引 元素可重复
底层数据是链表 查询慢 增删快
线程不安全 效率高
常用方法
public void addFirst(E e)将指定元素插入此列表的开头。
public void addLast(E e)将指定元素添加到此列表的结尾
public E getFirst()返回此列表的第一个元素
public E getLast()返回此列表的最后一个元素。
public E removeFirst()移除并返回此列表的第一个元素
public E removeLast()移除并返回此列表的最后一个元素
List list = new LinkedList(); 当这样创建对象时,不能使用自身独有的方法
LinkedList是List的子类,List中的方法LinkedList都可以使用,

java.util.Set extends Collection

Set接口:

特点 :元素唯一 (迭代方式:1.增强for循环 2.iterator()迭代)
两个常用的实现类

  1. HashSet:无序 唯一

    扫描二维码关注公众号,回复: 10703089 查看本文章
  2. LinkedHashSet:有序 唯一

  3. java.util.HashSet
    特点 (底层数据是哈希表): 无序 唯一
    hashCode()与equals()方法
    先比较对象的hashCode
    如果hashCode不同 说明两个对象不相同 添加到集合
    如果 hashCode相同 一定能说明两个对象相同吗?
    不能说明两个对象相同 有可能哈希值相同 但是 内容不同 内容不同也得添加到集合
    所以需要继续比较equals方法
    相同 不添加
    不相同 则添加到集合

java.util.LinkedHashSet extends HashSet
LinkedHashSet 集合 特点 :有序 唯一
底层数据是链表(双向链表)+哈希表
链表来保证元素有序 哈希表保证元素唯一
通过hashCode和equals方法来保证元素唯一
先比较hashCode
不同 添加到集合
相同 比较equals
相同 不添加
不同 添加

Object类 int hashCode() 返回对象的哈希值
哈希值 就是一个唯一值 可以理解为是根据地址值计算得到的唯一值 没有任何意义
唯一的意义就是区分对象
哈希值 相当于 人一出生就有身份证号
如果子类不重写此方法 比较两个对象的哈希值 就是在比较地址值
子类可以重写此方法 可以返回任意值

根据成员变量 重写hashCode方法
尽量多比较hashCode少比较equals来提供程序的效率
需要根据Person的name和age来重写hashCode方法
对于成员变量来说 有两种类型 一种是引用类型 一种是基本类型
引用类型的哈希值 就是调用本身的hashCode方法 基本类型的哈希值 就是其本身
name.hashCode()

发布了6 篇原创文章 · 获赞 8 · 访问量 138

猜你喜欢

转载自blog.csdn.net/qq_42848910/article/details/105115872