List 接口常用子类及其特点
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 接口常用子类及其特点的更多相关文章
- Set 接口常用子类及其特点
Set 集合中元素不可重复,是无序的(存入和取出的顺序是不一样的), Set 接口中的方法和 Collection 接口一致. 常用子类: HashSet : 内部数据结构是哈希表, 是不同步的 Li ...
- 集合中Set接口与Collection接口,常用子类TreeSet,HashSet.
Set接口与List接口的不同之处在于: 不允许有重复的数据. 定义如下: public interface Set<E>extends Collection<E> 主要方法与 ...
- Map集合,Map常用子类
Map 集合 1,Collection中的集合,元素是孤立的,向季和忠储存的元素采用一个元素方式储存 2,Map中的集合,元素是成对存在的,每个元素中的集合称为双列集合 3,Collection中的集 ...
- Map集合概述和Map常用子类
概述java.util.Map接口 Map<K,V> 有两个泛型 类型参数:K - 此映射所维护的键的类型V - 映射值的类型 特点:1.Map集合是双列集合,一个元素包含两个值,一个是k ...
- Map集合和Map常用子类
Map集合 java.util.Map<K,V>集合 Map集合的特点: 1.Map集合是一个双列集合,一个元素包含两个值(Key,Value) 2.Map集合中的元素,key和value ...
- Spring Boot入门(四):开发Web Api接口常用注解总结
本系列博客记录自己学习Spring Boot的历程,如帮助到你,不胜荣幸,如有错误,欢迎指正! 在程序员的日常工作中,Web开发应该是占比很重的一部分,至少我工作以来,开发的系统基本都是Web端访问的 ...
- Java开发知识之Java中的集合Set接口以及子类应用
---恢复内容开始--- Java开发知识之Java中的集合Set接口以及子类应用 一丶Set接口以及作用 在上一讲.我们熟悉了接口的实现图.以及自己各有的子类. List接口主要存储的数据是可以重复 ...
- 详解~实现Runnable方法创建线程之为什么要将Runnable接口的子类对象传递给Thread的构造函数
/** * @author zhao * @TIME 0419 22:56 End *定义线程的第二种方法:实现Runnable接口(不考虑安全问题) *步骤:1,定义一个子类实现Runnable接口 ...
- python3 面向对象、类、继承、组合、派生、接口、子类重用父类方法
对象是特征(变量)与技能(函数)的结合体而类是一系列对象共同的特征与技能的集合体 class teacher: lesson = "python" def __init__(sel ...
随机推荐
- Limu:JavaScript的那些书
博主说:本博客文章来源包括转载,翻译,原创,且在文章内均有标明.鼓励原创,支持创作共享,请勿用于商业用途,转载请注明文章链接.本文链接:http://www.kein.pw/?p=50 去年(2012 ...
- Unity3D刚体不同力的测试(ForceMode,AddForce,RelativeAddForce)
摘自圣典的一段翻译: ForceAdd a continuous force to the rigidbody, using its mass.添加一个可持续力到刚体,使用它的质量.Accelerat ...
- 【项目总结】:怎样做一个牛逼的Team leader?
随着ITOO高校云平台3.1项目的结束,我们各种各样的总结也被提上了日程. Java版本号的全部开发者和Donet版本号的全部开发者坐在一起进行了关于项目开发管理的头脑风暴,尽管我仅仅是Donet开发 ...
- Enable multithreading to use std::thread: Operation not permitted问题解决
在用g++ 4.8.2编译C++11的线程代码后,运行时遇到了如下报错: terminate called after throwing an instance of 'std::system_err ...
- redis源码学习_整数集合
redis里面的整数集合保存的都是整数,有int_16.int_32和int_64这3种类型,和C++中的set容器差不多. 同时具备如下特点: 1.set里面的数不重复,均为唯一. 2.set里面的 ...
- hdu1025 最大上升字串
Constructing Roads In JGShining's Kingdom Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65 ...
- PHP学习笔记(4)GD库画五角星
<?php //加header头,不然浏览器乱码 header("content-type: image/png"); //创建画布资源 $img = imagec ...
- linux常用命令系列
自己开始接触linux系统已经两年了,刚到现场进行系统维护的时候,只知道ls和cd命令,所以我被迫开始学习linux,虽然现在每天都在linux系统上进行一些操作,但是感觉自己半路出家一样:可能知道某 ...
- Java Web应用服务器Resin 国内下载
在做 PHP On Jvm的测试,发现Resin很难下,速度太慢. 下载地址:http://pan.baidu.com/s/1qWyffnY
- IPC之信号量
无名信号量 POSIX标准提出了有名信号量和无名信号量来同步进程和线程,而linux(2.6以前)只实现了无名信号量. sem_overview中有详细介绍:man 7 sem_overview. S ...