集合框架知识总汇之(list集合)

简介: 集合框架知识总汇之(list集合)

面试常问题:1.Collection是List,Set,Map的父类吗?Collection是List,Set的父类,但不是Map                        集合的父类。

                     2.集合是什么?集合同常被理解为一个容器。学习集合框架就是了解容器的数据结构(增删改查)

                    3.ArrayList集合 与 LinkedList 区别 ?

                       ArrayList特点:查看修改快,新增删除慢。

                       LinkedList特点:查看修改慢,新增删除快。

1.UML 统一建模语 :

       1.1.分类:类图(以上图为类图),

       1.2.用例图(具体划分到每个职责,这在做项目时会经常用到);

2.子类继承父类的所有属性和方法同时可以增加自己的属性和方法。

3.List集合:

3.1特点:

      A.有序

       B.对象可以重复

3.2遍历方式:

      a.foreach

       b.fori

       c.Iterator(迭代器)

public static void main(String[] args) {
        ArrayList list=new ArrayList<>();
//      增加
        list.add("张三a");
        list.add("张三b");
        list.add("张三b");
        list.add("张三c");
        list.add("张三d");
//      修改
        list.set(0, "老六");
        for (Object object : list) {
        System.out.println(object);
        }
        System.out.println("--------------");
//      删除
        Object obj2 = list.remove(0);
        for (Object object : list) {
        System.out.println(object);
        }
         System.out.println("--------------");
//      查询(三种方式)
//      ①
        for (Object object : list) {
            System.out.println(object);
        }
        System.out.println("--------------");
//      ②
        for (int i = 0; i < list.size(); i++) {
            System.out.println(list.get(i));
        }
        System.out.println("--------------");
    //调用list中iterator方法
        Iterator itt =  list.iterator();
        while(itt.hasNext()) {
            System.out.println(itt.next());
        }
    }

3.3List优化 ( 初始容量10,负载因子1.5 )

    作为数组而言:下标不能超越定义的范围,而集合长度却是没有范围限制的。 由于list集合底层是数组,当我们每次添加到list集合中就会改变集合的容量。所以我们把list初始容量调高就会提升运行的效率。

import java.lang.reflect.Field;
import java.util.ArrayList;
public class myproject {
  public static void main(String[] args) throws Exception {
    ArrayList<Object> list=new ArrayList<>(50);
    for (int i = 0; i < 100; i++) {
      list.add(i);
      huoqu(list);
    }
  }
  private static void huoqu(ArrayList<Object> list) throws Exception{
    Field f= list.getClass().getDeclaredField("elementData");
    f.setAccessible(true);
    Object[] elementData=(Object[])f.get(list);
    System.out.println("当前集合的元素个数:"+list.size()+";当前list集合的容量是:"+elementData.length);
  }
}

我们先给定arraylist初始容量为50,当添加的值大于50时容量添加至75,所以推出arraylist的增长因子是1.5

3.4LinkedList(队列&堆栈)

       ①队列&堆栈区别:队列:先进先出

                                      堆栈:先进后出

我们可以把堆栈想象成给P90装子弹,先装的就会后打出去。而队列则相反。

3.5如何对Arraylist进行去重处理?

1.一般我们会用从if+contains来去重。但我们测试:

//Person对象类
class Person{
  private String name;
  private int age;
  public String getName() {
    return name;
  }
  public void setName(String name) {
    this.name = name;
  }
  public int getAge() {
    return age;
  }
  public void setAge(int age) {
    this.age = age;
  }
  @Override
  public String toString() {
    return "Person [name=" + name + ", age=" + age + "]";
  }
  public Person(String name, int age) {
    super();
    this.name = name;
    this.age = age;
  }
  public Person() {
    // TODO Auto-generated constructor stub
  }
}
import java.util.ArrayList;
public class demo2 {
  public static void main(String[] args) {
    ArrayList list = new ArrayList<>();
    // 新增
    list.add(new Person("aa", 1));
    list.add(new Person("bb", 2));
    list.add(new Person("cc", 3));
    list.add(new Person("dd", 4));
    System.out.println(list);
    // 这里我们得到的是4个:[Person [name=aa, age=1], Person [name=bb, age=2], Person
    // [name=cc, age=3], Person [name=dd, age=4]]
    ArrayList listnew = new ArrayList<>();
    for (Object object : list) {
      if (!listnew.contains(object)) {
        listnew.add(object);
      }
    }
    System.out.println(listnew);
    // 这里我们得到的还是4个:[Person [name=aa, age=1], Person [name=bb, age=2], Person
    // [name=cc, age=3], Person [name=dd, age=4]]
  }
}

