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

2023-11-09

目录

、​编辑

1.UML 统一建模语 :

3.List集合:

3.1特点:

3.2遍历方式:

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

        3.4LinkedList(队列&堆栈)

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


面试常问题: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中将新建的对象的属性都进行了判断当属性一直的时候,就会去重

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

集合框架知识总汇之(list集合) 的相关文章

  • 如何在 Java 中访问嵌套的 HashMap?

    我有一个 Java 中的 HashMap 其中的内容 你们可能都知道 可以通过以下方式访问 HashMap get keyname 如果一个 HashMap 位于另一个 HashMap 中 即嵌套的 HashMap 我将如何访问内容 我可以
  • 是否可以创建根据输入对象名称自行命名的列表?

    能够创建 R 列表对象而无需指定每个元素的名称对我来说非常有帮助 例如 a1 lt 1 a2 lt 20 a3 lt 1 20 b lt list a1 a2 a3 inherit name TRUE gt b a1 1 1 a2 1 20
  • 迁移到Java 9或更高版本时是否需要切换到模块?

    我们目前正在从 Java 8 迁移到 Java 11 但是 升级我们的服务并没有我们预期的那么痛苦 我们基本上只需要更改我们的版本号build gradle文件和服务都顺利启动并运行 我们升级了库以及使用这些库的 微 服务 到目前为止没有问
  • javax.persistence.RollbackException:提交事务时出错],根本原因是 java.lang.StackOverflowError:null

    我有一个使用 Spring Data REST 框架的 Spring Boot API 从 spring boot starter parent 2 1 0 RELEASE 继承的依赖项 我正在尝试执行 PUT 或 PATCH 请求来更新实
  • OpenNLP 与斯坦福 CoreNLP

    我一直在对这两个包进行一些比较 但不确定该往哪个方向走 我简单地寻找的是 命名实体识别 人 地点 组织等 性别识别 一个不错的训练 API 据我所知 OpenNLP 和斯坦福 CoreNLP 提供了非常相似的功能 然而 Stanford C
  • 关于Java泛型的一些问题

    假设我有以下接口和实现类 interface Foo
  • maven 无法下载 jacoco 0.7.10-SNAPSHOT jar

    我对此感到困惑 我的 pom xml 中有这个
  • Java 中的 ExecuteUpdate sql 语句不起作用

    我正在学习如何将 SQL 与 Java 结合使用 我已成功安装 JDBC 驱动程序 并且能够从数据库读取记录并将其打印在屏幕上 我的问题发生在尝试执行更新或插入语句时 没有任何反应 这是我的代码 问题所在的方法 public static
  • 将现有 eclipse 项目导出到 war 文件时出现“模块名称无效”

    我正在尝试将现有 Eclipse 项目导出到 war 文件 但无论我在 WAR Export 对话框页面中输入什么 系统总是返回 模块名称无效 我不知道如何解决这个问题 谢谢您的帮助 我有同样的问题 我修复了它 请按照以下步骤操作 您可以创
  • 从 HttpClient 3 转换为 4

    我已经成功地对所有内容进行了更改 但以下内容除外 HttpClient client HttpPost method client new DefaultHttpClient method new HttpPost url InputStr
  • 从 Android 访问云存储

    我一直无法找到任何有关如何从 Android 应用程序使用云存储的具体文档 我确实遇到过这个客户端库 https cloud google com storage docs reference libraries然而 Google Clou
  • Android 解析 JSON 卡在 get 任务上

    我正在尝试解析一些 JSON 数据 我的代码工作了一段时间 我不确定我改变了什么突然破坏了代码 当我运行代码时 我没有收到任何运行时错误或警告 我创建一个新的 AsyncTask 并执行它 当我打电话时 get 在这个新任务中 调试器在此行
  • 字典的嵌套列表

    我正在尝试创建dict通过嵌套list groups Group1 A B Group2 C D L y x 0 for y in x if y x 0 for x in groups d k v for d in L for k v in
  • Jetty Plugin 9启动不喜欢icu4j-2.6.1.jar

    我对 mortbay 的 Maven jetty 插件 6 有相同的配置
  • Java和手动执行finalize

    如果我打电话finalize 在我的程序代码中的一个对象上 JVM当垃圾收集器处理这个对象时仍然再次运行该方法吗 这是一个大概的例子 MyObject m new MyObject m finalize m null System gc 是
  • 从浏览器访问本地文件?

    您好 我想从浏览器访问系统的本地文件 由于涉及大量安全检查 是否可以通过某种方式实现这一目标 或使用 ActiveX 或 Java Applet 的任何其他工作环境 请帮帮我 要通过浏览器访问本地文件 您可以使用签名的 Java Apple
  • Java String ReplaceAll 方法给出非法重复错误?

    我有一个字符串 当我尝试运行时replaceAll方法 我收到这个奇怪的错误 String str something op str str replaceAll o n it works fine str str replaceAll n
  • 如何将库添加到 LIBGDX 项目的依赖项 gradle

    一切都在问题中 我已经尝试了在 SO 和其他网站中找到的所有答案 但没有运气 这就是我迄今为止尝试过的 adding compile fileTree dir lib include jar 到我的 build gradle adding
  • 使用 AmazonSNSClient 发送短信时的授权

    aws 官方文档如何发送短信 http docs aws amazon com sns latest dg sms publish to phone html使用 java 中的 aws SDK 非常简单 但是 当发送如底部示例所示的消息时
  • 将数组值导出到 csv 文件 java

    我只需要帮助将数组元素导出到 csv 文件 我不知道我的代码有什么问题 任何帮助将不胜感激 谢谢 for int index 0 index lt cols length index FileWriter fw new FileWriter

随机推荐