1.List接口

  1.1API总结

  (1)是一个元素存取有序的集合

  (2)是一个带有索引的集合,通过索引可以精确的操作集合中的元素

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

  (4)List接口的常用子类:ArrayList集合、LinkedList集合

  1.2List接口中常用的方法

  (1)add(Object e):向集合末尾处添加指定的元素

  (2)add(int index,Object e):向集合指定索引处,添加指定的元素,原有元素依次后移

  (3)remove(Object e):将指定元素对象,从集合中删除,返回值为被删除的元素

  (4)remove(int index):将指定索引处的元素,从集合中删除,返回值为被删除的元素

  (5)set(int index,Object e):将指定索引处的元素,替换成指定的元素,返回值为替换前的元素

  (6)get(int index):获取指定索引处的元素,并返回该元素

  1.3List集合3中遍历方式

  (1)迭代器Iterator

  (2)for循环

  (3)加强for循环

  1.4 Iterator的并发修改异常

  (1)产生原因:在迭代过程中,使用了集合的方法对元素进行操作。导致迭代器不知道集合中的变化,易引发数据的不确定性

  (2)错误报告:java.util.ConcurrentModificationException

  (3)解决办法:在迭代过程中,不使用集合的方法操作元素,通过ListIterator迭代器操作元素

  1.5List结合存储数据的结构

  (1)堆栈-先进后出,栈的入口、出口都是栈的顶端位置

  (2)队列-先进先出,队列的入口、出口各占一侧

  (3)数组-查找元素快:通过索引,可以快速访问指定位置的元素

         增删元素慢

  (4)链表-多个节点之间,通过地址进行连接

       查找元素慢,增删元素快

  1.6ArrayList集合-数据存储的结构是数组结构,元素增删慢,查找快

  1.7LinkedList集合-数据存储的结构是链表结构,方便元素添加、删除的集合,LinkedList提供了大量首尾操作的方法

  1.8Vector集合-数据存储的结构是数组结构,为JDK中最早提供的集合。Vector集合已被ArrayList替代

2.Set接口

  2.1Set接口

  (1)Set接口的集合中所存储的元素是不重复的,是一个无序的集合

  (2)通过元素的equals方法,来判断是否为重复元素

  2.2HashSet集合-此类实现Set接口,由哈希表支持。HashSet集合不能保证迭代顺序和元素存储顺序相同

  (1)数据存储方法

    采用哈希表结构存储数据,保证元素唯一性的方法依赖于:hashCode()与equals()方法

  (2)哈希表

    将对象存放到数组中时,根据这些对象的特有数据结合相应的算法(hashCode方法),计算出这个对象在数组中的位置,然后将对象存放到数组中。

  (3)hashCode方法

    当向哈希表存放元素时,需要根据元素的特有数据结合相应的算法

  (4)HashSet存储Java API中的类型元素

    给HashSet中存储JAvaAPI中提供的类型元素时,不需要重写元素的hashCode和equals方法,因为这两个方法已经在Java中重写完毕,如String类、Integer类

    给HashSet中存放自定义类型元素时,需要重写对象中的hashCode和equals方法,建立自己的比较方式,才能保证HashSet集合中的对象唯一

  2.3LinkedHashSet

    HashSet子类,是链表和哈希表组合的一个数据存储结构。保证元素的存入和取出的顺序

  

3.判断集合元素唯一的原理

  3.1ArrayList的contains方法

  (1)Boolean       contains(Object o)   如果此列表中包含指定的元素,则返回true

  (2)通过传入的元素的equals方法依次与集合中的旧元素比较,根据返回值判断

    自定义类型在未重写equals方法前,判断的依据是地址,想根据内容判断需要重写元素的equals方法

  3.2HashSet的add/contains等方法

  (1)boolean  add(E e)  如果此set中尚未包含指定元素,则添加指定元素

    set集合中不能存放重复元素,在添加过程中进行判断,有则不添加,否则添加

  (2)boolean  contains(Object o)  如果此set包含指定元素,则返回true

   HashSet集合由于是无序的,其判断唯一的依据是元素类型的hashCode和equals方法

   先判断新元素与集合内已有的旧元素的hashCode值,不同添加,相同再判断equals比较结果,不同添加。如果存储自定义类型,需要重写元素类的两方法。

    

    