所以这里使用contain方法行不通!!!

这里我们可以用重新equals方法。

//Person对象类
class Person{
  private String name;
  private int age;
  public String getName() {
    return name;
  }
  public void setName(String name) {
    this.name = name;
  }
  public int getAge() {
    return age;
  }
  public void setAge(int age) {
    this.age = age;
  }
  @Override
  public String toString() {
    return "Person [name=" + name + ", age=" + age + "]";
  }
  public Person(String name, int age) {
    super();
    this.name = name;
    this.age = age;
  }
  public Person() {
    // 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;
    Person other = (Person) obj;
    if (age != other.age)
      return false;
    if (name == null) {
      if (other.name != null)
        return false;
    } else if (!name.equals(other.name))
      return false;
    return true;
  }
}

此时在运行就达到去重效果了。

为啥重写equles就能够去重?因为equals中将新建的对象的属性都进行了判断当属性一直的时候,就会去重

目录
相关文章
|
12天前
|
存储 Java 索引
(Python基础)新时代语言!一起学习Python吧!(二):字符编码由来;Python字符串、字符串格式化;list集合和tuple元组区别
字符编码 我们要清楚,计算机最开始的表达都是由二进制而来 我们要想通过二进制来表示我们熟知的字符看看以下的变化 例如: 1 的二进制编码为 0000 0001 我们通过A这个字符,让其在计算机内部存储(现如今,A 字符在地址通常表示为65) 现在拿A举例: 在计算机内部 A字符,它本身表示为 65这个数,在计算机底层会转为二进制码 也意味着A字符在底层表示为 1000001 通过这样的字符表示进行转换,逐步发展为拥有127个字符的编码存储到计算机中,这个编码表也被称为ASCII编码。 但随时代变迁,ASCII编码逐渐暴露短板,全球有上百种语言,光是ASCII编码并不能够满足需求
78 3
|
3月前
|
并行计算 Java API
Java List 集合结合 Java 17 新特性与现代开发实践的深度解析及实战指南 Java List 集合
本文深入解析Java 17中List集合的现代用法,结合函数式编程、Stream API、密封类、模式匹配等新特性,通过实操案例讲解数据处理、并行计算、响应式编程等场景下的高级应用,帮助开发者提升集合操作效率与代码质量。
160 1
|
3月前
|
存储 安全 Java
Java 学习路线 35 掌握 List 集合从入门到精通的 List 集合核心知识
本文详细解析Java中List集合的原理、常用实现类(如ArrayList、LinkedList)、核心方法及遍历方式,并结合数据去重、排序等实际应用场景,帮助开发者掌握List在不同业务场景下的高效使用,提升Java编程能力。
323 0
|
12月前
|
安全 Java 程序员
深入Java集合框架:解密List的Fail-Fast与Fail-Safe机制
本文介绍了 Java 中 List 的遍历和删除操作,重点讨论了快速失败(fail-fast)和安全失败(fail-safe)机制。通过普通 for 循环、迭代器和 foreach 循环的对比,详细解释了各种方法的优缺点及适用场景,特别是在多线程环境下的表现。最后推荐了适合高并发场景的 fail-safe 容器,如 CopyOnWriteArrayList 和 ConcurrentHashMap。
256 5
|
11月前
|
NoSQL Java Redis
List集合按照由小到大排序或者由大到小排序
List集合按照由小到大排序或者由大到小排序
213 0
|
安全 Java
java线程之List集合并发安全问题及解决方案
java线程之List集合并发安全问题及解决方案
1304 1
|
Java API Apache
怎么在在 Java 中对List进行分区
本文介绍了如何将列表拆分为给定大小的子列表。尽管标准Java集合API未直接支持此功能,但Guava和Apache Commons Collections提供了相关API。
352 1
|
运维 关系型数据库 Java
PolarDB产品使用问题之使用List或Range分区表时,Java代码是否需要进行改动
PolarDB产品使用合集涵盖了从创建与管理、数据管理、性能优化与诊断、安全与合规到生态与集成、运维与支持等全方位的功能和服务,旨在帮助企业轻松构建高可用、高性能且易于管理的数据库环境,满足不同业务场景的需求。用户可以通过阿里云控制台、API、SDK等方式便捷地使用这些功能,实现数据库的高效运维与持续优化。
|
存储 安全 Java
详解Java中集合的List接口实现的ArrayList方法 | Set接口实现的HashSet方法
详解Java中集合的List接口实现的ArrayList方法 | Set接口实现的HashSet方法
253 3
|
Java API
使用 Java 来实现两个 List 的差集操作
使用 Java 来实现两个 List 的差集操作
933 3