一、List接口

List是Collection的子接口,里面可以保存各个重复的内容,此接口的定义如下:
public interface List<E> extends Collection<E>

二、List接口的扩展方法

No.
方法
类型
描述
1
public void add(int index, E element)
普通
在指定位置增加元素
2
public boolean addAll(int index, Collection<? extends E> c)
普通
在指定位置增加一组元素
3
E get(int index)
普通
返回指定位置的元素
4
public int indexOf(Object o)
普通
查找指定元素的位置
5
public int lastIndexOf(Object o)
普通
从后向前查找指定元素的位置
6
public ListIterator<E> listIterator()
普通
为ListIterator接口实例化
7
public E remove(int index)
普通
按指定的位置删除元素
8
public List<E> subList(int fromIndex, int toIndex)
普通
取出集合中的子集合
9
public E set(int index, E element)
普通
替换指定位置的元素

三、List接口的常用子类 —— ArrayList和LinkedList

ArrayList实现了长度可变的数组,在内存中分配连接的空间,遍历和随机访问元素的效率比较高
LinkedList采用链表存储方式。在插入、删除元素时效率比较高
 

四、ArrayList例子

package com.pb.demo1;

public class Person {
private String name;
private int age; public Person() { } public Person(String name, int age) {
this.name = name;
this.age = age;
} public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
package com.pb.demo1;

import java.util.ArrayList;
import java.util.List; public class PersonArrayListTest { public static void main(String[] args) {
/*
* 创建多个Person对象并赋值
*/
Person p1 = new Person("张三",21);
Person p2 = new Person("李四",22);
Person p3 = new Person("王五",23);
//创建ArrayList
List<Person> personlist=new ArrayList<Person>(); //为集合添加对象
personlist.add(p1);
personlist.add(p2);
personlist.add(p3);
//输出集合的长度
System.out.println("集合长度:"+personlist.size());
//遍历集合for循环
for(int i=0; i<personlist.size();i++){
System.out.println("姓名:"+personlist.get(i).getName()+"年龄:"+personlist.get(i).getAge());
} //使用索引添加
Person p4 = new Person("赵六",24);
/*
* 使用索引添加时必须知道长度才可以正确增加,如果添加的索引大于最后一个下标+1,
* 编译可以通过但运行时会报错
* 例如:如查长度为3,下标是从0开始到2,这时使用索引添加值索引可以是(0~3)都可以,但是不能是4
*/ personlist.add(0, p4);
//输出集合的长度
System.out.println("集合长度:"+personlist.size());
////遍历集合forearch循环
for (Person p : personlist) {
System.out.println("姓名:"+p.getName()+"年龄:"+p.getAge());
} //查找集合中是否有p4对象true代表有,false代表没有
System.out.println("查找集合中是否有p4对象:"+personlist.contains(p4));
//p2元素所在的下标从前向后
System.out.println("p2元素所在的下标从前向后:"+ personlist.indexOf(p2));
//p2元素所在的下标从后向前
System.out.println("p2元素所在的下标从后向前:"+ personlist.lastIndexOf(p2)); } }

五、LinkedList例子

package com.pb.demo1;

import java.util.LinkedList;
import java.util.List; public class PersonLinkedListTest { public static void main(String[] args) {
/*
* 创建多个Person对象并赋值
*/
Person p1 = new Person("张三",21);
Person p2 = new Person("李四",22);
Person p3 = new Person("王五",23);
Person p4 = new Person("赵六",24);
Person p5 = new Person("钱七",25); //创建LinkedList
LinkedList<Person>plist=new LinkedList<Person>();
plist.add(p1);
plist.add(p2);
plist.add(p3);
//集合长度
System.out.println("集合长度"+plist.size());
//遍历集合
for (Person p : plist) {
System.out.println("姓名:"+p.getName()+"年龄:"+p.getAge());
}
//在第一个和最后一个添加对象
plist.addFirst(p4);
plist.addLast(p5);
System.out.println("===========添加数据=================");
//集合长度
System.out.println("集合长度"+plist.size());
//遍历集合
for (Person p : plist) {
System.out.println("姓名:"+p.getName()+"年龄:"+p.getAge());
} //获取指定下标的元素:下标要已经存在如果不存在运行后将报错
System.out.println("获取指定下标的元素:"+plist.get(4).getName());
System.out.println("===========按下标移除=================");
//移除元素remove,按下标移除
plist.remove(0);
//集合长度
System.out.println("集合长度"+plist.size());
//遍历集合
for (Person p : plist) {
System.out.println("姓名:"+p.getName()+"年龄:"+p.getAge());
}
System.out.println("===========直接移除对象=================");
//移除元素remove 直接移除对象,
plist.remove(p2);
//集合长度
System.out.println("集合长度"+plist.size());
//遍历集合
for (Person p : plist) {
System.out.println("姓名:"+p.getName()+"年龄:"+p.getAge());
}
System.out.println("===========移除第一个或者最后一个=================");
//移除元素移除第一个或者最后一个
plist.removeFirst();
plist.removeLast();
//集合长度
System.out.println("集合长度"+plist.size());
//遍历集合
for (Person p : plist) {
System.out.println("姓名:"+p.getName()+"年龄:"+p.getAge());
}
System.out.println("===========移除全部=================");
//移除全部元素clear方法
plist.clear();
//集合长度
System.out.println("集合长度"+plist.size());
//遍历集合
for (Person p : plist) {
System.out.println("姓名:"+p.getName()+"年龄:"+p.getAge());
} } }

六、Vector类

在List接口中还有一个子类:Vector,Vector类属于一个挽救的子类,从整个JAVA的集合发展历史来看,Vector算是一个元老级的类,在JDK 1.0的时候就已经存在类此类。但是到了JAVA 2(JDK 1.2)之后重点强调了集合框架的概念,所以先后定义了很多的新接口(如:List等),但是考虑到一大部分的人已经习惯了使用Vector类,所以JAVA的设计者,就让Vector类多实现了一个List接口,这才将其保留下来。但是因为其是List子类,所以Vector类的使用与之前的并没有太大的区别。
package com.pb.demo1;

import java.util.Vector;

public class VectorTest {

