1、List

  List接口是Collection的子接口,List是一个可重复集合

2、ArrayList和LinkedList

  ArrayList和LinkedList是List接口最常见的两个实现类,分别用动态数组和链表的方式实现了List接口。

3、get与set方法

  List除了继承Collection定义的方法外,还根据其线性表的数据结构定义了一系列方法,其中最常用的就是基于下标的get和set方法。

  E get(int index):获取集合中指定下标对应的元素,下标从0开始。

  E set(int index, E elment):将给定的元素存入给定位置,并将原位置的元素返回。

  1. List list=new ArrayList();
  2. list.add("java");
  3. list.add("C#");
  4. list.add("javascritp");
  5. list.add("vbscript");
  6. //遍历集合
  7. for(int i=0;i<list.size();i++){
  8. System.out.println(list.get(i));
  9. }
  10. System.out.println("============================");
  11. //交换元素2和3的位置
  12. list.set(2, list.set(1, list.get(2)) ) ;
  13. for(int i=0;i<list.size();i++){
  14. System.out.println(list.get(i));
  15. }
  16.  
  17. 结果
  18. java
  19. C#
  20. javascritp
  21. vbscript
  22. ============================
  23. java
  24. javascritp
  25. C#
  26. vbscript

3. 插入和删除

  List根据下标的操作还支持插入与删除操作:

  void add(int index,E element):

  将给定的元素插入到指定位置,原位置及后续元素都顺序向后移动。

  E remove(int index):

  删除给定位置的元素,并将被删除的元素返回。

4、 subList方法

  List的subList方法用于获取子List。

  需要注意的是,subList获取的List与原List占有相同的存储空间,对子List的操作会影响的原List。

  List<E> subList(int fromIndex, int toIndex);

  fromIndex和toIndex是截取子List的首尾下标(前包括,后不包括) 。

5. List转换为数组

  List的toArray方法用于将集合转换为数组。但实际上该方法是在Collection中定义的,所以所有的集合都具备这个功能。

  其有两个方法:

  Object[] toArray()

  <T>T[] toArray(T[] a)

  1. List<String> list=new ArrayList<String>();
  2. list.add("java");
  3. list.add("C#");
  4. list.add("javascritp");
  5. list.add("vbscript");
  6.  
  7. Object[] arr= list.toArray();
  8.  
  9. String[] arr2 = list.toArray(new String[]{} );

  其中第二个方法是比较常用的,我们可以传入一个指定类型的数组,该数组的元素类型应与集合的元素类型一致。返回值则是转换后的数组,该数组会保存集合中所有的元素。

6. 数组转换为List

  Arrays类中提供了一个静态方法asList,使用该方法我们可以将一个数组转换为对应的List集合。其方法定义为:

  static <T>List<T> asList<T… a> 返回的List的集合元素类型由传入的数组的元素类型决定。

  需要注意的是,返回的集合我们不能对其增删元素,否则会抛出异常。并且对集合的元素进行的修改会影响数组对应的元素。

 7、List排序

方法一: Collections.sort方法实现排序:其作用是对集合元素进行自然排序(按照元素的由小至大的顺序)

  1. List list=new ArrayList();
  2. Random r=new Random();
  3. for(int i=0;i<10;i++){
  4. list.add(r.nextInt(100));
  5. }
  6. System.out.println(list);
  7. Collections.sort(list);
  8. System.out.println(list);

运行结果:
[48, 25, 29, 65, 85, 52, 20, 68, 76, 5]
[5, 20, 25, 29, 48, 52, 65, 68, 76, 85]

方法二: Comparable

  通过上一节我们知道了如何对集合元素进行自然排序,但是要想对元素进行自然排序那么就必须要有一个必要条件,就是元素的大小。集合中存入的都是引用类型,是以对象的形式存在于内存中,那么对象是如何进行的大小比较呢?实际上,若想对某个集合的元素进行自然排序,该集合的元素有一个要求,就是这些元素必须是Comparable的子类。

Comparable是一个接口,用于定义其子类是可以比较的。因为该接口有一个抽象方法:

int compareTo(T t)

所有子类都需要重写该方法来定义对象间的比较规则。该方法要求返回一个整数,这个整数不关心具体的值,而是关注取值范围。

当返回值>0时,表示当前对象比参数给定的对象大。

当返回值<0时,表示当前对象比参数给定的对象小。

当返回值=0时,表示当前对象和参数给定的对象相等。

例如:

  1. class Person implements Comparable<Person>{
  2.  
  3. int age;
  4. String name;
  5. public Person(String name,int age){
  6. this.name=name;
  7. this.age=age;
  8. }
  9. public int compareTo(Person o) {
  10. return age-o.age;
  11. }
  12. public String toString(){
  13. return "[name="+name+",age="+age+"]";
  14. }
  15.  
  16. public static void main(String[] args) {
  17. List list=new ArrayList();
  18. list.add(new Person("zhangshan", 25));
  19. list.add(new Person("lisi", 22));
  20. list.add(new Person("wangwu", 24));
  21. list.add(new Person("zhaoliu", 21));
  22. System.out.println(list);
  23. Collections.sort(list);
  24. System.out.println(list);
  25. }
  26. }

运行结果
[[name=zhangshan,age=25], [name=lisi,age=22], [name=wangwu,age=24], [name=zhaoliu,age=21]]
[[name=zhaoliu,age=21], [name=lisi,age=22], [name=wangwu,age=24], [name=zhangshan,age=25]]

