一、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例子

  1. package com.pb.demo1;
  2.  
  3. public class Person {
  4. private String name;
  5. private int age;
  6.  
  7. public Person() {
  8.  
  9. }
  10.  
  11. public Person(String name, int age) {
  12. this.name = name;
  13. this.age = age;
  14. }
  15.  
  16. public String getName() {
  17. return name;
  18. }
  19. public void setName(String name) {
  20. this.name = name;
  21. }
  22. public int getAge() {
  23. return age;
  24. }
  25. public void setAge(int age) {
  26. this.age = age;
  27. }
  28. }
  1. package com.pb.demo1;
  2.  
  3. import java.util.ArrayList;
  4. import java.util.List;
  5.  
  6. public class PersonArrayListTest {
  7.  
  8. public static void main(String[] args) {
  9. /*
  10. * 创建多个Person对象并赋值
  11. */
  12. Person p1 = new Person("张三",21);
  13. Person p2 = new Person("李四",22);
  14. Person p3 = new Person("王五",23);
  15. //创建ArrayList
  16. List<Person> personlist=new ArrayList<Person>();
  17.  
  18. //为集合添加对象
  19. personlist.add(p1);
  20. personlist.add(p2);
  21. personlist.add(p3);
  22. //输出集合的长度
  23. System.out.println("集合长度:"+personlist.size());
  24. //遍历集合for循环
  25. for(int i=0; i<personlist.size();i++){
  26. System.out.println("姓名:"+personlist.get(i).getName()+"年龄:"+personlist.get(i).getAge());
  27. }
  28.  
  29. //使用索引添加
  30. Person p4 = new Person("赵六",24);
  31. /*
  32. * 使用索引添加时必须知道长度才可以正确增加,如果添加的索引大于最后一个下标+1,
  33. * 编译可以通过但运行时会报错
  34. * 例如:如查长度为3,下标是从0开始到2,这时使用索引添加值索引可以是(0~3)都可以,但是不能是4
  35. */
  36.  
  37. personlist.add(0, p4);
  38. //输出集合的长度
  39. System.out.println("集合长度:"+personlist.size());
  40. ////遍历集合forearch循环
  41. for (Person p : personlist) {
  42. System.out.println("姓名:"+p.getName()+"年龄:"+p.getAge());
  43. }
  44.  
  45. //查找集合中是否有p4对象true代表有,false代表没有
  46. System.out.println("查找集合中是否有p4对象:"+personlist.contains(p4));
  47. //p2元素所在的下标从前向后
  48. System.out.println("p2元素所在的下标从前向后:"+ personlist.indexOf(p2));
  49. //p2元素所在的下标从后向前
  50. System.out.println("p2元素所在的下标从后向前:"+ personlist.lastIndexOf(p2));
  51.  
  52. }
  53.  
  54. }

五、LinkedList例子

  1. package com.pb.demo1;
  2.  
  3. import java.util.LinkedList;
  4. import java.util.List;
  5.  
  6. public class PersonLinkedListTest {
  7.  
  8. public static void main(String[] args) {
  9. /*
  10. * 创建多个Person对象并赋值
  11. */
  12. Person p1 = new Person("张三",21);
  13. Person p2 = new Person("李四",22);
  14. Person p3 = new Person("王五",23);
  15. Person p4 = new Person("赵六",24);
  16. Person p5 = new Person("钱七",25);
  17.  
  18. //创建LinkedList
  19. LinkedList<Person>plist=new LinkedList<Person>();
  20. plist.add(p1);
  21. plist.add(p2);
  22. plist.add(p3);
  23. //集合长度
  24. System.out.println("集合长度"+plist.size());
  25. //遍历集合
  26. for (Person p : plist) {
  27. System.out.println("姓名:"+p.getName()+"年龄:"+p.getAge());
  28. }
  29. //在第一个和最后一个添加对象
  30. plist.addFirst(p4);
  31. plist.addLast(p5);
  32. System.out.println("===========添加数据=================");
  33. //集合长度
  34. System.out.println("集合长度"+plist.size());
  35. //遍历集合
  36. for (Person p : plist) {
  37. System.out.println("姓名:"+p.getName()+"年龄:"+p.getAge());
  38. }
  39.  
  40. //获取指定下标的元素:下标要已经存在如果不存在运行后将报错
  41. System.out.println("获取指定下标的元素:"+plist.get(4).getName());
  42. System.out.println("===========按下标移除=================");
  43. //移除元素remove,按下标移除
  44. plist.remove(0);
  45. //集合长度
  46. System.out.println("集合长度"+plist.size());
  47. //遍历集合
  48. for (Person p : plist) {
  49. System.out.println("姓名:"+p.getName()+"年龄:"+p.getAge());
  50. }
  51. System.out.println("===========直接移除对象=================");
  52. //移除元素remove 直接移除对象,
  53. plist.remove(p2);
  54. //集合长度
  55. System.out.println("集合长度"+plist.size());
  56. //遍历集合
  57. for (Person p : plist) {
  58. System.out.println("姓名:"+p.getName()+"年龄:"+p.getAge());
  59. }
  60. System.out.println("===========移除第一个或者最后一个=================");
  61. //移除元素移除第一个或者最后一个
  62. plist.removeFirst();
  63. plist.removeLast();
  64. //集合长度
  65. System.out.println("集合长度"+plist.size());
  66. //遍历集合
  67. for (Person p : plist) {
  68. System.out.println("姓名:"+p.getName()+"年龄:"+p.getAge());
  69. }
  70. System.out.println("===========移除全部=================");
  71. //移除全部元素clear方法
  72. plist.clear();
  73. //集合长度
  74. System.out.println("集合长度"+plist.size());
  75. //遍历集合
  76. for (Person p : plist) {
  77. System.out.println("姓名:"+p.getName()+"年龄:"+p.getAge());
  78. }
  79.  
  80. }
  81.  
  82. }

