资讯专栏INFORMATION COLUMN

Java 集合 List

AlphaWatch / 2690人阅读

摘要:集合代表一个元素有序可重复的集合,集合中每个元素都有其对应的顺序索引。集合默认按元素的添加顺序设置元素的索引。

List集合代表一个元素有序、可重复的集合,集合中每个元素都有其对应的顺序索引。List集合可以通过索引来访问指定位置的集合元素。List集合默认按元素的添加顺序设置元素的索引。

Java8改进的List接口和ListIterator接口 普通方法

List是有序集合,因此List集合里增加了一些根据索引来操作集合元素的方法

void add(int index, Object element):将元素element插入到List集合的index处

boolean addAll(int index, Collection c):将集合c所包含的所有元素都插入到List集合的index处

Object get(int index):返回集合index索引处的元素

int indexOf(Object o):返回对象o在List集合中第一次出现的位置索引

int lastIndexOf(Object o):返回对象o在List集合中最后一次出现的位置索引

Object remove(int index):删除并返回index索引处的元素

Object set(int index, Object element):将index索引处的元素替换成element对象,返回被替换的旧元素

List subList(int fromIndex, int toIndex):返回从索引fromIndex(包含)到索引toIndex(不包含)处所有集合元素组成的子集合

import java.util.*;

public class ListTest3 
{
    public static void main(String[] args) 
    {
        List teams = new ArrayList();
        //向teams集合中添加三个元素
        teams.add(new String("克利夫兰骑士"));
        teams.add(new String("金州勇士"));
        teams.add(new String("俄克拉荷马雷霆"));
        System.out.println(teams);
        //将新字符串对象插入在第二个位置
        teams.add(1, new String("费城76人"));        
        for (int i = 0 ; i < teams.size() ; i++ )
        {
            System.out.println(teams.get(i));
        }
        //删除第3个元素
        teams.remove(2);
        System.out.println(teams);
        //判断指定元素在List集合中的位置:输出1,表明位于第二位
        System.out.println(teams.indexOf(new String("费城76人")));        ①
        //将第二个元素替换成新的字符串对象
        teams.set(1, new String("洛杉矶快船"));
        System.out.println(teams);
        //将teams集合的第二个元素(包括)
        //到第三个元素(不包括)截取成子集合
        System.out.println(teams.subList(1, 2));
    }
}

[克利夫兰骑士, 金州勇士, 俄克拉荷马雷霆]
克利夫兰骑士
费城76人
金州勇士
俄克拉荷马雷霆
[克利夫兰骑士, 费城76人, 俄克拉荷马雷霆]
1
[克利夫兰骑士, 洛杉矶快船, 俄克拉荷马雷霆]
[洛杉矶快船]

从代码①处可知,List判断两个对象相等的标准只要equals()方法返回true即可

默认方法

void replaceAll(UnaryOperator operator):根据operator指定的计算规则重新设置List集合的所有元素

void sort(Comparator c):根据Comparator参数对List集合的元素排序

import java.util.*;

public class ListTest3
{
    public static void main(String[] args)
    {
        List teams = new ArrayList();
        // 向books集合中添加4个元素
        teams.add(new String("克利夫兰骑士"));
        teams.add(new String("金州勇士"));
        teams.add(new String("俄克拉荷马雷霆"));
        teams.add(new String("费城76人"));
        // 使用目标类型为Comparator的Lambda表达式对List集合排序
        teams.sort((o1, o2)->((String)o1).length() - ((String)o2).length());
        System.out.println(teams);
        // 使用目标类型为UnaryOperator的Lambda表达式来替换集合中所有元素
        // 该Lambda表达式控制使用每个字符串的长度作为新的集合元素
        teams.replaceAll(ele->((String)ele).length());
        System.out.println(teams); // 输出[4, 5, 6, 7]
    }
}
ListIterator方法

ListIterator()方法返回一个ListIterator对象,ListIterator接口继承了Iterator接口,提供了专门操作List的方法,ListIterator接口在Iterator接口基础上增加了如下方法

boolean hasPrevious():返回该迭代器相关的集合是否还有上一个元素

Object previous():返回该迭代器的上一个元素

void add(Object o):在指定位置插入一个元素

ListIterator与Iterator对比

ListIterator增加了向前迭代的功能,Iterator只能向后迭代

ListIterator可以通过add()方法向List集合中添加元素,Iterator只能删除元素

import java.util.*;
public class ListIteratorTest
{
    public static void main(String[] args)
    {
        String[] teams = {
            "金州勇士", "俄克拉荷马雷霆",
            "克利夫兰骑士"
        };
        List teamList = new ArrayList();
        for (int i = 0; i < teams.length ; i++ )
        {
            teamList.add(teams[i]);
        }
        ListIterator lit = teamList.listIterator();
        while (lit.hasNext())
        {
            System.out.println(lit.next());
            lit.add("-------分隔符-------");
        }
        System.out.println("=======下面开始反向迭代=======");
        while(lit.hasPrevious())
        {
            System.out.println(lit.previous());
        }
    }
}
金州勇士
俄克拉荷马雷霆
克利夫兰骑士
=======下面开始反向迭代=======
-------分隔符-------
克利夫兰骑士
-------分隔符-------
俄克拉荷马雷霆
-------分隔符-------
金州勇士
ArrayList和Vector实现类

