集合框架知识总汇之(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集合) 的相关文章

  • 为什么 JTables 使 TableModel 在呈现时不可序列化?

    所以最近我正在开发一个工具 供我们配置某些应用程序 它不需要是什么真正令人敬畏的东西 只是一个具有一些 SQL 脚本生成功能并创建几个 XML 文件的基本工具 在此期间 我使用自己的 AbstractTableModel 实现创建了一系列
  • 为 java 游戏创建交互式 GUI

    大家好 我正在创建一个类似于 java 中的 farmville 的游戏 我只是想知道如何实现用户通常单击以与游戏客户端交互的交互式对象 按钮 我不想使用 swing 库 通用 Windows 看起来像对象 我想为我的按钮导入自定义图像 并
  • 过滤两次 Lambda Java

    我有一个清单如下 1 2 3 4 5 6 7 和 预期结果必须是 1 2 3 4 5 6 7 我知道怎么做才能到7点 我的结果 1 2 3 4 5 6 我也想知道如何输入 7 我添加了i gt i objList size 1到我的过滤器
  • HSQL - 识别打开连接的数量

    我正在使用嵌入式 HSQL 数据库服务器 有什么方法可以识别活动打开连接的数量吗 Yes SELECT COUNT FROM INFORMATION SCHEMA SYSTEM SESSIONS
  • java.lang.IllegalStateException:提交响应后无法调用 sendRedirect()

    这两天我一直在尝试找出问题所在 我在这里读到我应该在代码中添加一个返回 我做到了 但我仍然得到 java lang IllegalStateException Cannot call sendRedirect after the respo
  • jdbc mysql loginTimeout 不起作用

    有人可以解释一下为什么下面的程序在 3 秒后超时 因为我将其设置为在 3 秒后超时 12秒 我特意关闭了mysql服务器来测试mysql服务器无法访问的这种场景 import java sql Connection import java
  • 当 OnFocusChangeListener 应用于包装的 EditText 时,TextInputLayout 没有动画

    不能比标题说得更清楚了 我有一个由文本输入布局包裹的 EditText 我试图在 EditText 失去焦点时触发一个事件 但是 一旦应用了事件侦听器 TextInputLayout 就不再对文本进行动画处理 它只是位于 editText
  • tomcat 中受密码保护的应用程序

    我正在使用 JSP Servlet 开发一个Web应用程序 并且我使用了Tomcat 7 0 33 as a web container 所以我的要求是tomcat中的每个应用程序都会password像受保护的manager applica
  • 如何对不同的参数类型使用相同的java方法?

    我的问题 我有 2 个已定义的记录 创建对象请求 更新对象请求 必须通过实用方法进行验证 由于这两个对象具有相同的字段 因此可以对这两种类型应用相同的验证方法 现在我只是使用两种方法进行重载 但它很冗长 public record Crea
  • 如何访问JAR文件中的Maven资源? [复制]

    这个问题在这里已经有答案了 我有一个使用 Maven 构建的 Java 应用程序 我有一个资源文件夹com pkg resources 我需要从中访问文件 例如directory txt 我一直在查看各种教程和其他答案 但似乎没有一个对我有
  • 尝试将 Web 服务部署到 TomEE 时出现“找不到...的 appInfo”

    我有一个非常简单的项目 用于培训目的 它是一个 RESTful Web 服务 我使用 js css 和 html 创建了一个客户端 我正在尝试将该服务部署到 TomEE 这是我尝试部署时遇到的错误 我在这里做错了什么 刚刚遇到这个问题 我曾
  • java for windows 中的文件图标叠加

    我正在尝试像 Tortoise SVN 或 Dropbox 一样在文件和文件夹上实现图标叠加 我在网上查了很多资料 但没有找到Java的解决方案 Can anyone help me with this 很抱歉确认您的担忧 但这无法在 Ja
  • 关键字“table”附近的语法不正确,无法提取结果集

    我使用 SQL Server 创建了一个项目 其中包含以下文件 UserDAO java public class UserDAO private static SessionFactory sessionFactory static se
  • 如何使用 jUnit 将测试用例添加到套件中?

    我有 2 个测试类 都扩展了TestCase 每个类都包含一堆针对我的程序运行的单独测试 如何将这两个类 以及它们拥有的所有测试 作为同一套件的一部分执行 我正在使用 jUnit 4 8 在 jUnit4 中你有这样的东西 RunWith
  • 如何匹配 R 中的所有匹配项?

    我有 1000 个名字的列表 说A 我还有另外 5 个名字的清单 说B 我想找出这5个名字出现在1000个号码列表中的第几行 例如 Amy 在 A 中可以出现 25 次 B 里有艾米 我想知道 Amy 出现在 A 中的哪些行 我以前使用过
  • Android:无法使用 DbHelper 和 Contract 类将数据插入 SQLite

    public class Main2Activity extends AppCompatActivity private EditText editText1 editText2 editText3 editText4 private Bu
  • C#:帮助理解 UML 类图中的 <>

    我目前正在做一个项目 我们必须从 UML 图编写代码 我了解 UML 类图的剖析 但我无法理解什么 lt
  • 长轮询会冻结浏览器并阻止其他 ajax 请求

    我正在尝试在我的中实现长轮询Spring MVC Web 应用程序 http static springsource org spring docs 2 0 x reference mvc html但在 4 5 个连续 AJAX 请求后它会
  • 使用 CXF-RS 组件时,为什么我们使用 而不是普通的

    作为后续这个问题 https stackoverflow com questions 20598199 对于如何正确使用CXF RS组件我还是有点困惑 我很困惑为什么我们需要
  • 如果没有抽象成员,基类是否应该标记为抽象?

    如果一个类没有抽象成员 可以将其标记为抽象吗 即使没有实际理由直接实例化它 除了单元测试 是的 将不应该实例化的基类显式标记为抽象是合理且有益的 即使在没有抽象方法的情况下也是如此 它强制执行通用准则来使非叶类抽象 它阻止其他程序员创建该类

随机推荐