Java学习笔记30(集合框架四:List接口)

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);// 1
            System.out.println(last);// 4
        }
    }

    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);// 1
        System.out.println(last);// 4
        System.out.println(link);// [2, 3]
    }
}

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

原文地址:https://www.cnblogs.com/xuyiqing/p/8278039.html

时间: 2024-10-21 21:48:22

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

【Java学习笔记】集合框架Ⅱ

迭代 ●迭代是取出集合中元素的一种方式. ●因为Collection中有iterator方法,所以每一个子类集合对象都具备迭代器. ●用法: 第一种 for (iterator iter=iterator(); iter.hasNext();) //老外比较喜欢用这种,省内存(iter的内存),开发时用这个 { System.out.println(iter.next()); } 第二种 Iterator iter = l.iterator(); while(iter.hasNext()) {

【Java学习笔记】集合框架Ⅰ

集合类的由来: 对象用于封装特有数据,对象多了需要存储,如果对象的个数不确定. 就使用集合容器进行存储. 集合特点: 1.用于存储对象的容器. 2.集合的长度是可变的. 3.集合中不可以存储基本数据类型值. 集合容器因为内部的数据结构不同,有多种具体容器,不断向上抽取,就形成了集合框架. 框架的顶层是Collection接口. Collection的常见方法: 1.添加 boolean  add(Object obj); boolean  addAll(Collection coll); 2.删

【Java学习笔记】&lt;集合框架&gt;Iterator的子接口ListIterator

1 import java.util.ArrayList; 2 import java.util.Iterator; 3 import java.util.List; 4 5 public class Test3 { 6 7 public static void main(String[] args) { 8 List list = new ArrayList(); 9 10 list.add("abc1"); 11 list.add("abc2"); 12 lis

【Java学习笔记】&lt;集合框架&gt;TreeSet,Comparable,Comparator

1 public class Person implements Comparable{ 2 private String name; 3 private int age; 4 5 public Person(){ 6 super(); 7 } 8 public Person(String name, int age) 9 { 10 super(); 11 this.name = name; 12 this.age = age; 13 } 14 15 16 @Override 17 public

【Java学习笔记】&lt;集合框架&gt;使用LinkedList来模拟一个堆栈或者队列的数据结构

1 import java.util.LinkedList; 2 3 public class Test5 { 4 5 public static void main(String[] args) { 6 7 Duilie dl = new Duilie(); 8 9 dl.myAdd("abc1"); 10 dl.myAdd("abc2"); 11 dl.myAdd("abc3"); 12 dl.myAdd("abc4");

【Java学习笔记】&lt;集合框架&gt;对字符串进行长度排序

1 package 测试; 2 3 import java.util.Comparator; 4 5 public class ComparatorByLength implements Comparator { //定义比较器 6 7 @Override 8 public int compare(Object o1, Object o2) { 9 String s1 = (String)o1; 10 String s2 = (String)o2; 11 12 int temp = s1.len

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

1 package cn.temptation; 2 3 public class Sample01 { 4 public static void main(String[] args) { 5 // 需求:从三国演义中评选出四个最帅的武将,并存储下来 6 7 // 因为具备了面向对象的思想,所以创建四个对象来存储 8 Hero hero1 = new Hero("张飞", 18); 9 Hero hero2 = new Hero("赵云", 16); 10 Her

黑马程序员——JAVA学习笔记八(集合)

1,    JAVA最初版本只为最常用的数据结构提供了很少的一组类:Vector.Stack.Hashtable.BitSet与Enumeration接口,从JAVA1.2版本开始推出了一组功能完善的的数据结构. 集合类的由来:  对象用于封装特有数据,对象多了需要存储,如果对象的个数不确定.  就使用集合容器进行存储. 集合特点: 1,用于存储对象的容器. 2,集合的长度是可变的. 3,集合中不可以存储基本数据类型值. 4,接口与实现相互分离. 集合框架是为表示和操作集合而规定的一种统一的标准

Java基础学习笔记十七 集合框架(三)之Map

Map接口 通过查看Map接口描述,发现Map接口下的集合与Collection接口下的集合,它们存储数据的形式不同,如下图. Collection中的集合,元素是孤立存在的(理解为单身),向集合中存储元素采用一个个元素的方式存储. Map中的集合,元素是成对存在的(理解为夫妻).每个元素由键与值两部分组成,通过键可以找对所对应的值. Collection中的集合称为单列集合,Map中的集合称为双列集合. 需要注意的是,Map中的集合不能包含重复的键,值可以重复:每个键只能对应一个值. Map中