六、Vector类

在List接口中还有一个子类:Vector,Vector类属于一个挽救的子类,从整个JAVA的集合发展历史来看,Vector算是一个元老级的类,在JDK 1.0的时候就已经存在类此类。但是到了JAVA 2(JDK 1.2)之后重点强调了集合框架的概念,所以先后定义了很多的新接口(如:List等),但是考虑到一大部分的人已经习惯了使用Vector类,所以JAVA的设计者,就让Vector类多实现了一个List接口,这才将其保留下来。但是因为其是List子类,所以Vector类的使用与之前的并没有太大的区别。
  1. package com.pb.demo1;
  2.  
  3. import java.util.Vector;
  4.  
  5. public class VectorTest {
  6.  
  7. public static void main(String[] args) {
  8.  
  9. Vector<String> plist=new Vector<String>();
  10.  
  11. plist.add("张三");
  12. plist.add("李四");
  13. plist.add("王五");
  14. plist.add("赵六");
  15. System.out.println("长度:"+plist.size());
  16. for (String s : plist) {
  17. System.out.println(s);
  18. }
  19.  
  20. }
  21.  
  22. }

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. 技能树升级——Chrome Headless模式 - 全栈客栈 - SegmentFault

    技能树升级--Chrome Headless模式 - 全栈客栈 - SegmentFault TNPM

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

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

  3. android点滴之ContentObserver的使用

    一概念 ContentObserver用于观察(捕捉)特定Uri引起的数据的变化,继而做一些对应的处理,当ContentObserver所观察的Uri发生变化时,便会触发它. 从概念看ContentO ...

  4. 信用卡:银联,VISA,MasterCard

    国际信用卡是一种银行联合国际信用卡组织签发给那些资信良好的人士并可以在全球范围内进行透支消费的卡片,同时该卡也被用于在国际网络上确认用户的身份. 国际发卡组织是一个由全世界银行参与的非营利的国际性组织 ...

  5. window server 2012 更改密钥 更改系统序列号

    由于在window server 2012当中,好像更改密钥的方法,给隐藏了,没办法激活,这里记录一下在网上查找到的一个命令行,如何在window server 2012 更改密钥 更改系统序列号 在 ...

  6. 《Android学习指南》文件夹

    转自:http://android.yaohuiji.com/about Android学习指南的内容分类: 分类 描写叙述 0.学习Android必备的Java基础知识 没有Java基础的朋友,请不 ...

  7. Jquery ajax传递复杂参数给WebService

    参考: http://www.cnblogs.com/kingge/archive/2011/08/04/2127642.html http://www.cnblogs.com/micromouse/ ...

  8. 【spring cloud】spring cloud Sleuth 和Zipkin 进行分布式链路跟踪

    spring cloud 分布式微服务架构下,所有请求都去找网关,对外返回也是统一的结果,或者成功,或者失败. 但是如果失败,那分布式系统之间的服务调用可能非常复杂,那么要定位到发生错误的具体位置,就 ...

  9. 21.重入锁ReentrantLock

    ReentrantLock     重入锁,在需要进行代码同步部分上加锁,但是一定要记得解锁.     类型:公平锁(队列方式进行排队).非公平锁(按照cpu的分配),非公平锁性能要比公平锁性能高,默 ...

  10. 【BZOJ】【3437】小P的牧场

    DP/斜率优化 斜率优化基本题……等等,好像就没啥变化啊= = 嗯目测这题跟仓库建设差不多?写题的时候倒是没想这么多……直接推了公式. $$f[i]=min\{f[j]+cal(j,i)+a[i]\} ...