ArrayList和Vector都是基于数组实现的List类,所以ArrayList和Vector类封装了一个动态的、允许再分配的Object[]数组。initialCapacity参数用来设置该数组的长度,如果向ArrayList和Vector添加大量元素时,可使用ensureCapacity(int minCapacity)方法一次性增加initialCapacity。减少重分配次数,提供性能

创建空的ArrayList和Vector集合时不指定initialCapacity参数,则Object[]数组的长度默认为10

重新分配Object[]数组的方法

void ensureCapacity(int minCapacity):将ArrayList和Vector集合的长度增加大于或大于minCapacity值

void trimToSize():调整ArrayList和Vector集合的Object[]数组长度为当前元素的个数。调用该方法可减少ArrayList和Vector集合对象占用的存储空间

Vector的系列方法名长,具有很多缺点,通常尽量少用Vector实现类

ArrayList和Vector的区别

ArrayList是线程不安全,当多个线程访问同一个ArrayList集合时,如果有超过一个线程修改了ArrayList集合,则程序必须手动保证该集合的同步性

Vector是线程安全,无须程序保证该集合的特别想,也因为线程安全,Vector的性能比ArrayList的性能低

Collections工具类可以将一个ArrayList变成线程安全,因此依然不推荐Vector实现类

固定长度的List

操作数组的工具类:Arrays,该工具类提供了asList(Object.. a)方法,可以把一个数组或者指定个数的对象转换成一个List集合,这个List集合既不是ArrayList实现类的实例,也不是Vector实现类的实例,而是Arrays的内部类ArrayList的实例

Arrays.ArrayList是一个固定长度的List集合,程序只能遍历访问该集合里的元素,不可增加、删除该集合里的元素

import java.util.*;

public class FixedSizeList
{
    public static void main(String[] args)
    {
        List fixedList = Arrays.asList("克利夫兰骑士", "金州勇士");
        // 获取fixedList的实现类,将输出Arrays$ArrayList
        System.out.println(fixedList.getClass());
        // 使用方法引用遍历集合元素
        fixedList.forEach(System.out::println);
        // 试图增加、删除元素都会引发UnsupportedOperationException异常
        fixedList.add("俄克拉荷马雷霆");
        fixedList.remove("金州勇士");
    }
}

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/66389.html

相关文章

  • Java集合框架——List接口

    摘要:第三阶段常见对象的学习集合框架接口按照集合框架的继承体系,我们先从中的接口开始学习一概述及功能演示概述在中充当着一个什么样的身份呢有序的也称为序列实现这个接口的用户以对列表中每个元素的插入位置进行精确地控制。线程不安全,效率高。 第三阶段 JAVA常见对象的学习 集合框架——List接口 showImg(https://segmentfault.com/img/remote/14600...

    褰辩话 评论0 收藏0
  • Java编程基础16——Colletion集合

    摘要:集合的长度的是可变的,可以根据元素的增加而增长。如果元素个数不是固定的推荐用集合。线程安全,效率低。相对查询慢线程安全的相对增删慢数组结构底层数据结构是链表,查询慢,增删快。线程不安全,效率高。 1_对象数组的概述和使用 A:案例演示 需求:我有5个学生,请把这个5个学生的信息存储到数组中,并遍历数组,获取得到每一个学生信息。 import net.allidea.bean.Stu...

    TerryCai 评论0 收藏0
  • Java编程基础17——集合(List集合)

    1_(去除ArrayList中重复字符串元素方式)* A:案例演示 需求:ArrayList去除集合中字符串的重复值(字符串的内容相同) 思路:创建新集合方式 import java.util.ArrayList; import java.util.Iterator; public class ArrayList_1_demo { /* 创建新集合将重复元素去掉 * 1.明...

    scola666 评论0 收藏0
  • Java编程基础18——集合(Set集合

    摘要:并把最终的随机数输出到控制台。方法,在集合中如何存储元素取决于方法的返回值返回,集合中只有一个元素。创建集合对象,传入比较器。 1_HashSet存储字符串并遍历 A:Set集合概述及特点 通过API查看即可 B:案例演示 HashSet存储字符串并遍历 import java.util.HashSet; public class Demo1_HashSet { p...

    SexySix 评论0 收藏0
  • 集合概要学习---粗略

    摘要:集合框架的基本接口类层次结构其中表示接口,表示实现类和在实际开发中,需要将使用的对象存储于特定数据结构的容器中。实例是迭代器,拥有两个方法方法迭代器用于遍历集合元素。返回值则是转换后的数组,该数组会保存集合中的所有元素。 Java Collections Framework是Java提供的对集合进行定义,操作,和管理的包含一组接口,类的体系结构。 Java集合框架的基本接口/类层次结构...

    DesGemini 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<