List集合详细介绍

简介: List集合详细介绍

List集合概述

  List集合是一个元素有序(每个元素都有对应的顺序索引,第一个元素索引为0)、且可重复的集合。



一.List集合的特点

1.list集合容器具备增删改查
2.有序
3.元素可重复

package com.liao.tast;
import java.util.ArrayList;
import java.util.List;
/**
 * list集合的特点 
 * 
 * 1.list集合容器具备增删改查
 * 2.有顺序
 * 3.元素可以重复
 * @author liao
 *
 */
public class Dome1 {
  public static void main(String[] args) {
    List list = new ArrayList();
    //增加
    list.add("a");
    list.add("b");
    list.add("c");
    System.out.println(list);
    //删除
    list.remove("b");
    System.out.println(list);
    //修改
    list.set(1, "v");
    //查看
    System.out.println(list);
  }
}


二.遍历方式

1.forir
2.foreach
3.迭代器 iteration

package com.liao.tast;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
/**
 * List的循环方式
 * 1.forir 
 * 2.foreach
 * 3.迭代器 iteration
 * 
 * 
 * @author Administrator
 *
 */
public class Dome2 {
  public static void main(String[] args) {
    List list = new ArrayList();
    // 增加
    list.add("a");
    list.add("b");
    list.add("c");
    // forir遍历
    for (int i = 0; i < list.size(); i++) {
      System.out.println(list.get(i));
    }
    // foreach遍历
    for (Object object : list) {
      System.out.println(object);
    }
    // 迭代器遍历
    Iterator it = list.iterator();
    while (it.hasNext()) {
      System.out.println(it.next());
    }
  }
}



三.LinkedList实现堆栈容器

package com.liao.tast;
/**
 * LinkedList实现堆栈容器
 * @author liao
 *
 */
import java.util.LinkedList;
public class Dome3 {
  public static void main(String[] args) {
    /**
     * LinkedList特点 
     * 链表方式
     * 查询修改速度慢  增加删除快
     * 
     */
    LinkedList ll = new LinkedList();
    //增加
    ll.add("a");
    ll.add("b");
    ll.add("c");
    //实例化DuiZhan
    DuiZhan dz = new DuiZhan(ll);
    //弹栈
    System.out.println(dz.pop());
    System.out.println(dz.pop());
    System.out.println(dz.pop());
  }
}
  //创建一个类DuiZhan
  class DuiZhan {
    private LinkedList ll;
    public DuiZhan(LinkedList ll) {
      super();
      this.ll = ll;
    }
    //压栈 弹栈
    public Object pop(){
      return ll.removeLast();
    }
  }



运行结果:

堆栈特点:先进后出,意思是先进去的数据会最后输出


四.增长因子

1.数组长度不可改变 但是集合长度可以扩容

优化前:数据到达长度上限就会一直增长扩容就会导致会影响性能

package com.liao.tast;
/**
 * list调优
 * ArrayList
 * @author Administrator
 *  ArrayList扩容因子1.5   增长因子0.5
 */
import java.lang.reflect.Field;
import java.util.ArrayList;
//ArrayList特点:查询修改快 增加删除慢
public class Dome4 {
public static void main(String[] args) throws Exception, Exception  {
  //定义ArrayList数组
    //没有优化前
  ArrayList list = new ArrayList();
  for (int i = 0; i < 100; i++) {
    list.add(list);
    System.out.print(i+"\r");
    getCurrentArrayLength(list);
  }
}
//获取当前数组的长度
private static void getCurrentArrayLength(ArrayList list) throws Exception, SecurityException {
  Field f = list.getClass().getDeclaredField("elementData");
  f.setAccessible(true); 
  Object[] object = (Object[]) f.get(list);
  System.out.println("当前容器长度"+object.length);
}
}


运行结果:


优化后:指定长度就可以优化

package com.liao.tast;
/**
 * list调优
 * ArrayList
 * @author Administrator
 *  ArrayList扩容因子1.5   增长因子0.5
 */
