首页 > 编程语言 >Java 中的List

Java 中的List

时间:2024-02-02 12:55:21浏览次数:30  
标签:元素 Java list1 ArrayList Object List add

List

List接口常用方法

List集合存储元素特点:有序可重复

List既然是Collection接口的子接口,那么肯定List接口有自己的“特色”方法

以下列出List特有的常用的方法:

  • void add(int index, E element) 将指定的元素插入此列表中的指定位置(可选操作)。

  • Object get(int index)返回此列表中指定位置的元素。

  • int indexOf(Object o) 返回此列表中指定元素的第一次出现的索引,如果此列表不包含元素,则返回-1。

  • int lastIndexOf(Object o) 返回此列表中指定元素的最后一次出现的索引,如果此列表不包含元素,则返回-1。

  • Object remove(int index) 删除该列表中指定位置的元素(可选操作)。

  • Object set(int index, E element) 用指定的元素(可选操作)替换此列表中指定位置的元素。

import java.util.*;
/*
* 测试List接口中常用的方法、
* LIst集合存储元素特点:有序可重复
void add(int index, E element)  将指定的元素插入此列表中的指定位置(可选操作)。
Object  get(int index)返回此列表中指定位置的元素。
int   indexOf(Object o)   返回此列表中指定元素的第一次出现的索引,如果此列表不包含元素,则返回-1。
int   lastIndexOf(Object o)  返回此列表中指定元素的最后一次出现的索引,如果此列表不包含元素,则返回-1。
Object  remove(int index) 删除该列表中指定位置的元素(可选操作)。
Object  set(int index, E element)  用指定的元素(可选操作)替换此列表中指定位置的元素。
* */
public class ListTest01 {
    public static void main(String[] args) {
        //创建List类型的集合
//        List myList = new LinkedList();
//        List myList = new Vector();
        List myList = new ArrayList();

        myList.add("A");
        myList.add("B");
        myList.add("C");
        myList.add("D");
        
        // 在列表指定位置插入元素
        // 这个方法使用的不多,对于ArrayList来说效率比较低
        myList.add(1,"king");

        Iterator it = myList.iterator();
        while(it.hasNext()){
            Object elt = it.next();
            System.out.println(elt);
        }

        //根据下表获取元素
        Object firstObj = myList.get(0);
        System.out.println(firstObj);

        // 通过下标遍历  [List集合特有的方式,Set没有]
        for (int i = 0; i < myList.size(); i++) {
            Object obj = myList.get(i);
            System.out.println(obj);

        }
    }
}

ArrayList

  • ArrayList集合初始化容量是10
  • ArrayList集合底层是Object类型的数组 Object []
  • ArrayList集合的扩容:原容量的1.5倍
  • ArrayList底层是数组,怎么优化?
    尽可能少的扩容,因为数组扩容的效率比较低,建议在使用ArrayList集合的时候,预估元素的个数,给定一个初始化容量
  • 数组的优点:检索效率比较高(每个元素占用空间大小相同,内存地址是连续的 ,知道首元素的内存地址,知道下标,我们就可以计算元素的内存地址,所以检索效率最高)
  • 数组的缺点:随机增删效率比较低,很难存储大数据量(很难找到一块非常巨大的连续的内存空间)
  • 向数组末尾添加元素效率还是比较高的
  • 面试官经常问的一个问题: 这么多集合中,你使用的哪个数组最多?
    ArrayList集合,因为往数组末尾添加元素,效率不受影响,另外我们检索/查找某个元素的操作比较多
import java.util.ArrayList;
import java.util.Collection;
import java.util.HashSet;
import java.util.List;
/*
*ArrayList集合的扩容:原容量的1.5倍
* ArrayList底层是数组,怎么优化?
* 尽可能少的扩容,因为数组扩容的效率比较低,建议在使用ArrayList集合的时候,预估元素的个数,给定一个初始化容量
* 数组的优点:检索效率比较高(每个元素占用空间大小相同,内存地址是连续的 ,知道首元素的内存地址,知道下标,我们就可以计算元素的内存地址,所以检索效率最高)
* 数组的缺点:随机增删效率比较低,很难存储大数据量(很难找到一块非常巨大的连续的内存空间)
* 向数组末尾添加元素效率还是比较高的
* 面试官经常问的一个问题:  这么多集合中,你使用的哪个数组最多?
* ArrayList集合,因为往数组末尾添加元素,效率不受影响,另外我们检索/查找某个元素的操作比较多
* */
public class ArrayListTest01 {
    public static void main(String[] args) {
        //默认初始化容量是10 (底层先创建了一个长度为0的数组,当添加第一个元素的时候,初始化容量是10)
        //数组的长度是10
        List list1 = new ArrayList();
        //集合的size()方法是获得当前集合中元素的个数,不是获取集合的容量。
        System.out.println(list1.size()); //0
        List list2 = new ArrayList(20);
        System.out.println(list2.size()); //0

        list1.add(1);
        list1.add(1);
        list1.add(1);
        list1.add(1);
        list1.add(1);
        list1.add(1);
        list1.add(1);
        list1.add(1);
        list1.add(1);
        list1.add(1);
        System.out.println(list1.size());
        //再加一个元素
        list1.add(10);
        //新的容量增长1.5倍
        System.out.println(list1);

        //创建一个HashSet集合
        Collection c = new HashSet();
        c.add(100);
        c.add(50);
        c.add(66);
        c.add(610);
        c.add(100);

        //通过这个构造方法就可以将HashSet集合转化为ArrayList集合。
        List myList3 = new ArrayList(c);
        for (int i = 0; i < myList3.size(); i++) {
            System.out.println(myList3.get(i));
        }
    }
}

