一、List接口

  List集合为列表类型,列表的主要特征是以线性方式存储对象。

  1.实例化List集合

  List接口的常用实现类有ArrayList和LinkedList,根据实际需要可以使用两种方式进行List集合实例化

List<String> list_1 = new ArrayList<>();
List<String> list_2 = new LinkedList<>();

  由于List集合可以通过索引位置访问对象,因此,遍历List集合的方法有两种:

        Iterator<String> it = list.iterator();
while (it.hasNext()) {
String string = (String) it.next();
System.out.println(string);
} for (int i = 0; i < list.size(); i++) {
System.out.println(list.get(i));
}

  2.List接口除了拥有Collection接口提供的所有方法,还拥有一些适合于自身的常用方法。

  

  可以看出,List接口提供的适合于自身的常用方法均与索引有关,这是因为List集合为列表类型,以线性方式存储对象,可以通过对象的索引操作对象。

  3.常用方法

  (1)add(int index, Object obj)向指定索引位置添加对象,set(int index, Object obj)是替换指定索引位置的对象。

package list.jun.iplab;

import java.util.Iterator;
import java.util.LinkedList;
import java.util.List; public class MethodTest_addAndset { public static void main(String[] args) { String a = "A", b = "B", c = "C", d = "D", e = "E"; List<String> list = new LinkedList<>(); list.add(a);
list.add(e);
list.add(d); list.set(1, b); // 将e换成b
list.add(2, c); // 在索引值为2的位置插入c,也就是d的前面 Iterator<String> it = list.iterator();
while (it.hasNext()) {
String string = (String) it.next();
System.out.println(string);
}
}
} 输出:
A
B
C
D

  (2)indexOf(Object obj)获得指定对象的最小索引位置,lastIndexOf(Object obj)获得指定对象的最大索引位置。

package list.jun.iplab;

import java.util.Iterator;
import java.util.LinkedList;
import java.util.List; public class MethodTest_addAndset { public static void main(String[] args) { String a = "A", b = "B", c = "C", d = "D", e = "E", repeat = "Repeat"; List<String> list = new LinkedList<>(); list.add(a);
list.add(repeat);
list.add(b);
list.add(repeat);
list.add(c);
list.add(repeat);
list.add(d);
list.add(repeat); Iterator<String> it = list.iterator();
while (it.hasNext()) {
String string = (String) it.next();
System.out.print(string + " ");
} System.out.println(); System.out.println(list.indexOf(repeat));
System.out.println(list.lastIndexOf(repeat));
System.out.println(list.indexOf(b));
System.out.println(list.lastIndexOf(b)); }
} 输出:
A Repeat B Repeat C Repeat D Repeat
1
7
2
2

  (3)subList(int fromIndex, int toIndex)用来截取现有List集合中的部分对象,生成新的List集合。

package list.jun.iplab;

import java.util.Iterator;
import java.util.LinkedList;
import java.util.List; public class MethodTest_addAndset { public static void main(String[] args) { String a = "A", b = "B", c = "C", d = "D", e = "E", repeat = "Repeat"; List<String> list = new LinkedList<>(); list.add(a);
list.add(repeat);
list.add(b);
list.add(repeat);
list.add(c);
list.add(repeat);
list.add(d);
list.add(repeat); Iterator<String> it = list.iterator();
while (it.hasNext()) {
String string = (String) it.next();
System.out.print(string + " ");
} System.out.println(); list = list.subList(1, 3); Iterator<String> it_1 = list.iterator();
while (it_1.hasNext()) {
String string = (String) it_1.next();
System.out.print(string + " ");
}
}
} 输出:
A Repeat B Repeat C Repeat D Repeat
Repeat B

  二、ArrayList类

  ArrayList类实现了List接口,由ArrayList类实现的List集合采用数组结构保存对象。

  数组结构的优点是便于对集合进行快速的随机访问,如果经常需要根据索引位置访问集合中的对象,使用由ArrayList类实现的List集合的效率较好。

  数组结构的缺点是向指定索引位置插入对象和删除指定索引位置对象的速度较慢。

package list.jun.iplab;

