List接口继承自Collection接口

具有重要的三大特点:

1.有序集合:存入和取出的顺序一致

2.此接口的用户可以对列表中每个元素插入位置精确的控制:可以通过索引操作

3.可以存储重复元素


List接口的特有方法(与索引有关):

package demo;

import java.util.List;
import java.util.ArrayList; //List接口继承Collection接口,下有很多实现类
//例如ArrayList
public class ListDemo {
public static void main(String[] args) {
function1();//添加
function2();//删除
function3();//修改
}
public static List<String> function(){
//创建集合
List<String> list = new ArrayList<>();
list.add("abc1");
list.add("abc2");
list.add("abc3");
list.add("abc4");
return list;
}
public static void function1(){
List<String> list = function();
System.out.println(list);
//[abc1, abc2, abc3, abc4]
list.add(1, "abc");//在1索引上添加
System.out.println(list);
//[abc1, abc, abc2, abc3, abc4]
}
public static void function2(){
List<String> list = function();
System.out.println(list);
//[abc1, abc2, abc3, abc4]
String s = list.remove(1);
System.out.println(s);//输出:abc2
System.out.println(list);
//[abc1, abc3, abc4]
}
public static void function3(){
List<String> list = function();
System.out.println(list);
//[abc1, abc2, abc3, abc4]
String s = list.set(2, "abc");
System.out.println(s);//输出:abc3
System.out.println(list);
//[abc1, abc2, abc, abc4]
}
}

List集合遍历方式有三种:迭代器遍历,普通for循环遍历,增强for循环遍历

List接口的数据存储结构:

List的众多子类存储元素所采用的结构方式是不同的,因此导致了众多集合有了各自的特点:

数据存储的常用结构有:堆栈,队列,数组,链表,这里简单介绍下:

堆栈存储结构通俗解释:子弹压进弹夹,先压进去的在下面,后压进去的在上面,开枪的时候,上边的子弹先弹出来,下边的后出来(先进后出)

队列存储结构通俗解释:坐火车排队安检,每个人依次检查,只有前面的人查完,才能轮到后边的人(先进先出)

数组结构:已经接触过很多次,通过索引查找块,不过由于定长,所以增删慢

链表结构:每一个元素分为两部分,一部分记录上一个元素地址,另一部分存储当前元素的信息,使得每一次个元素像自行车链一样连接

     查找时候由于需要通过连接的节点,速度慢,不过增删的时候,原理是直接操作地址,不改变本身的结构,所以速度很快

ArrayList集合采用了数组结构存储方式,所以查询快,增删慢,由于线程不安全,运行速度很快,

空参创建初始容量10,可变数组,原理是System的复制数组方法,以及一些其他的操作后进行扩容

LinkedList集合则采用了单向链表的数据结构,所以增删快,查询慢,同样线程不同步,运行速度快

LinkedList提供了大量的首尾操作

示例:

package demo;

import java.util.LinkedList;

public class LinkedListDemo {
public static void main(String[] args) {
function1();// 添加
function2();// 获取头尾
function3();// 移除并返回开头 } public static void function1() {
LinkedList<String> link = new LinkedList<String>();
link.addLast("a");
link.addLast("b");
link.addLast("c");
link.addLast("d"); link.addFirst("1");
link.addFirst("2");
link.addFirst("3");
System.out.println(link);
// [3, 2, 1, a, b, c, d]
} public static void function2() {
LinkedList<String> link = new LinkedList<String>();
link.add("1");
link.add("2");
link.add("3");
link.add("4");
if (!link.isEmpty()) {
String first = link.getFirst();
String last = link.getLast();
System.out.println(first);//
System.out.println(last);//
}
} public static void function3() {
LinkedList<String> link = new LinkedList<String>();
link.add("1");
link.add("2");
link.add("3");
link.add("4");
String first = link.removeFirst();
String last = link.removeLast();
System.out.println(first);//
System.out.println(last);//
System.out.println(link);// [2, 3]
}
}

还有一个Vector集合,数组结构,是JDK最早的集合,方法和ArrayList基本相同,运行速度慢,所以后来被ArrayList代替,这里不介绍了

