集合的体系结构

Collection 单列集合的接口

|————List 如果实现了List接口的集合类,具备的特点是有序,可重复

|————Set 如果实现了Set接口的集合类,集合特点无序不可重复

学习容器体系时,从上到下的来学习,凡是Collection接口中的方法,实现子类中都有,所以先把Collection中的方法,认真学习使用。

凡是容器,其方法无非下面的分类

增加:

Add(E e) 添加成功返回true否则返回false

addAll(Collection<Object> c) 把一个集合中的元素全体添加到另外一个集合中去

删除:

Clear() 清空集合中的元素

Remove(Object o) 删除指定的元素

removeAll(Collection<?>c) 删除另一个集合内的所有的

RetailAll(Collection<?>c) 保留交集元素,删除其他非交集元素

查看:

size() 查看元素的个数

判断:

Contains(Object o) 判断师存在在指定的元素

注意contains方法,内部的实现,是用到了object的equals方法,但是该方法默认比较的是比较对象的引用值是否相同,所以再使用contains方法的是时候应当比较改写元素类的equals方法,当然不成文的java规定改写equals方法是,我们也来改写一下hashCode方法。!!!万万要注意这里面的调用的是实参的equals方法,因为判断的就是是不是存在于c集合中。

containsAll(Collection<?>c)一般调用的时候就是c1.containsAll(c2)判断c2中的元素是不是都在c1中,最坏的情况是c2中的每一个元素调用equals方法和c1中的每一个元素比较一遍。

isEmpty()

迭代:

toArray() //又涉及到泛型 返回的是一个obj的数组,为什么返回的是一个Object数组,因为集合中可以是任意的元素

Iterator() 返回一个java.util.Iterator(迭代器)的接口,迭代器的作用就是用来抓取元素。迭代器的三个方法:hasNext()测试是不是还有下一个元素有的话则返回true  next()取出下一个元素  remove删除迭代器所在的集合的最后一个元素

切记切记,接口无非是一种高度抽象的特殊的类class。

集合的体系结构

Collectin

|——List 实现了List接口的集合类,该集合中的元素有序可重复

|——Set 实现了Set接口的集合类,该集合中的元素无序,不可重复

这里郑重声明的说一下,Collectin,List,Set都是一些接口,既然是接口,接口最好能够就是定义了不同的规范,其实即使一些方法,Collectin中的方法是大家共有的,往下的程度度一样,那么看到的方法也是不一样的。‘

同样是new ArrayList() 前面用的接口不一样,那么能使用的方法也就不一样,这是很明显的你看 Collection c = new ArrayList(),和List l = new ArrayList()一定是不一样的,这里的c和l有重叠的方法。恩这一块说的可能不是很清楚,其实这也是接口的灵活巧妙之处,更重要的是要去体会。

所以接下来学习List和Set时,和Collectin相同的方法可以略过,重点要看的是他们在Collectin之外拓展的,不同的方法。

List接口方法的介绍

List中的元素有序不是指自然有序,而是指添加进去的顺序与元素的出来的顺序是一样的。下面都是List特有的方法:

添加:

add(int index, E element) 把元素茶如道指定索引位置,索引位置都是从0开始的

addAll(int index, Collection <? extends E>c)

查看:

get(int index)

indexOf(Object o)

lastIndexOf(object o)

subList(int index, int toIndex)

修改:

set(int index, E element)

迭代:

ListIterator listIterator() 返回的类型是ListIterator接口类型 ListIterator接口是Iterator的子接口,那很明显Iterator的接口,ListIterator也有,我们学习的过程就是不断积累的过程,我们只学习那些写的特有的

ListIterator的特有方法

hasPrevios() 判断是否存在上一个元素

Previous() 当前指针先向上移动一个单位,然后在取出当前指针指向的元素

Next() 取出当前指针指向的元素,然后指针向下移动一个单位。

Add(E e) 把当前元素插入到当前指针所指的位置上

Set(E e) 替换迭代器最后一次返回的元素(可能是next或者是previos返回的),如果当前迭代器没有返回的,那么久不会替换,编译器将会报错。

迭代器的注意事项:

1在迭代器迭代元素的过程中不能改变集合元素的个数

Lisriterator it = list.listIterator();

While(it.hasnext())

{

System.out.print(it.nexr());

It.add(“aa”);

//list.add(“aa”); 这一句就会直接报错

}

