List集合

简介: List集合

集合的特点

1.具备容器基本特点增删改查

2.有序

3.元素可重复

list集合的遍历方式

1.foreach增强for循环

2.迭代器

3.fori通过下标遍历

package collaction;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
public class demo1 {
public static void main(String[] args) {
List list=new ArrayList<>();
list.add("a");
list.add("b");
//foreach
for (Object object : list) {
  System.out.println(object);
}
//迭代器
Iterator it=list.iterator();
while(it.hasNext()) {
  System.out.println(it.next());
}
//fori
for (int i = 0; i < list.size(); i++) {
  System.out.println(list.get(i));
}
}
}

list的子类Arraylist和Linkedlist的区别

Arraylis:数组(如图下)

Linkedlist:链表(如图下)

用linkedList完成一个堆栈容器

package collaction;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.LinkedList;
import java.util.List;
public class demo2 {
public static void main(String[] args) {
LinkedList ll=new LinkedList<>();
ll.add("a");
ll.add("b");
ll.add("c");
DuiZhan dz=new DuiZhan(ll);
//定义一个方法,当这个方法被调用的时候,
//后存进去的元素要先输出,先存进去的元素要后输出
System.out.println(dz.pop());
System.out.println(dz.pop());
System.out.println(dz.pop());
}
}
class DuiZhan{
  private LinkedList ll;
  public DuiZhan(LinkedList ll) {
    super();
    this.ll = ll;
  }
//压栈push 弹栈pop
  public Object pop(){
    return ll.removeLast();
  }
}

增长因子论证(list调优)

1.证明数据结构就是数组

2.为什么数组长度不可变,集合List长度可变

import java.util.ArrayList;
//底层数组的增长因子为0.5,扩容为1.5倍
public class demo3 {
public static void main(String[] args) throws Exception {
ArrayList al =new ArrayList<>(50); //50指第一次扩容的数
for (int i = 0; i < 100; i++) {
al.add(i);
System.out.println(i+"\r");
getCurrentArrayLength(al);
    }
}
//获取ArrayList al对象底层数组的长度
private static void getCurrentArrayLength(ArrayList al) throws Exception{
// TODO Auto-generated method stub
Field f = al.getClass().getDeclaredField("elementData"); 
f.setAccessible(true);
Object[] object =(Object[]) f.get(al); 
System.out.println("当前集合底层数组的容器长度:"+object.length);
    }
}

list去重原理(重写equals;字符串不需要担心会重复)

package collaction;
import java.util.ArrayList;
import java.util.List;
public class demo4 {
  public static void main(String[] args) {
    List list = new ArrayList();
    list.add(new Student(1, "zs")); 
    list.add(new Student(2, "ls")); 
    list.add(new Student(3, "nb"));
    System.out.println("目前集合容器中的元素:"+list);
    if (!list.contains(new Student(3, "nb"))){
    list.add(new Student(3, "nb"));}
    System.out.println("目前集合容器中的元素:"+list);
    }
}
class Student{
  private int id;
  private String name;
  public int getId() {
    return id;
  }
  public void setId(int id) {
    this.id = id;
  }
  public String getName() {
    return name;
  }
  public void setName(String name) {
    this.name = name;
  }
  @Override
  public String toString() {
    return "Student [id=" + id + ", name=" + name + "]";
  }
  public Student(int id, String name) {
    super();
    this.id = id;
    this.name = name;
  }
  public Student() {
    super();
    // TODO Auto-generated constructor stub
  }
  @Override
  public boolean equals(Object obj) {
    System.out.println("被调了");
    if (this == obj)
      return true;
    if (obj == null)
      return false;
    if (getClass() != obj.getClass())
      return false;
    Student other = (Student) obj;
    if (id != other.id)
      return false;
    if (name == null) {
      if (other.name != null)
        return false;
    } else if (!name.equals(other.name))
      return false;
    return true;
  }
}
目录
相关文章
|
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