List 常用子类:

- Vector: 内部是数组数据结构,是同步的. 增删, 查询都很慢
- ArrayList: 内部是数组数据结构,是不同步的,替代了 Vector,不同步的效率较高. 特点: 查询速度快
- LinkedList: 内部是链接列表实现,链表数据结构,是不同步的,有角标. 特点: 增删元素的速度很快

Vector (了解)

  • 取出元素的特有方法: Enumeration elements();
Vector v = new Vector();

v.addElement("abc1");
v.addElement("abc2");
v.addElement("abc3"); Enumeration en = v.elements();
while(en.hasMoreElements()){
System.out.println(en.nextElement());
}

备注: Enumeration 接口和 Iterator 接口的功能是重复的, 新的实现优先考虑 Iterator 接口.

LinkedList

  • 操作列表的开头和结尾
addFirst(); : 将指定元素添加到列表的开头
addLast(); : 将指定元素添加到列表的结尾 getFirst(); : 获取列表的第一个元素, 但不移除. 如果链表为空,抛出 NoSuchElementException 异常
getLast(); : 获取列表的最后一个元素, 但不移除. 如果链表为空,抛出 NoSuchElementException 异常 removeFirst(); : 获取列表的第一个元素, 但移除. 如果链表为空,抛出 NoSuchElementException 异常
removeLast(); : 获取列表的最后一个元素, 但移除. 如果链表为空,抛出 NoSuchElementException 异常 // JDK 1.6 以后升级 offerFirst(); : 将指定元素添加到列表的开头
offerLast(); : 将指定元素添加到列表的结尾 peekFirst(); : 获取列表的第一个元素, 但不移除. 如果链表为空,返回 null
peekLast(); : 获取列表的最后一个元素, 但不移除. 如果链表为空,返回 null pollFirst(); : 获取列表的第一个元素, 但移除. 如果链表为空,返回 null
pollLast(); : 获取列表的最后一个元素, 但移除. 如果链表为空,返回 null
  • 练习: 请使用 LinkedList 来模拟一个堆栈或者队列数据结构
// 分析:
// 堆栈: 先进后出, First in Last Out, 简写为 FILO
// 队列: 先进先出, First in First Out, 简写为: FIFO. (例如排队) // 我们应该描述这样一个容器, 给使用者提供一个容器对象完成这两种结构中的一种. class DuiLie {
private LinkedList link; // 构造函数
public DuiLie(){
link = new LinkedList();
} // 队列添加元素的功能
public void myAdd(Object obj){
link.addLast(obj);
} public void myGet(){
return link.removeFrist();
} public boolean isNull(){
return link.isEmpty();
} }

ArrayList

  • 存储自定义对象
// 自定义 Person 对象
public class Person {
private String name;
private int age; public Person(){
super();
} public Person(String name, int age){
super();
this.name = name;
this.age = age;
} public String getName(){
return name;
} public void setName(String name){
this.name = name;
} public void getAge(){
return age;
} public void setAge(int age){
this.age = age;
}
} // ArrayList 集合中存储自定义对象 Person
public class ArrayListTest {
public static void main(String[] args){ ArrayList al = new ArrayList(); al.add(new Person("lisi1",21));
al.add(new Person("lisi2",22));
al.add(new Person("lisi3",23));
al.add(new Person("lisi4",24)); Iterator it = al.iterator();
while(it.hasNext()){
System.out.println(it.next());
}
}
} // 输出结果为:
// cn.itcast.p.bean.Person@7852e922
// cn.itcast.p.bean.Person@4e25154f
// cn.itcast.p.bean.Person@70dea4e
// cn.itcast.p.bean.Person@5c647e05 // 原因分析: add(Object obj); Person 对象存入 ArrayList 集合中,向上转型(多态)
// 直接 it.next().getName(); 错误, 因为 Object 对象没有 getName() 方法 // 升级:
Iterator it = al.iterator();
while(it.hasNext()){
Person p = (Person)it.next(); // 向下转型
System.out.println(p.getName()+" : " + p.getAge());
}

ArrayList 集合中存储的是 Person 对象的引用

其他: ArrayList 集合不能存储基本数据类型

al.add(5); // 代表着: al.add(new Integer(5)); 自动装箱
// add() 方法的元素为 Object, Object obj = new Integer(5); 多态