标签:元素,Java,list1,ArrayList,Object,List,add
From: https://www.cnblogs.com/shijili/p/18002999

相关文章

  • java: Compilation failed: internal java compiler error
    idea启动项目后出现 java:Compilationfailed:internaljavacompilererror错误第一种情况:idea的JDK版本和项目配置的不同。解决方法:查看项目中配置的jdk版本,再查看 idea配置的版本项目配置的:在idea中要查看三个地方的配置 1、File---->Setting------>javacompile......
  • 深入浅出Java多线程(六):Java内存模型
    引言大家好,我是你们的老伙计秀才!今天带来的是[深入浅出Java多线程]系列的第六篇内容:Java内存模型。大家觉得有用请点赞,喜欢请关注!秀才在此谢过大家了!!!在并发编程中,有两个关键问题至关重要,它们是线程间通信机制和线程间同步控制。线程间通信机制线程间通信是指在一个多线程程序......
  • 深入浅出Java多线程(八):volatile
    引言大家好,我是你们的老伙计秀才!今天带来的是[深入浅出Java多线程]系列的第八篇内容:volatile。大家觉得有用请点赞,喜欢请关注!秀才在此谢过大家了!!!在当今的软件开发领域,多线程编程已经成为提高系统性能和响应速度的重要手段。Java作为广泛应用的多线程支持语言,其内存模型(JMM)设计巧妙......
  • java基础面试
    java基础个人介绍:面试官您好,我叫赵英波,本科毕业于黄河科技学院软件工程专业,来自河南省郑州市,从网上看到公司招聘感觉比较适合字迹。所以来争取下这份工作。熟悉javaee,javase,熟悉javaweb,springssm框架。熟悉mysql,redis熟悉消息队列mq,熟悉linux基本命令,了解若依框架......
  • 在 C# 中,`int[]`(数组)和 `List<int>`(列表)都可以用来存储一组整数,但它们有一些重要的区
    在C#中,int[](数组)和List<int>(列表)都可以用来存储一组整数,但它们有一些重要的区别:大小:int[]的大小在创建时就确定了,不能改变。而List<int>的大小是动态的,可以添加或删除元素,大小会自动调整¹。方法:List<int>提供了许多方便的方法,如Add、Remove、Insert等,而int[]没有这些方......
  • [学习笔记] JavaScript中字符串的Slice()方法
    slice方法是对字符串进行切割/截取的一种方法。string.slice(index1,index2)其中:string为字符串名;index1为数字,意为字符串从第X个字符开始截取,如为1,则从字符串第1个字符开始截取。同时该数可为负数,当设为负数时则是从倒数第X个字符开始截取(但仍旧是向最后一个字符的方......
  • 每日一道Java面试题:说一说Java中的异常
    写在开头任何一个程序都无法保证100%的正常运行,程序发生故障的场景,我们称之为:异常,在Java中对于异常的处理有一套完善的体系,今天我们就来一起学习一下。老样子,用一段简单的代码开始今天的学习。我:“小二,上代码!”JavaBuild君:“好嘞!几位爷,里面请~”【代码示例1】//Java中经......
  • Java 中的contains方法解析
    contains方法解析深入Collection集合的contains方法booleancontains(Objecto)如果此集合包含指定的元素,则返回truecontains方法是用来判断集合中是否包含某个元素的。它在底层调用了equals方法进行比对。publicclassCollectionTest04{publicstaticvoidmain......
  • java面向对象基础语法之两个引用指向同一个对象内存
    一:概述前面已经说了单个对象的引用指向和两个对象的引用指向。下面来说一下两个对象引用指向同一个对象的内存图。二:具体说明<1>说明的具体代码实例代码publicclassStudent1{Stringname;intage;publicvoidstudy(){System.......
  • 深入理解 Java 变量类型、声明及应用
    Java变量变量是用于存储数据值的容器。在Java中,有不同类型的变量,例如:String-存储文本,例如"你好"。字符串值用双引号引起来。int-存储整数(全数字),没有小数,例如123或-123。float-存储浮点数,带有小数,例如19.99或-19.99。char-存储单个字符,例如'a'或'B'。字......