方法三:comparator

  一旦Java类实现了Comparable,其比较逻辑就已经确定;如果希望在排序的操作中临时指定比较规则,可以采用Comparator接口回调的方式。

该接口要求实现类必须重写其定义的方法:

int compare(T o1,T o2)

该方法的返回值要求,若o1>o2则返回值应>0,若o1<o2则返回值应<0,若o1==o2则返回值应为0

例如:

  1. Collections.sort(list, new Comparator<Person>() {
  2. @Override
  3. public int compare(Person o1, Person o2) {
  4. return o2.age-o1.age;
  5. }
  6. });
  7. System.out.println(list);

运行结果

[[name=zhangshan,age=25], [name=wangwu,age=24], [name=lisi,age=22], [name=zhaoliu,age=21]]

26、线性表(List)的更多相关文章

  1. javascript实现数据结构:线性表--简单示例及线性表的顺序表示和实现

    线性表(linear list)是最常用且最简单的一种数据结构.一个线性表是n个数据元素的有限序列.在稍复杂的线性表中,一个数据元素可以由若干个数据项(item)组成. 其中: 数据元素的个数n定义为 ...

  2. 线性表&顺序线性表

    第二章 线性表 参考文献:[数据结构(C语言版)].严蔚敏 本篇章仅为个人学习数据结构的笔记,不做任何用途. 2.1 线性结构的特点 (1). 存在唯一的一个被称为"第一个"的数据 ...

  3. Chapter 3(线性表)

    1.单链表 //单链表代码,手打纯手工 //***********************************link.h*********************************** # ...

  4. [Algorithm]线性表

    一. 线性表基础算法 1.线性表插入操作 1 // 线性表插入操作(在第i(1≤i≤L.length+1)个位置上插入新元素elem) 2 bool InsertSeq( SeqList& L ...

  5. php线性表数组实现的删除操作

    php线性表数组实现的删除操作 一.总结 1.array_pop(): 函数删除数组中的最后一个元素. 二.代码 代码一: //线性表的删除(数组实现) function delete_array_e ...

  6. C语言数据结构——第二章 线性表

    二.线性表 2.1-线性表简介 2.1.1-线性表的定义 线性表是由若干个相同特性的数据元素组成的有限序列.若该线性表不包含任何元素,则称为空表,此时长度为0,当线性表不为空时,表中的元素的个数就是线 ...

  7. Java实验项目三——采用面向对象的方式设计线性表

    Program: 采用面向对象的方法设计一个线性表,目的是为其他需要用线性表的应用提供线性表对象. 1.list包中,定义线性表类 1 /* 2 * Description:定义线性表类 3 * 4 ...

  8. 线性表Linearlist

    顺序存储,链式存储,索引存储,散列存储 基本运算 SLIST         1.置空表 void SetNull(&L)     2.求长度 int Length(L)     3.取元素 ...

  9. 数据结构(Java描述)之线性表

    基础概念 数据结构:是相互之间存在一种或多种关系的数据元素的集合. 逻辑结构和物理结构 关于数据结构,我们可以从逻辑结构和物理结构这两个维度去描述 逻辑结构是数据对象中数据元素之间的关系,是从逻辑意义 ...

随机推荐

  1. HDU 2604 Queuing 矩阵高速幂

    Queuing Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total S ...

  2. JDBC 连Sql Server 接数据库--The TCP/IP connection to the host localhost, port 1433 has failed

    原文:https://blog.csdn.net/qq_39241986/article/details/80848855 这样的错误,你有遇到过吗? The TCP/IP connection to ...

  3. DockManager如何停靠 z

    DockManager默认只能停靠在窗体上,如果想停靠在其他控件上,我们发现并没有选项可以选,可能目前大部分解决方法是新建一个用户控件文件,再在用户控件里面单独设计模块. 除了这种方法还有没有其他的呢 ...

  4. UML九种图 之 用例图和类图

    前言     近期写UML文档,看视频的时候感觉掌握的还能够,当真正写文档的时候才发现不是一件easy的事.写文档自己又翻开自己的笔记看了一遍又一遍. 以下就给大家介绍一下我画的几张图: 用例图   ...

  5. 使用开源库 SDWebImage 异步下载缓存图片(持续更新)

    source  https://github.com/rs/SDWebImage APIdoc  http://hackemist.com/SDWebImage/doc Asynchronous im ...

  6. DWZ验证表单规则一览

    <form onsubmit="return validateCallback(this)" class="pageForm" action=" ...

  7. 【POJ】【2068】Art Gallery

    计算几何/半平面交 裸的半平面交,关于半平面交的入门请看神犇博客:http://blog.csdn.net/accry/article/details/6070621 然而代码我是抄的proverbs ...

  8. JBoss 系列一 O O:Maven jBPM 6 集成演示样例

    概述 jBPM 6 中底层架构基于 Maven,所以我们能够非常easy的进行 Maven jBPM 6 集成演示样例,本文分三个部分: 基本原理介绍 Maven jBPM 6 集成 jBPM 6 中 ...

  9. UVA 10026 Shoemaker&#39;s Problem

    Shoemaker's Problem Shoemaker has N jobs (orders from customers) which he must make. Shoemaker can w ...

  10. ECMAScript5之Object学习笔记(二)

    继续第二部分 Object.freeze(obj) 看字面意思就是“把一个对象冻结”. 下面我们来看个简单的例子以作说明: // a person instance var person = { na ...