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. iPhone6 和 iPhone 6 plus的适配

    苹果每出一款产品,都会引起广大IOS程序猿们的深深关注!是不是又该做适配了?是不是又该学习新东西了?种种的操心挂在心头. 以下我谈谈我对iPhone6 和 iPhone 6 plus适配问题的理解: ...

  2. unity调用系统剪切板功能

    package com.game.utils; import android.app.Activity; import android.content.ClipData; import android ...

  3. 通过camera + gallery android上传文件到html

    今天做项目的时候遇到一个问题:当html通过js调用input of type file时候,希望android手机的选择器可以同时出现“相机”和“图片”等,但通过下面代码 Intent i = ne ...

  4. 新型I/O架构引领存储之变(二)

    新型I/O架构引领存储之变(二) 作者:廖恒 众所周知,支持存储及网络I/O服务的接口协议有很多种.比方,以太网及Infiniband接口都支持採用iSCSI协议来实现存储业务,它们也因而成为了ser ...

  5. Secure Spring REST API using Basic Authentication

    What is Basic Authentication? Traditional authentication approaches like login pages or session iden ...

  6. 85. Insert Node in a Binary Search Tree【easy】

    Given a binary search tree and a new tree node, insert the node into the tree. You should keep the t ...

  7. 微信中调起qq

    http://wpa.qq.com/msgrd?uin={$qq}&menu=yes

  8. 1. DataBinding - offical tutorial

    1. DataBinding - offical tutorial android DataBinding tutorial 构建环境 数据与布局文件的绑定 data binding 表达式 数据对象 ...

  9. JQuery 中的Show方法

    对css中 display:none的对象有用,对visibility:hidden的对象无效.

  10. STM32F10x_模拟I2C读写EEPROM

    Ⅰ.写在前面 说到IIC,大家都应该不会陌生,我们初学单片机的时候或多或少都知道或了解过,甚至使用I2C控制过器件.但是,有多少人真正去深入理解,或者深入研究过I2C通信协议呢? 1.我们有必要学习I ...