import java.lang.reflect.Field;
import java.util.ArrayList;
//ArrayList特点:查询修改快 增加删除慢
public class Dome4 {
public static void main(String[] args) throws Exception, Exception  {
  //定义ArrayList数组
    //优化后
  ArrayList list = new ArrayList(50);//到50在进行扩容
  for (int i = 0; i < 100; i++) {
    list.add(list);
    System.out.print(i+"\r");
    getCurrentArrayLength(list);
  }
}
//获取当前数组的长度
private static void getCurrentArrayLength(ArrayList list) throws Exception, SecurityException {
  Field f = list.getClass().getDeclaredField("elementData");
  f.setAccessible(true); 
  Object[] object = (Object[]) f.get(list);
  System.out.println("当前容器长度"+object.length);
}
}



运行结果:

结论:数组长度每次增加到最大值就会扩容

目录
相关文章
|
1月前
|
存储 Java 索引
(Python基础)新时代语言!一起学习Python吧!(二):字符编码由来;Python字符串、字符串格式化;list集合和tuple元组区别
字符编码 我们要清楚,计算机最开始的表达都是由二进制而来 我们要想通过二进制来表示我们熟知的字符看看以下的变化 例如: 1 的二进制编码为 0000 0001 我们通过A这个字符,让其在计算机内部存储(现如今,A 字符在地址通常表示为65) 现在拿A举例: 在计算机内部 A字符,它本身表示为 65这个数,在计算机底层会转为二进制码 也意味着A字符在底层表示为 1000001 通过这样的字符表示进行转换,逐步发展为拥有127个字符的编码存储到计算机中,这个编码表也被称为ASCII编码。 但随时代变迁,ASCII编码逐渐暴露短板,全球有上百种语言,光是ASCII编码并不能够满足需求
125 4
|
4月前
|
并行计算 Java API
Java List 集合结合 Java 17 新特性与现代开发实践的深度解析及实战指南 Java List 集合
本文深入解析Java 17中List集合的现代用法,结合函数式编程、Stream API、密封类、模式匹配等新特性,通过实操案例讲解数据处理、并行计算、响应式编程等场景下的高级应用,帮助开发者提升集合操作效率与代码质量。
210 1
|
4月前
|
存储 安全 Java
Java 学习路线 35 掌握 List 集合从入门到精通的 List 集合核心知识
本文详细解析Java中List集合的原理、常用实现类(如ArrayList、LinkedList)、核心方法及遍历方式,并结合数据去重、排序等实际应用场景,帮助开发者掌握List在不同业务场景下的高效使用,提升Java编程能力。
374 0
|
存储 安全 Java
【Java集合类面试二十五】、有哪些线程安全的List?
线程安全的List包括Vector、Collections.SynchronizedList和CopyOnWriteArrayList,其中CopyOnWriteArrayList通过复制底层数组实现写操作,提供了最优的线程安全性能。
|
安全
List集合特有功能
List集合特有功能
129 2
【Java集合类面试二十三】、List和Set有什么区别?
List和Set的主要区别在于List是一个有序且允许元素重复的集合,而Set是一个无序且元素不重复的集合。
|
存储 Java
Java学习笔记 List集合的定义、集合的遍历、迭代器的使用
Java学习笔记 List集合的定义、集合的遍历、迭代器的使用
307 4
|
安全 Java 程序员
深入Java集合框架:解密List的Fail-Fast与Fail-Safe机制
本文介绍了 Java 中 List 的遍历和删除操作,重点讨论了快速失败(fail-fast)和安全失败(fail-safe)机制。通过普通 for 循环、迭代器和 foreach 循环的对比,详细解释了各种方法的优缺点及适用场景,特别是在多线程环境下的表现。最后推荐了适合高并发场景的 fail-safe 容器,如 CopyOnWriteArrayList 和 ConcurrentHashMap。
263 5
|
存储 分布式计算 NoSQL
大数据-40 Redis 类型集合 string list set sorted hash 指令列表 执行结果 附截图
大数据-40 Redis 类型集合 string list set sorted hash 指令列表 执行结果 附截图
129 3
|
12月前
|
NoSQL Java Redis
List集合按照由小到大排序或者由大到小排序
List集合按照由小到大排序或者由大到小排序
237 0

热门文章

最新文章