通常可能觉着上面是一个死循环,不是的,上面的it.add(“aa”);时会跳过新加入的元素,会让游标向前家1.

迭代器操作的过程中,不允许使用集合的对象方法,比如list.add(“aa”) list.remove(“aa”)这是就会报错,抛出异常。如果需要改变的话,只能向上面那样使用迭代器的add改变个数。

迭代器迭代元素的过程中:迭代器从穿件到使用结束的过程中 从代码的作用域上看就是从定义迭代器到使用迭代器的最后一条语句之间。

观察可以发现List中的方法都是和元素的索引有关

就是不断的给你重复线面的体系,希望能够不断的加深印象,这个样子也是在这个体系洗面不断的添加新的类

Collection 单列集合的接口

|——Lis 如果实现的List接口的集合类,特点:序可重复

| |——ArrayList 底层维护一个Object数组,特点是:查询快,增删慢,很明

| | 这是数组的连续存储的特点

| |——Linkedlist 特点:查询慢,增删快

| |——Vector(了解即可)

|——Set 如果实现了Set接口的集合类,特点:无序不可重复

ArrayList的特有方法

ArrayList主要学习的是其实现方式构造方法,这些可以查看源码

ArrayList的底层维护一个Object数组,使用午无参构造函数时,Object的默认容量是10,当长度不够时,自动增长原来长度的0.5倍。

ensureCapacity(int minCapacity)使用该方法指定集合的长度,该方法不常用,我们一般 使用一个有参的构造函数指定集合的大小

trimToSize() 把ArrayList的容量调整为当前列表的大小

ArrayList的使用场景:如果目前的数据是查询比较多,增删比较少的时候,那么就使用ArrayList,比如搞笑的图书馆

LinkedList的特有方法

特点:查询慢,增删快

1:方法介绍

addFirst(E e)

addLast(E e)

getFirst()

getLast()

removeFirst()

removeLast()

如果集合中没有元素,获取或者删除元素抛:NoSuchElementException

2:数据结构

1:栈 (1.6) 主要用于模拟堆栈的存储方式

先进后出

push() 在首部压入栈

pop() 在首部出栈

2:队列(双端队列1.5) 主要是可以用来模拟队列的数据结构存储方式

先进先出

offer()

poll()、

3:返回逆序的迭代器对象

descendingIterator()   返回逆序的迭代器对象

再来看集合的体系

Collectin 单例集合的接口

|——List 实现了List接口的集合的特点:有序可重复t

| |——ArrayList 底层维护的是一个Object数组,查询快,增删慢,和索引紧密

| |——LinkedList 底层维护的是一个链表,特点:查询慢,增删快

| |——Vector 了解,其中维护的也是Object数组和ArrayList一样,但线程安全, | 所以效率较低,已经被ArrayList取代

|——Set 实现了Set接口的集合的特点:无序不可重复,

|——hashSe 底层使用了hash表存储的,其特点是查询存储都比较的快

|——treeSet

