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. Redux使用教程

    在开始之前,需要安装环境,node.js可以使用npm管理包,开发的工具webstorm可以创建相应的项目. 项目中redux是管理全局的同一个store,React-router是管理路由的,这里只 ...

  2. http://www.36dsj.com/archives/46131

    https://docs.growingio.com/Developer%20Document.html https://youdata.163.com/dash/39706/editor?pid=7 ...

  3. Web Worker模拟抢票

    web worker工作原理图: 抢票系统思维导图: 思路:五个人(5个div窗口模拟)同时进行抢票,有百分之十的几率可以抢到票,抢到票后对应的窗口(即随机生成的数大于等于0小于9的情况)会编程天蓝色 ...

  4. GitLab代码行数统计--统计增加与删除行数

    #!/bin/bashmaster_dev='master'date_star='2018-11-01'date_end='2018-11-30'path1=`find /home/gitlab_da ...

  5. java十进制转换成二进制数

    牢记这些呀,特别常用! 1.十进制转成二进制 String s = Integer.toBinaryString(n)  //将十进制数转成字符串,例如n=5 ,s = "101" ...

  6. Python开发【第七篇】:面向对象二

    字段 class Foo:     #静态字段(保存在类中)     CC = 123       def __init__(self):         #普通字段(保存在对象中)          ...

  7. 如何配置Java环境变量[转]

    https://jingyan.baidu.com/article/fd8044fa2c22f15031137a2a.html

  8. 156. Binary Tree Upside Down反转二叉树

    [抄题]: Given a binary tree where all the right nodes are either leaf nodes with a sibling (a left nod ...

  9. [leetcode]7. Reverse Integer反转整数

    Given a 32-bit signed integer, reverse digits of an integer. Example 1: Input: 123 Output: 321 Examp ...

  10. Linux Curl命令

    一.简介 linux curl是一个利用URL规则在命令行下工作的文件传输工具.它支持文件的上传和下载,所以是综合传输工具,但按传统,习惯称url为下载工具.   二.安装 wget http://c ...