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);
}
}



运行结果:

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

目录
相关文章
|
6天前
|
Dart
Dart之集合详解(List、Set、Map)
Dart之集合详解(List、Set、Map)
10 1
|
6天前
|
安全 Java
java线程之List集合并发安全问题及解决方案
java线程之List集合并发安全问题及解决方案
11 1
|
18天前
|
索引
List集合(方法简介,集合遍历)
List集合(方法简介,集合遍历)
|
6天前
|
存储 消息中间件 算法
Java中的集合框架详解:List、Set、Map的使用场景
Java中的集合框架详解:List、Set、Map的使用场景
|
4天前
|
存储 API Kotlin
Kotlin中的List集合
Kotlin中的List集合
12 2
|
14天前
|
存储 Java 索引
告别Java集合小白!一文读懂List的精髓
【6月更文挑战第17天】Java中的List接口作为有序集合,允许存储和操作有序元素,支持重复值。ArrayList和LinkedList是常见实现类:ArrayList基于数组,适合快速访问但插入删除慢;LinkedList基于链表,插入删除快但访问慢。了解其核心概念、方法及泛型使用,能提升编程效率和代码质量。示例代码展示了添加和访问元素。通过深入学习,可以更好地掌握List的高级用法。
|
20天前
|
存储 安全 Java
Java集合详解:Set, Map, Vector, List的对比与联系
Java集合框架核心包括List、Set、Map和Vector。List允许重复元素,如ArrayList(适合读取)和LinkedList(适合插入删除)。Set不允许重复,有HashSet(无序)和TreeSet(排序)。Map存储键值对,HashMap(无序)和TreeMap(排序)。Vector是线程安全的ArrayList替代品,但在多线程环境下使用。选择集合类型应根据应用场景,如有序、无序、键值对需求及线程安全考虑。
|
23天前
|
存储 安全 Java
Java 集合(List、Set、Map 等)相关问答归纳再整理
HashMap 中使用键对象来计算 hashcode 值 HashSet 使用成员对象来计算 hashcode 值,对于两个对象来说hashcode 可能相同,所以 equals() 方法用来判断对象的相等性,如果两个对象不同的话,那么返回 false。 HashMap 比较快,因为是使用唯一的键来获取对象,HashSet 较 HashMap 来说比较慢。 4.1.3 HashMap 与 TreeMap
13 2
|
24天前
|
Java 索引
JavaSE——集合框架一(3/7)-List系列集合:特点、方法、遍历方式、ArrayList集合的底层原理
JavaSE——集合框架一(3/7)-List系列集合:特点、方法、遍历方式、ArrayList集合的底层原理
22 2
|
4天前
|
存储 Dart
Dart中的集合类型:List(数组/列表)
Dart中的集合类型:List(数组/列表)
6 0