List

ArrayList

List接口

List接口的父接口-Collection

List接口的重要子类- ArrayList

-LikedList

List接口不重要子类-Vector

java.lang.IndexOutOfBoundsException 越界异常

1)ArrayList arrayList=new ArrayList();

//获取集合中的元素

Object element=arrayList.get(Index);

使用for循环获取集合中的所有元素

int size=arrayList.size();

for(int i=0;i<size;i++){

Object ele =arrayList.get(i);

System.out.println(ele);

}

2)ArrayList 内部数据结构:数组

内存地址 e0 e1 e2 e3 e4

10

类当中封装了一个数组,内存中位置是连续的,数组每个元素占的空间都是一样的

内部结构数组的特点决定了ArrayList的特点

*可以直接获取指定索引位置的元素arrayList.get(index)

*可以直接在指定位置添加元素 arrayList.add(1,"蛋蛋3");

*可以直接在指定索引位置删除元素 arrayList.remove(index);

获取元素效率:非常高

添加元素效率:非常低

删除元素效率:非常低

3)LinkedList

内部结构:链表

链首

LinkedList各种操作的效率分析

获取集合中元素,是从链首依次获取才能获取到

可以添加指定索引位置添加元素

可以删除指定索引位置的元素

添加效率:不需要移动元素

删除效率:不需要移动元素

查询效率:获取指定位置的元素:从链首依次计数到指定位置的元素,相对ArrayList慢一些

//Collection接口中没有的方法

linkedList.add();

linkedList.add(index,Object);

linkedList.get(Index);

linkedList.addFirst(Objcet);

linkedList.addLast(Objcet);

最大索引位置:linkedList.size()-1

4)LinkedList 添加元素的过程

LinkedList list =new LinkedList();

Person p=new Person("蛋蛋",20);

list.add(p);

Person p2=new Person("蛋蛋2",30);

list.add(p2);

5)List综述

LIst列表的特性

元素有序:元素的添加顺序和遍历顺序相同

元素可重复:同一个元素可以多次添加到(List)集合里面

这两个特性实际上是子类ArrayList和LinkedList所具有的

可以是否多次添加null呢?可以

List中只能添加对象,不能添加基本数据类型

如果添加了基本数据类型,是装箱了

List接口特有的方法

ArrayList和LinkedList的共有方法决定List接口可以有的方法

void add (int index,Object o)

void addAll()

Objcet get()

Object  set() //修改特定索引位置的元素

int indexOf()查询指定位置是否有改元素

int lastIndexOf()//查询元素最后一次出现的位置

6)ListIterator---list专有的迭代器

boolean hasNext()

Objcet next()

int nextIndex() //下一个元素的索引

boolean hasPrevious() //判断是否有前一个元素

Object previous() //取出前一个元素,并把指针移动到前一个元素

int previousIndex()

void add(Object o) //添加一个元素

void remove()

void set(Object o)//修改指针指向的当前元素

7)Vector

内部数据结构:数组

Vector是线程安全的,在早起的jdk版本中已经有了,自己担负了ArrayList和LinkedList两个类的作用,但各个操作的性能很低

Vector内部的数组满时,新数组长度增长100%

8)list练习

1.去除集合中的元素

新建一个集合list2.遍历list中的元素,如果list2有,就不添加,如果没有就添加进去

2.一个集合中存储有各种类型的数据,现要求把所有字符串类型的元素,串联成一个字符串,对所有数值类型的元素求和,对所有Person类型的元素年龄求和已经统计人数,如果是其他类型的元素,就输出到控制台

1.判断element为字符串类型的 element instanceof String ,使用StringBuild,把字符串串联在一次StringBuild stringBuild=new StringBuild();stringBuild.append(element);

2.判断element为数值类型 element instanceof Number ,然后把数值类型的转换为字符串类型的,再把字符串类型的转换为Double类型的

String numberStr=String.valueof(element);

Double doublevalueof=Double.parseDouble(numberStr);

totalNumer=+doublevalueof;

3.判断element为Person类型,统计人数

Person person=(Person)element;

int age=Person.getAge();

totalAge+=age;

personcount++;

9)堆栈(stack)

特点:先进后出

10)队列(queue)

特点:先进先出