(8)集合之List,ArrayList,LinkedList的更多相关文章

  1. Java——集合框架之ArrayList,LinkedList,迭代器Iterator

    概述--集合框架 Java语言的设计者对常用的数据结构和算法做了一些规范(接口)和实现(具体实现接口的类).所有抽象出来的数据结构和操作(算法)统称为Java集合框架(Java Collection ...

  2. Javase之集合体系(2)之List及其子类ArrayList,LinkedList与Vector及其迭代器知识

    集合体系之List及其子类ArrayList,LinkedList与Vector及其迭代器知识 List(接口) 特点:有序(存储与取出顺序相同),可重复 List子类特点: ​ ArrayList: ...

  3. List集合与Set集合(ArrayList,LinkedList,Vector,HashSet,LinkedHashSet,可变参数)

    List集合介绍及常用方法 import java.util.ArrayList; import java.util.Iterator; import java.util.List; /* java. ...

  4. Java集合 之List(ArrayList、LinkedList、Vector、Stack)理解(new)

    一. ArrayList底层实现原理 对比 和Vector不同,ArrayList中的操作不是线程安全的!所以,建议在单线程中才使用ArrayList,而在多线程中可以选择Vector或者CopyOn ...

  5. Java集合--ArrayList,LinkedList性能分析

    转载请注明出处:http://www.cnblogs.com/skywang12345/p/3308900.html 第1部分 List概括 先回顾一下List的框架图 (01) List 是一个接口 ...

  6. ArrayList LinkedList源码解析

    在java中,集合这一数据结构应用广泛,应用最多的莫过于List接口下面的ArrayList和LinkedList; 我们先说List, public interface List<E> ...

  7. Java 集合系列05之 LinkedList详细介绍(源码解析)和使用示例

    概要  前面,我们已经学习了ArrayList,并了解了fail-fast机制.这一章我们接着学习List的实现类——LinkedList.和学习ArrayList一样,接下来呢,我们先对Linked ...

  8. Java 集合系列 03 ArrayList详细介绍(源码解析)和使用示例

    java 集合系列目录: Java 集合系列 01 总体框架 Java 集合系列 02 Collection架构 Java 集合系列 03 ArrayList详细介绍(源码解析)和使用示例 Java ...

  9. ArrayList LinkedList Vector

    ArrayList是基于数组实现的,没有容量的限制. 在删除元素的时候,并不会减少数组的容量大小,可以调用ArrayList的trimeToSize()来缩小数组的容量. ArrayList, Lin ...

  10. Java 集合 JDK1.7的LinkedList

    Java 集合 JDK1.7的LinkedList @author ixenos LinkedList LinkedList是List接口的双向链表实现,JDK1.7以前是双向循环链表,以后是双向非循 ...

随机推荐

  1. SQL 存储过程 触发器 事务

    一.存储过程 存储过程:就像函数一样的会保存在:数据库中-->可编程性 --> 存储过程 创建存储过程:create proc JiaFa --存储关键字proc @a int,      ...

  2. SQL 增删改查45道题

    create database School use School go create table Student --1.学生表 ( Sno ) not null primary key,--学号( ...

  3. 框架篇:Spring+SpringMVC+hibernate整合开发

    前言: 最近闲的蛋疼,搭个框架写成博客记录下来,拉通一下之前所学知识,顺带装一下逼. 话不多说,我们直接步入正题. 准备工作: 1/ IntelliJIDEA的安装配置:jdk/tomcat等..(本 ...

  4. EF6的多线程与分库架构设计实现

    1.项目背景 这里简单介绍一下项目需求背景,之前公司的项目基于EF++Repository+UnitOfWork的框架设计的,其中涉及到的技术有RabbitMq消息队列,Autofac依赖注入等常用的 ...

  5. ArcGIS制图表达Representation-制图表达介绍

    ArcGIS制图表达技术-制图表达介绍 by 李远祥 在基于GIS数据的制图中,大部分都是使用的数据+符号应用的这种模式.这种模式已经被应用很多年,而且也是非常成熟.对应在ArcGIS体系里面,就是数 ...

  6. Spark Streaming实时写入数据到HBase

    一.概述 在实时应用之中,难免会遇到往NoSql数据如HBase中写入数据的情景.题主在工作中遇到如下情景,需要实时查询某个设备ID对应的账号ID数量.踩过的坑也挺多,举其中之一,如一开始选择使用NE ...

  7. 一个技术汪的开源梦 —— 微信开发工具包(WeixinSDK)

    由于春节的关系 WeixinSDK 这个开源项目的进展比预期推迟了大约一个月的时间,值得高兴的是到目前为止该项目的重要模块已经开发完毕.  - 关于项目 该项目的背景是现在微信公众号.微信服务号乃至微 ...

  8. Javascript 闭包与高阶函数 ( 二 )

    在上一篇 Javascript 闭包与高阶函数 ( 一 )中介绍了两个闭包的作用. 两位大佬留言指点,下来我会再研究闭包的实现原理和Javascript 函数式编程 . 今天接到头条 HR 的邮件,真 ...

  9. java IoC

    IoC,控制反转,是spring的核心,通俗点讲就是我们不必再自己去用new创建对象了,通过l配置将类注入到IoC容器中,在启动时,IoC容器去帮我们创建对象,并管理其依赖关系,这种实现方式叫做DI, ...

  10. BZOJ USACO 银组 水题集锦

    最近刷银组刷得好欢快,好像都是水题,在这里吧他们都记录一下吧(都是水题大家一定是道道都虐的把= =)几道比较神奇的题到时再列出来单独讲一下吧= =(其实我会说是BZOJ蹦了无聊再来写的么 = =) [ ...