    public static void main(String[] args) {

        Vector<String> plist=new Vector<String>();

        plist.add("张三");
plist.add("李四");
plist.add("王五");
plist.add("赵六");
System.out.println("长度:"+plist.size());
for (String s : plist) {
System.out.println(s);
} } }

Java从零开始学二十一(集合List接口)的更多相关文章

  1. Java从零开始学二十三(集合Map接口)

    一.Map接口 Collection.Set.List接口都属于单值的操作,即:每次只能操作一个对象,而Map与它们不同的是,每次操作的是一对对象,即二元偶对象,Map中的每个元素都使用key à v ...

  2. Java从零开始学二十(集合简介)

    一.为什么需要集合框架 数组的长度是固定的,但是如果写程序时并不知道程序运行时会需要多少对象.或者需要更复杂的方式存储对象,---那么,可以使用JAVA集合框架,来解决这类问题 二.集合框架主要接口 ...

  3. Java从零开始学二十二(集合Set接口)

    一.Set接口的定义 Set接口也是Collection接口的子接口,但是与Collection或List接口不同的是,Set接口中不能加入重复的元素 Set接口的主要方法与Collection是一致 ...

  4. Java从零开始学二十四(集合工具类Collections)

    一.Collections简介 在集合的应用开发中,集合的若干接口和若干个子类是最最常使用的,但是在JDK中提供了一种集合操作的工具类 —— Collections,可以直接通过此类方便的操作集合 二 ...

  5. Java从零开始学四十一(反射简述二)

    一.实例化Class类对象 实例化Class类对象的方法有三种: 第一种:通过forName()方法 第二种:类.class 第三种:对象.getClass() 二.Class类的常用方法 No. 方 ...

  6. Java从零开始学十八(抽象类和接口)

    一.什么是抽象类和接口 抽象类.接口与类是一个层次的概念,是java中极其重要的概念. 抽象类是从多个类中抽象出来的公共模板,提供子类均具有的功能. 接口是从多个类中抽象出来的规范,体现的是规范和实现 ...

  7. Java从零开始学三十一(DATE和Calendar类)

    一.Date类 Date类是一个相对较为简单的操作类,在使用中直接使用java.util.Date类的构造方法并进行输出就可以得到一个完整的日期 二.Calendar类 Calendar类可以将取得的 ...

  8. Java从零开始学二十九(大数操作(BigIntger、BigDecimal)

    一.BigInteger 如果在操作的时候一个整型数据已经超过了整数的最大类型长度long的话,则此数据就无法装入,所以,此时要使用BigInteger类进行操作. 不可变的任意精度的整数.所有操作中 ...

  9. Java从零开始学二十八(Math类和Random类)

    一.Math概述 提供了常用的数学运算方法和两个静态常量E(自然对数的底数)和PI(圆周率) 二.常用方法 package com.pb.demo1; public class MathTest { ...

随机推荐

  1. .NET面试宝典-高级2

    http://blog.csdn.net/shanyongxu/article/category/6023593 对于 Web 性能优化,您有哪些了解和经验吗? 1.前端优化 (1)减少 HTTP 请 ...

  2. Jmeter实现webservice的接口测试

    前提条件 测试的URL:http://ws.webxml.com.cn/WebServices/WeatherWS.asmx 测试接口:getSupportCityString 获取城市的编码:htt ...

  3. SQLite3知识(1)--教程

    1.SQLite3教程 [1].SQLite 教程 2.选择数据库: [2]. SQLite Select 语句 3.更新数据库: [3]. SQLite Update 语句 4.插入数据库: [4] ...

  4. Mina 断线重连

    Mina 断线重连 定义:这里讨论的Mina 断线重连是指使用mina作为客户端软件,连接其他提供Socket通讯服务的服务器端.Socket服务器可以是Mina提供的服务器,也可以是C++提供的服务 ...

  5. ubuntu 13.04 编译 安装 升级 gcc 4.9.0 address sanitizer

    @ 前记: 最近查一个线上项目的crash,review代码无果,crash几率低,不可在本地环境重现.之后在线上好几个服务器跑valgrind就不crash了.个人猜测可能是跑valgrind后性能 ...

  6. Java中常见的IO流及其使用

    Java中IO流分成两大类,一种是输入流.全部的输入流都直接或间接继承自InputStream抽象类,输入流作为数据的来源.我们能够通过输入流的read方法读取字节数据.还有一种是输出流,全部的输出流 ...

  7. 数据库中间件OneProxy and onemysql

    http://blog.itpub.net/28944233/cid-176181-list-1/ http://www.onexsoft.com/ 官网 http://pan.baidu.com/s ...

  8. Tracing mysqld Using DTrace

    http://dev.mysql.com/doc/refman/5.6/en/dba-dtrace-server.html MySQL 5.6 Reference Manual -> 5 MyS ...

  9. spring mvc Controller中使用@Value无法获取属性值

    在使用spring mvc时,实际上是两个spring容器: 1,dispatcher-servlet.xml 是一个,我们的controller就在这里,所以这个里面也需要注入属性文件 org.sp ...

  10. 《Head First 设计模式》学习笔记——策略模型

    我们全都使用别人设计好的库与框架.我们讨论库与框架.利用他们的API编译成我们的程序.享受运用别人的代码所带来的长处.看看java api它所带来的功能:网络.GUI.IO等.库与框架长久以来,一直扮 ...