java 深入技术三(List)的更多相关文章

  1. Java进阶(三)多线程开发关键技术

    原创文章,同步发自作者个人博客,转载请务必以超链接形式在文章开头处注明出处http://www.jasongj.com/java/multi_thread/. sleep和wait到底什么区别 其实这 ...

  2. Java基础扫盲系列(三)— Java内省技术

    前言 Java内省技术属于Java基础体系的的一部分,但是很多人都不甚了解.笔者也是在学习Spring源码的过程中遇到该技术模块的.为了完善技术体系,本文将全面的学习该技术.在提到Java内省技术,就 ...

  3. java 深入技术八(内省)

    1. javabean的软件设计思想 2.内省:封装了java反射,提供直接操作属性的Setter和getter方法的方法 3.核心API:BeanInfo java 的描述信息,Introspect ...

  4. 深入分析Java Web技术内幕(修订版)

    阿里巴巴集团技术丛书 深入分析Java Web技术内幕(修订版)(阿里巴巴集团技术丛书.技术大牛范禹.玉伯.毕玄联合力荐!大型互联网公司开发应用实践!) 许令波 著   ISBN 978-7-121- ...

  5. Java加密技术(一)——BASE64与单向加密算法MD5&SHA&MAC

    Java加密技术(一)——BASE64与单向加密算法MD5&SHA&MAC 博客分类: Java/Security Javabase64macmd5sha     加密解密,曾经是我一 ...

  6. Java Web技术总结(目录)

    来源于:http://www.jianshu.com/p/539bdb7d6cfa Java Web技术经验总结(一) Java Web技术经验总结(二) Java Web技术经验总结(三) Java ...

  7. Java单元测试技术1

    另外两篇关于介绍easemock的文章:EasyMock 使用方法与原理剖析,使用 EasyMock 更轻松地进行测试 摘要:本文针对当前业软开发现状,先分析了WEB开发的技术特点和单元测试要解决的问 ...

  8. Java加密技术

    相关链接: Java加密技术(一)——BASE64与单向加密算法MD5&SHA&MAC Java加密技术(二)——对称加密DES&AES Java加密技术(三)——PBE算法  ...

  9. Java Servlet 技术简介

    Java Servlet 技术简介 Java 开发人员兼培训师 Roy Miller 将我们现有的 servlet 介绍资料修改成了这篇易于学习的实用教程.Roy 将介绍并解释 servlet 是什么 ...

随机推荐

  1. Loogn.OrmLite映射优化记录

    大家对ORM效率的争议多半在映射性能方面.自己的ORMLite也是如此,经过前段时间的折腾,已经找不出一个简单的方法再提升一下这部分的方法了.在此把优化涉及的几点记录一下. 注:用于性能测试的Code ...

  2. 梦想成真,喜获微软MVP奖项,微软MVP FAQ?

    之前一直很钦佩那些MVP获奖者,想着自己有一天也能拿到该多好,就在10月1日邮箱收到了微软的邮件,当选了2016年10月份的MVP.今天主要分享一下获奖的喜悦也分享一下如何获得MVP奖项. 什么是微软 ...

  3. 备忘:spring jdbc事务代码 mybatis, nhibernate

    http://files.cnblogs.com/files/mikelij/mymavenMar1.rar

  4. AOPR软件最小化消失了

    结合日常使用软件的经历,我们都是选择最小化按钮后,点击状态栏中最小化图标即可恢复软件窗口.在使用Advanced Office Password Recovery的过程中,有时会出现点击最小化按钮后在 ...

  5. js ie中实现拖拽

    获取鼠标移动信息 开始我们需要获取鼠标的坐标.我们添加一个document.onmousemove 就可以达到此目的: Javascript:   document.onmousemove = mou ...

  6. noip2016十连测round1

    A:String Master 题目:所谓最长公共子串,比如串 A:"abcde",串 B:"jcdkl",则它们的最长公共子串为串 "cd" ...

  7. <<< Oracle表空间创建、修改、删除基本操作

    ORACLE 中,表空间是数据管理的基本方法,所有用户的对象要存放在表空间中,也就是用户有空间的使用权,才能创建用户对象 create tablespace myts  //建立表空间,名为mytsd ...

  8. less学习笔记

    less is more , than css less使用到的编译工具: koala less使用的软件: sublime text(推荐使用) 在less 中注释使用的是//     ( /**/ ...

  9. Liunx下查看服务器硬件信息

    一.如何查看服务器的CPU 今天安装了9台Linux服务器,型号完全不一样(有DELL. HP和IBM服务器),又懒得去对清单,如何在Linux下cpu的个数和核数呢?另外,nginx的cpu工作模式 ...

  10. storyboard传值方式

    通过segue传值 在storyboard设置segue的Identifier   segue是连接两个视图控制器交互的线 sender是触发这个方法执行的对象,比如是单击tableView上的cel ...