[Day19]Collection接口中的子类(List集合、Set集合)的更多相关文章

  1. Collection接口中方法的使用

    Collection:集合的接口 1.Collection和ArrayList和List的关系 ArrayList      implement(实现)       List List        ...

  2. Collection接口中的方法的使用

    add(Object e):将元素e添加到集合coll中size():获取添加的元素的个数addAll(Collection coll1):将coll1集合中的元素添加到当前的集合中clear():清 ...

  3. 集合中Set接口与Collection接口,常用子类TreeSet,HashSet.

    Set接口与List接口的不同之处在于: 不允许有重复的数据. 定义如下: public interface Set<E>extends Collection<E> 主要方法与 ...

  4. Java容器---Collection接口中的共有方法

    1.Collection 接口 (1)Collection的超级接口是Iterable (2)Collection常用的子对象有:Map.List.Set.Queue. 右图中实现黑框的ArrayLi ...

  5. 3、Collection接口中的功能概述

    package cn.itcast_01; import java.util.ArrayList; import java.util.Collection; /** * 集合: * 由于我们使用的是面 ...

  6. Map接口中的常用方法和Map集合遍历键找值方式

    Map接口中定义了很多方法,常用的如下: public V put(K key,V value) 将指定的值与此映射中的指定键相关联(可选操作) V remove(Object key); 如果此映射 ...

  7. java中常用的数据结构--Collection接口及其子类

    java中有几种常用的数据结构,主要分为Collection和map两个主要接口(接口只提供方法,并不提供实现),而程序中最终使用的数据结构是继承自这些接口的数据结构类. 一.集合和数组的区别 二.C ...

  8. Java中的集合(二)单列集合顶层接口------Collection接口

    Java中的集合(二)单列集合顶层接口------Collection接口 Collection是一个高度封装的集合接口,继承自Iterable接口,它提供了所有集合要实现的默认方法.由于Iterab ...

  9. Java中的集合Collection接口

    /* 集合:集合是存储对象数据的集合容器.集合比数组的优势: 1. 集合可以存储任意类型的对象数据,数组只能存储同一种数据类型 的数据. 2. 集合的长度是会发生变化的,数组的长度是固定的.----- ...

随机推荐

  1. 2018-2019-1 20165234 实现mypwd

    实现mypwd(选做,加分) 1 学习pwd命令 2 研究pwd实现需要的系统调用(man -k; grep),写出伪代码 3 实现mypwd 4 测试mypwd 提交过程博客的链接

  2. 2018-2019-1 20189208《Linux内核原理与分析》第九周作业

    活动 main函数编译有问题,div 函数和系统中某个函数重名,浮点输出有问题,scanf也有问题 修改如下 scanf_s("%d %d", &a, &b); p ...

  3. 机器学习爱好者 -- 翻译吴恩达老师的机器学习课程字幕 http://www.ai-start.com/

    机器学习爱好者 -- 翻译吴恩达老师的机器学习课程字幕 GNU Octave    开源  MatLab http://www.ai-start.com/ https://zhuanlan.zhihu ...

  4. vue中怎么实现获取当前点击对象this

    应用场景 在评论列表中,有很多条评论(通过循环出来的评论列表),评论的文字有多跟少,默认展示2行超出显示点击查看更多,,要点击查看更多对当前的这条评论进行全部评论展示! 问题描述 要是在传统的点击事件 ...

  5. C++设计模式——解释器模式

    解释器模式 在GOF的<设计模式:可复用面向对象软件的基础>一书中对解释器模式是这样说的:给定一个语言,定义它的文法的一种表示,并定义一个解释器,这个解释器使用该表示来解释语言中的句子.如 ...

  6. 轮播swiper配置选项

    本文主要介绍了swiper配置选项,包含了轮播的无限滚动.懒加载.监听当前位置.上下翻页.过渡动画渐变.延时加载图片.自动轮播等: swiper官方链接DEMO <!DOCTYPE html&g ...

  7. 切换Allegro PCB Editor

    操作系统:Windows 10 x64 工具1:Allegro PCB Editor 菜单File > Change Editor... 在Product Choices对话框中,就可以选择想要 ...

  8. Oracle 升级的必要性

    一.Oracle 历史 Oracle database 作为Oracle 公司的商业产品,凭借其稳定性和运行高效占据了全球三成以上的市场.并且主要是金融.政府等领域. Oracle 数据库拥有近40年 ...

  9. install mysql on centos7

    MariaDB数据库管理系统是MySQL的一个分支,主要由开源社区在维护,采用GPL授权许可.开发这个分支的原因之一是:甲骨文公司收购了 MySQL后,有将MySQL闭源的潜在风险,因此社区采用分支的 ...

  10. ERROR: invalid byte sequence for encoding "UTF8": 0x00

    1.使用kettle批量导入数据的时候,数据出现了下面的错误.ERROR: invalid byte sequence for encoding "UTF8": 0x00 关键点: ...