import java.util.ArrayList;
import java.util.List; public class ArrayListTest { public static void main(String[] args) { String a = "A", b = "B", c = "C", d = "D", e = "E"; List<String> list = new ArrayList<>(); list.add(a);
list.add(b);
list.add(c);
list.add(d);
list.add(e); System.out.println(list.get((int) (Math.random()*5)));
}
}

  三、LinkedList类

  LinkedList(链式队列)类实现了List接口,同时还实现了Queue接口,由Linkedlist类实现的List集合采用链表结构保存对象。

  链表结构的优点是便于向集合中插入和删除对象,如果经常需要向集合中插入对象,或者从集合中删除对象,使用由LinkedList类实现的List集合的效率较高。

  链表结构的缺点是随机访问对象的速度较慢,如果经常需要随机访问集合中的对象,使用由LinkedList类实现的List集合的效率则较低。

  1.常用方法

  LinkedList类还根据采用链表结构保存对象的特点,提供了几个专有的操作集合的方法。

  

  2.基本使用

  在使用LinkedList类特有的操作集合的方法时,要在创建集合对象时声明对象的类型为LinkedList类型

LinkedList<String> list = new LinkedList<>();

  基本使用:

    public static void main(String[] args) {

        String a = "A", b = "B", c = "C", d = "D", e = "E";
String f = "F", g = "G"; LinkedList<String> list = new LinkedList<>(); list.add(a);
list.add(b);
list.add(c);
list.add(d);
list.add(e); Iterator<String> it = list.iterator(); // 打印 A B C D E
while (it.hasNext()) {
String string = (String) it.next();
System.out.print(string + " ");
} System.out.println(); System.out.println(list.getFirst()); // 打印A
list.addFirst(e);
System.out.println(list.getFirst()); // 打印E
list.removeFirst();
System.out.println(list.getFirst()); // 打印F

  

  3.使用迭代器删除LinkedList集合中间的元素

  例如:链式队列中原有元素A B C D E F,使用迭代器删除第2个元素的操作是:

        Iterator<String> it_2 = list.iterator();
String first = it_2.next();
System.out.println(first);      // 打印:A
String second = it_2.next();
System.out.println(second);    // 打印:B
it_2.remove(); Iterator<String> it_3 = list.iterator();
while (it_3.hasNext()) {            // 打印:A C D E F
String string = (String) it_3.next();
System.out.print(string + " ");
}

  4.在链表队列的中间位置添加元素

  链表队列是一个有序集合,每个对象的位置十分重要。LinkedList类中的add方法(包括addFirst和AddLast)将对象添加到链表的尾部。但是,常常需要将元素添加到链表的中间。

  由于迭代器是描述集合中位置的,因此这种依赖于位置的add方法将由迭代器负责。

  只有对自然有序的集合使用迭代器的add方法添加元素才有实际意义,而无需的集合(例如:Set)就没有add方法。

  例如,执行add方法后,将新添加的元素添加到链表的尾部。

        list.add(f);
Iterator<String> it_1 = list.iterator();
while (it_1.hasNext()) {          // 打印结果:A B C D E F
String string = (String) it_1.next();
System.out.print(string + " ");
}

  回顾一下集合框架中的接口:四大类接口Collection、Map、Iterator和RandomAccess。

  其中,ListIterator接口是Iterator接口的子接口,其中也包含add方法。

  使用LinkedList类的listIterator方法返回一个实现了ListIterator接口的迭代器对象:

ListIterator<String> lIt = list.listIterator();

  使用ListIterator的add方法在迭代器位置之前添加一个新对象:原有元素为(A C D E F)

        ListIterator<String> lIt = list.listIterator();
lIt.next();      // 越过第一个元素
lIt.add(g); // 在第二个元素之前插入g Iterator<String> it_4 = list.iterator();
while (it_4.hasNext()) {                    // 打印:A G C D E F
String string = (String) it_4.next();
System.out.print(string + " ");
}

Java基础(二十一)集合(3)List集合的更多相关文章

  1. java基础-IO流对象之Properties集合

    java基础-IO流对象之Properties集合 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.Properties集合的特点 Properties类表示了一个持久的属性集. ...

  2. Bootstrap <基础二十一>徽章(Badges)

    Bootstrap 徽章(Badges).徽章与标签相似,主要的区别在于徽章的边角更加圆滑. 徽章(Badges)主要用于突出显示新的或未读的项.如需使用徽章,只需要把 <span class= ...

  3. Java面试题总结之Java基础(二)

    Java面试题总结之Java基础(二) 1.写clone()方法时,通常都有一行代码,是什么? 答:super.clone(),他负责产生正确大小的空间,并逐位复制. 2.GC 是什么? 为什么要有G ...

  4. Java入土--Java基础(二)

    Java基础(二) 接上一讲,我们接着来聊聊Java的一些基础知识,下一讲就会进行流程的控制. 类型转换 首先呢,是类型的转换,接上一个内容的数据类型,类型转换就是数据类型更进一步的应用. 由于Jav ...

  5. Java基础学习笔记(六) - 数据结构和集合

    一.认识数据结构 1.数据结构有什么用? 合理的使用数据结构,可以更方便的查找存储数据. 2.常见的数据结构 数据存储常用结构有:栈.队列.数组.链表和红黑树. 栈:堆栈(stack),它是运算受限的 ...

  6. java基础(7):自定义类、ArrayList集合

    1. 引用数据类型(类) 1.1 引用数据类型分类 提到引用数据类型(类),其实我们对它并不陌生,如使用过的Scanner类.Random类. 我们可以把类的类型为两种: 第一种,Java为我们提供好 ...

  7. Java基础(二) 基本类型数据类型、包装类及自动拆装箱

    我们知道基本数据类型包括byte, short, int, long, float, double, char, boolean,对应的包装类分别是Byte, Short, Integer, Long ...

  8. [ 转载 ] Java基础二

    前言 关于赢在面试的Java题系列基本收集整理完成了,所有题目都是经过精心挑选的,很基础又考验求职者的基本功,应该说被面试到的几率很大.这里整理挑选出来供大家面试前拿来看一看,所有题目整理自网络,有一 ...

  9. java基础(二)-----java的三大特性之继承

    在<Think in java>中有这样一句话:复用代码是Java众多引人注目的功能之一.但要想成为极具革命性的语言,仅仅能够复制代码并对加以改变是不够的,它还必须能够做更多的事情.在这句 ...

  10. 夯实Java基础(十一)——内部类

    1.内部类的概念 内部类顾名思义:将一个类定义在另一个类里面或者一个方法里面,这样的类称为内部类.对于很多Java初学者来说,内部类学起来真的是一头雾水,根本理解不清楚是个什么东西,包括我自己(我太菜 ...

随机推荐

  1. 原来python如此神奇

    一.优缺点分析 1.缺点: ① 数学问题的生成中只考虑了消除乘除法加括号的无效情况(例如3*(4+5)或(6*5)/2这样的计算),但没有去掉加减法加括号的无效情况(例如(4+(7+8))或(3-(2 ...

  2. Java源码跟踪阅读技巧

    转:https://www.jianshu.com/p/ab865109070c 本文基于Eclipse IDE 1.Quick Type Hierarchy 快速查看类继承体系. 快捷键:Ctrl ...

  3. js实现敲回车键登录

    任何一个网站页面都有登陆界面,很多时候在输入好用户名和密码后,还要用鼠标去点一个类似于登陆什么的按钮或者链接.这样你才能进网站做你喜欢做的事情. 有时候我就在想是不是能在输入好我该输入的东西后,直接敲 ...

  4. Jquery Validate 相关参数及常用的自定义验证规则

    一.官网地址:http://bassistance.de/jquery-plugins/jquery-plugin-validation 二.默认校验规则 1 2 3 4 5 6 7 8 9 10 1 ...

  5. 当我们在聊 Serverless 时你应该知道这些

    作者 | 杨泽强(竹涧)阿里云技术专家 说起当前最火的技术,除了最新的区块链.AI,还有一个不得不提的概念是 Serverless.Serverless 作为一种新型的互联网架构,直接或间接推动了云计 ...

  6. spring源码分析系列2:Bean与BeanDefinition关系

    接口表示一种能力,实现了一个接口,即拥有一种能力. BeanDefinition与Bean的关系, 就好比类与对象的关系. 类在spring的数据结构就是BeanDefinition.根据BeanDe ...

  7. 关于MySQL退出命令,还有你不知道的一种操作

    前两天再进MySQL窗口的时候,手快点了一个 ' ,并且按下了enter键,于是就出现了这种情况, 然后就退不出来了,为此我还特意上网查了一下,最后的结果基本上都是只能关闭MySQL 重新进入. 因为 ...

  8. MongoDB 走马观花(全面解读篇)

    目录 一.简介 二.基本模型 BSON 数据类型 分布式ID 三.操作语法 四.索引 索引特性 索引分类 索引评估.调优 五.集群 分片机制 副本集 六.事务与一致性 一致性 小结 一.简介 Mong ...

  9. Js获取宽高度的归纳集锦总结

    首先,先吓唬一下我们的小白们!在js中的描述宽高的可以细分有22种.属性根据不同的兼容性也分为五种 window.innerWidth //除去菜单栏的窗口宽度,与浏览器相关 window.inner ...

  10. PHP中sha1()函数和md5()函数的绕过

    相信大家都知道,sha1函数和md5都是哈希编码的一种,在PHP中,这两种编码是存在绕过漏洞的. PHP在处理哈希字符串时,会利用”!=”或”==”来对哈希值进行比较,它把每一个以”0E”开头的哈希值 ...