Java学习笔记30(集合框架四:List接口)的更多相关文章

  1. 【Java学习笔记】<集合框架>定义功能去除ArrayList中的重复元素

    import java.util.ArrayList; import java.util.Iterator; import cn.itcast.p1.bean.Person; public class ...

  2. 【Java学习笔记】<集合框架>对字符串进行长度排序

    package 测试; import java.util.Comparator; public class ComparatorByLength implements Comparator { //定 ...

  3. 【Java学习笔记】<集合框架>TreeSet,Comparable,Comparator

    public class Person implements Comparable{ private String name; private int age; public Person(){ su ...

  4. Java学习笔记之---集合

    Java学习笔记之---集合 (一)集合框架的体系结构 (二)List(列表) (1)特性 1.List中的元素是有序并且可以重复的,成为序列 2.List可以精确的控制每个元素的插入位置,并且可以删 ...

  5. Java学习笔记之集合

    集合(Collection)(掌握) (1)集合的由来? 我们学习的是Java -- 面向对象 -- 操作很多对象 -- 存储 -- 容器(数组和StringBuffer) -- 数组而数组的长度固定 ...

  6. 【原】Java学习笔记026 - 集合

    package cn.temptation; public class Sample01 { public static void main(String[] args) { // 需求:从三国演义中 ...

  7. JavaSE 学习笔记之集合框架(十八)

    集合框架:,用于存储数据的容器. 特点: 1:对象封装数据,对象多了也需要存储.集合用于存储对象. 2:对象的个数确定可以使用数组,但是不确定怎么办?可以用集合.因为集合是可变长度的. 集合和数组的区 ...

  8. java学习笔记之集合家族2

    集合体系 一.数据结构 List集合储存数据结构 <1>堆栈结构 特点:先进后出 <2>队列结构 特点:先进先出 <3>数组结构 特点:查询快,增删慢 <4& ...

  9. java学习笔记之集合家族1

    集合 集合介绍: 由于数组中存放对象,对对象操作起来不方便.java中有一类容器,专门用来存储对象. 集合与数组的区别: 1.数组的长度固定的,而集合长度时可变的 2.数组只能储存同一类型的元素,而且 ...

  10. JAVA学习笔记(3)—— 抽象类与接口

    1. Java 抽象类 在面向对象的概念中,所有的对象都是通过类来描绘的,但是反过来,并不是所有的类都是用来描绘对象的,如果一个类中没有包含足够的信息来描绘一个具体的对象,这样的类就是抽象类. 抽象类 ...

随机推荐

  1. spring-AOP之通知和顾问

    通知和顾问都是切面的实现形式,其中通知可以完成对目标对象方法简单的织入功能. 而顾问包装了通知,可以让我们对通知实现更加精细化的管理,让我们可以指定具体的切入点. 通知分为前置通知,环绕通知及后置通知 ...

  2. chrome不能浏览任何网页,提示配置proxy,Ubuntu

    自从在Ubuntu安装virtualbox以后,我的chrome浏览器就不能上网了,提示我检查proxy信息, 后面设置了noproxy就ok啦. 不用使用命令,一次设置,终身有效. 首先,安装gks ...

  3. mui页面传值

    以下代码全部在script标签内 一.通过mui.openWindow()打开新页面(若目标页面为已预加载成功的页面,则在openWindow方法中传递的extras参数无效): mui.openWi ...

  4. Smart Contract - Hello World

    [编写Smart Contract] 1.包含头文件. #include <eosiolib/eosio.hpp> #include <eosiolib/print.hpp> ...

  5. c# NPOI 导出EXCEL (在下方显示图片)

    需要引入dll文件 也可以在NuGet里面管理(推荐) 比较方便 . using System; using System.Collections.Generic; using System.Linq ...

  6. Linux 上pcntl安装步骤

    一. 下载对应的PHP源码包 wget http://cn2.php.net/get/php-5.5.20.tar.gz/from/this/mirror 二. 解压下载的源码文件 tar -zxvf ...

  7. [leetcode]41. First Missing Positive第一个未出现的正数

    Given an unsorted integer array, find the smallest missing positive integer. Example 1: Input: [1,2, ...

  8. 学习笔记《简明python教程》

    学习笔记<简明python教程> 体会:言简意赅,很适合新手入门 2018年3月14日21:45:59 1.global 语句 在不使用 global 语句的情况下,不可能为一个定义于函数 ...

  9. jenkins源码管理git分支参数化

    多个分支来回切换构建时,每次都需要去很多个job里面改分支名称,比较费时,分支参数化后可以只改一处就ok啦 步骤: 1.进入系统管理--系统设置 2.勾选全局变量,然后输入分支变量名和对应的分支名称 ...

  10. MySQL开发——【高级操作、五子句】

    高级新增操作 ①基本插入操作: insert into 数据表名称(字段) values (值); ②批量插入操作: insert into 数据表名称(字段) values (值1),(值2),(值 ...