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. Hibernate一级缓存和二级缓存具体解释

    一.一级缓存二级缓存的概念解释 (1)一级缓存就是Session级别的缓存,一个Session做了一个查询操作,它会把这个操作的结果放在一级缓存中.假设短时间内这个 session(一定要同一个ses ...

  2. Apache 虚拟目录和默认首页的设置

    Apache虚拟目录和默认首页的设置,用apache服务器的朋友必须要懂的. 虚拟目录 1.找到"conf/httpd.conf" 文件 2.在节点:<IfModule al ...

  3. CSRF学习笔记之CSRF的攻击与防御以及审计【00x2 】

    Medium完整代码: <?php if (isset($_GET['Change'])) { // Checks the http referer header if ( eregi ( &q ...

  4. win 7和虚拟机之间ping

    虚拟机的网卡和真实机的IP设为同一网段.用ping检查是否通,通了后用工具连接ssh看能否登录!如果成功的话winscp应该就能用了.如果不同就要就检查防火墙看是否开放了22端口,没有的话就要开放一下 ...

  5. C扩展php的方法(制作php扩展库)

    用PHP调用C扩展整个配置过程在CentOS下   今天终于把C扩展加入到PHP中了,并且可以调用,废话就不说了,看下文.   一.必须先要安装Apache和mysql,这两个的安装过程我就不说了. ...

  6. Acme Corporation UVA - 11613 拆点法+最大费用最大流(费用取相反数)+费用有正负

    /** 题目:Acme Corporation UVA - 11613 拆点法+最大费用最大流(费用取相反数)+费用有正负 链接:https://vjudge.net/problem/UVA-1161 ...

  7. Using Fast Weights to Attend to the Recent Past

    Ba, Jimmy, et al. "Using Fast Weights to Attend to the Recent Past." Advances In Neural In ...

  8. 重载(Overload)

    重载(Overload) 重载(overloading) 是在一个类里面,方法名字相同,而参数不同.返回类型可以相同也可以不同. 每个重载的方法(或者构造函数)都必须有一个独一无二的参数类型列表. 最 ...

  9. 你是怎么理解java的泛型的?

    解答: 在Java SE 1.5之前,没有泛型的情况的下,通过对类型Object的引用来实现参数的“任意化”,“任意化”带来的缺点是要做显式的强制类型转换,而这种转换是要求开发者对实际参数类型可以预知 ...

  10. Hibernate中:不看数据库,不看XML文件,不看查询语句,怎么样能知道表结构?

    Hibernate中:不看数据库,不看XML文件,不看查询语句,怎么样能知道表结构? 解答:可以看与XML文件对应的域模型.