_参考资料_
- [JavaSE 基础视频(毕向东)](https://www.bilibili.com/video/av3113337/index_1.html#page=15)
- [JDK 1.6 中文文档](http://tool.oschina.net/apidocs/apidoc?api=jdk-zh)

List 接口常用子类及其特点的更多相关文章

  1. Set 接口常用子类及其特点

    Set 集合中元素不可重复,是无序的(存入和取出的顺序是不一样的), Set 接口中的方法和 Collection 接口一致. 常用子类: HashSet : 内部数据结构是哈希表, 是不同步的 Li ...

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

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

  3. Map集合,Map常用子类

    Map 集合 1,Collection中的集合,元素是孤立的,向季和忠储存的元素采用一个元素方式储存 2,Map中的集合,元素是成对存在的,每个元素中的集合称为双列集合 3,Collection中的集 ...

  4. Map集合概述和Map常用子类

    概述java.util.Map接口 Map<K,V> 有两个泛型 类型参数:K - 此映射所维护的键的类型V - 映射值的类型 特点:1.Map集合是双列集合,一个元素包含两个值,一个是k ...

  5. Map集合和Map常用子类

    Map集合 java.util.Map<K,V>集合 Map集合的特点: 1.Map集合是一个双列集合,一个元素包含两个值(Key,Value) 2.Map集合中的元素,key和value ...

  6. Spring Boot入门(四):开发Web Api接口常用注解总结

    本系列博客记录自己学习Spring Boot的历程,如帮助到你,不胜荣幸,如有错误,欢迎指正! 在程序员的日常工作中,Web开发应该是占比很重的一部分,至少我工作以来,开发的系统基本都是Web端访问的 ...

  7. Java开发知识之Java中的集合Set接口以及子类应用

    ---恢复内容开始--- Java开发知识之Java中的集合Set接口以及子类应用 一丶Set接口以及作用 在上一讲.我们熟悉了接口的实现图.以及自己各有的子类. List接口主要存储的数据是可以重复 ...

  8. 详解~实现Runnable方法创建线程之为什么要将Runnable接口的子类对象传递给Thread的构造函数

    /** * @author zhao * @TIME 0419 22:56 End *定义线程的第二种方法:实现Runnable接口(不考虑安全问题) *步骤:1,定义一个子类实现Runnable接口 ...

  9. python3 面向对象、类、继承、组合、派生、接口、子类重用父类方法

    对象是特征(变量)与技能(函数)的结合体而类是一系列对象共同的特征与技能的集合体 class teacher: lesson = "python" def __init__(sel ...

随机推荐

  1. [elk]logstash的最佳实战-项目实战

    重点参考: http://blog.csdn.net/qq1032355091/article/details/52953837 不得不说这是一个伟大的项目实战,是正式踏入logstash门槛的捷径 ...

  2. (2.1)Smali系列学习之基础语法

    一.什么是Smali?Smali,Baksmali分别是指安卓系统里的Java虚拟机(Dalvik)所使用的一种dex格式文件的汇编器,反汇编器.其语法是一种宽松式的Jasmin/dedexer语法, ...

  3. SQL练习题汇总(Sqlserver和Mysql版本)

    所需表及数据执行脚本: CREATE TABLE STUDENT (SNO ) NOT NULL, SNAME ) NOT NULL, SSEX ) NOT NULL, SBIRTHDAY DATET ...

  4. Bootstrap学习笔记(1)栅格系统

    栅格系统: .row 1行12列 .col-md-3 占3列,一行就是4个 <!DOCTYPE html> <html lang="en"> <hea ...

  5. IDEA2017 导入 SVN上的 Myeclipse或Eclipse 项目

    从SVN上检出项目,不用打开. 关闭IDEA后选择 import project,导入后按F4 (改成eclipse按键模式后 按ctrl alt shift F4)进入 project struct ...

  6. php 合并数组的方法 非array_merge

    Array ( [0] => Array ( [max] => 50 [date] => 2016-01-07 ) [1] => Array ( [max] => 100 ...

  7. Java集合框架:Collections工具类

    java.util.Collections工具类提供非常多实用的方法.使得程序员操作集合类的时候更加的方便easy,这些方法都是静态的. 整个Collections工具类源代码几乎相同有4000行.我 ...

  8. 高并发分布式系统如何做到唯一Id

    又一个多月没冒泡了,其实最近学了些东西,但是没有安排时间整理成博文,后续再奉上.最近还写了一个发邮件的组件以及性能测试请看 <NET开发邮件发送功能的全面教程(含邮件组件源码)> ,还弄了 ...

  9. hdu 4284(状压dp)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4284 思路:类似于poj3311:http://poj.org/problem?id=3311,首先f ...

  10. 好久没写blog了 ~ 换了个城市,换了个公司,各种忙碌

    最近一直在忙工作交接以及换城市.入职的事情 ~~~ 新公司做C++的比较少,so全上C++11了,写代码各种爽. 最近应该会写一点关于QT的blog , 学到新知识了哈.