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. delphi图片欣赏

    作者QQ:276678295  

  2. c++冒号作用

    转自http://www.360doc.com/content/13/0605/11/3373961_290615318.shtml 1.冒号(:)用法 (1)表示机构内位域的定义(即该变量占几个bi ...

  3. py2与py3区别总结

    1. py2中的str是py3中的bytes py2中的Unicode是py3中的str 声明一个字符串变量时,py2 和py3都是str类型,但py2代表字节类型,py3代表文本类型 隐式转换: p ...

  4. mysql 查询语句严格区分大小写

    一般情况下mysql 查询是不会区分大小写的,执行查询语句select id,current_unit from knowledge_attributes where  current_unit = ...

  5. 365. Water and Jug Problem量杯灌水问题

    [抄题]: 简而言之:只能对 杯子中全部的水/容量-杯子中全部的水进行操作 You are given two jugs with capacities x and y litres. There i ...

  6. 360. Sort Transformed Array二元一次方程返回大数序列

    [抄题]: Given a sorted array of integers nums and integer values a, b and c. Apply a quadratic functio ...

  7. node.js 使用 net 模块模拟 websocket 握手,进行数据传递。

    websocket 是一种让浏览器与服务器之间建立持久的连接,并能进行双向数据传输的一种协议. websocket 属性应用层协议,基于tcp传输协议,并复用http的握手通道. 一.如何进行webs ...

  8. 以太坊虚拟机EVM 和EOS 虚拟机的劣势!

     EVM: 01 智能合约设计层面 缺乏标准库支持:EVM缺少完善的标准库支持,甚至最基本的string类型支持,在EVM中都很鸡肋,例如字符串拼接.切割.查找等等都需要开发者自己实现.带来的后果就是 ...

  9. React-router4 第六篇 No Match 404

    https://reacttraining.com/react-router/web/example/no-match react-router-dom 又一个新属性 Switch 在Switch 的 ...

  10. Spring MVC 的国际化和本地化

    国际化: i18n 本地化: l10n java.util.Locale 类表示一个语言区域.一个 Locale 对象包含 3 个主要元件:language.country.variant java. ...