集合框架知识总汇之(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中将新建的对象的属性都进行了判断当属性一直的时候,就会去重

目录
相关文章
|
2月前
|
存储 安全 Java
【Java集合类面试二十五】、有哪些线程安全的List?
线程安全的List包括Vector、Collections.SynchronizedList和CopyOnWriteArrayList,其中CopyOnWriteArrayList通过复制底层数组实现写操作,提供了最优的线程安全性能。
|
2月前
|
安全
List集合特有功能
List集合特有功能
33 2
|
2月前
|
Java
【Java集合类面试二十三】、List和Set有什么区别?
List和Set的主要区别在于List是一个有序且允许元素重复的集合,而Set是一个无序且元素不重复的集合。
|
7天前
|
NoSQL Java Redis
List集合按照由小到大排序或者由大到小排序
List集合按照由小到大排序或者由大到小排序
10 3
|
2月前
|
Java
用JAVA架建List集合为树形结构的代码方法
这段代码定义了一个表示树形结构的 `Node` 类和一个用于构建树形结构的 `TreeController`。`Node` 类包含基本属性如 `id`、`pid`、`name` 和 `type`,以及子节点列表 `children`。`TreeController` 包含初始化节点列表并将其转换为树形结构的方法。通过过滤和分组操作实现树形结构的构建。详情可见:[代码示例链接1](http://www.zidongmutanji.com/zsjx/43551.html),[代码效果参考链接2](https://www.257342.com/sitemap/post.html)。
32 5
|
2月前
|
测试技术 索引 Python
Python接口自动化测试框架(基础篇)-- 常用数据类型list&set()
本文介绍了Python中list和set两种数据类型的使用,包括它们的创建、取值、增删改查操作、排序以及内置函数的使用,还探讨了list的比较函数和set的快速去重功能。
20 0
|
4月前
|
安全 Java
java线程之List集合并发安全问题及解决方案
java线程之List集合并发安全问题及解决方案
572 1
|
3月前
|
Java API Apache
怎么在在 Java 中对List进行分区
本文介绍了如何将列表拆分为给定大小的子列表。尽管标准Java集合API未直接支持此功能,但Guava和Apache Commons Collections提供了相关API。
|
3月前
|
运维 关系型数据库 Java
PolarDB产品使用问题之使用List或Range分区表时,Java代码是否需要进行改动
PolarDB产品使用合集涵盖了从创建与管理、数据管理、性能优化与诊断、安全与合规到生态与集成、运维与支持等全方位的功能和服务,旨在帮助企业轻松构建高可用、高性能且易于管理的数据库环境,满足不同业务场景的需求。用户可以通过阿里云控制台、API、SDK等方式便捷地使用这些功能,实现数据库的高效运维与持续优化。
|
3月前
|
存储 安全 Java
详解Java中集合的List接口实现的ArrayList方法 | Set接口实现的HashSet方法
详解Java中集合的List接口实现的ArrayList方法 | Set接口实现的HashSet方法