从零学Java List集合

Java List集合

文章目录

  • Java List集合
    • 1 List 集合
    • 2 List实现类
      • 2.1 ArrayList【重点】
      • 2.2 LinkedList
      • 2.3 Vector (已废弃)
    • 3 数据结构: 栈, 队列

1 List 集合

特点:有序、有下标、元素可以重复。

  • 有序: 添加与遍历的顺序是一致的;
  • 有下标: 可以使用普通for循环;
  • 元素可以重复的

常用方法

  • void add(int index, Object o) //在index位置插入对象o。
  • boolean addAll(int index, Collection c) //将一个集合中的元素添加到此集合中的index位置。
  • Object get(int index) //返回集合中指定位置的元素。
  • List subList(int fromIndex, int toIndex) //返回fromIndex和toIndex之间的集合元素。

eg : 存储字符串(基础数据)

public class TestArrayList {public static void main(String[] args) {//创建List集合List list = new ArrayList();List list1 = new ArrayList();//1 添加单个元素list.add("苹果");list.add("葡萄");list.add("香蕉");list.add("橘子");list.add(0,"榴莲");list1.add("西瓜");list1.add("桃子");System.out.println("元素个数: "+list.size());System.out.println("打印: "+list);//1.1 添加整个List集合list.addAll(list1);System.out.println("添加整个List集合后元素个数: "+list.size());System.out.println("打印: "+list);//2 删除list.remove("苹果");list.remove(3);System.out.println("删除之后: "+list);//2.1 清空System.out.println("清空前: "+list1);list1.clear();System.out.println("清空后: "+list1);//3 遍历//3.1 增强forSystem.out.println("-----增强for-----");for (Object o : list) {System.out.println(o);}//3.2 普通forSystem.out.println("-----普通for-----");for (int i = 0; i < list.size(); i++) {System.out.println(list.get(i));}//3.3 迭代器System.out.println("-----迭代器-----");Iterator it = list.iterator();while (it.hasNext()) {Object next = it.next();System.out.println(next);}/*3.4 列表迭代器可以从前向后,也可以从后向前可以添加,修改,删除元素*///创建列表迭代器, 初始指针在列表首位ListIterator lit = list.listIterator();System.out.println("-----列表迭代器-----");System.out.println("-----正向-----");while (lit.hasNext()) {System.out.println(lit.nextIndex() + "...." + lit.next());}//需要指针在列表最后//ListIterator lit = list.listIterator(list.szie());System.out.println("-----逆向-----");while (lit.hasPrevious()) {System.out.println(lit.previousIndex() + "...." + lit.previous());}//4 判断//4.1 查找目标元素, 返回boolean值System.out.println(list.contains("葡萄"));//4.2 判断列表是否为空, 返回boolean值System.out.println(list.isEmpty());//5 获取//5.1 获取下标System.out.println(list.indexOf("葡萄"));//5.2 获取子集, 指定开始位置和结束位置, 含头不含尾System.out.println(list.subList(2, 5));}
}

eg : 存储对象数据

public class TestList1 {//静态内部类static class Student {String name;int age;public Student(String name, int age) {this.name = name;this.age = age;}//重写toString方法@Overridepublic String toString() {return "Student{" +"name='" + name + '\'' +", age=" + age +'}';}//重写equals方法@Overridepublic boolean equals(Object obj) {if (obj == null) {return false;}if (this == obj) {return true;}if (obj instanceof Student) {Student stu = (Student) obj;return this.name.equals(stu.name) && this.age == stu.age;}return false;}}public static void main(String[] args) {//创建List集合List list = new ArrayList();Student s1 = new Student("张三",18);Student s2 = new Student("李四",26);Student s3 = new Student("王五",21);//1 添加元素list.add(s1);list.add(s2);list.add(s3);System.out.println("元素个数: "+ list.size());System.out.println("元素: "+list);//2 删除, 删除的依据是进行equals()方法
//        list.remove(s1);
//        list.remove(new Student("张三",18));
//        list.remove(0);
//        System.out.println("删除后: "+list);
//        list.clear();//3 遍历//3.1 增强forSystem.out.println("-----增强for-----");for (Object o : list) {System.out.println(o);}//3.2 普通forSystem.out.println("-----普通for-----");for (int i = 0; i < list.size(); i++) {System.out.println(list.get(i));}//3.3 迭代器System.out.println("-----迭代器-----");Iterator it = list.iterator();while (it.hasNext()) {Object next = it.next();System.out.println(next);}/*3.4 列表迭代器可以从前向后,也可以从后向前可以添加,修改,删除元素*///创建列表迭代器, 初始指针在列表首位ListIterator lit = list.listIterator();System.out.println("-----列表迭代器-----");System.out.println("-----正向-----");while (lit.hasNext()) {System.out.println(lit.nextIndex() + "...." + lit.next());}//需要指针在列表最后System.out.println("-----逆向-----");while (lit.hasPrevious()) {System.out.println(lit.previousIndex() + "...." + lit.previous());}//4 判断, 根据equals()方法//4.1 查找目标元素, 返回boolean值System.out.println(list.contains(new Student("李四",26)));//4.2 判断列表是否为空, 返回boolean值System.out.println(list.isEmpty());//5 获取, 根据equals()方法//5.1 获取下标System.out.println(list.indexOf(s3));//5.2 获取子集, 指定开始位置和结束位置, 含头不含尾System.out.println(list.subList(0,2));}
}

2 List实现类

2.1 ArrayList【重点】

特点:

  • 数组结构实现,查询快、增删慢;
  • JDK1.2版本,运行效率快、线程不安全。

ArrayList源码分析:

  • 如果没有向集合中添加任何元素时,容量0,添加一个元素之后,容量扩容为10
  • 每次扩容大小是原来的1.5倍
  • elementData存放元素的数组
  • size 实际元素个数

2.2 LinkedList

特点:

  • 双向链表结构实现,增删快(仅指针的变动),查询慢。

结构图:

在这里插入图片描述

2.3 Vector (已废弃)

特点:

  • 数组结构实现。
  • JDK1.0版本,运行效率慢、线程安全。

3 数据结构: 栈, 队列

栈:是一种先进后出的数据结构。

  • Stack类:继承Vector类
    • push方法入栈、pop方法出栈
  • LinkedList也实现了栈结构

eg:

public class TestStack {public static void main(String[] args) {//栈, 是一种先进后出的数据结构//Stack stack = new Stack();LinkedList stack = new LinkedList();//进栈stack.push("aaa");stack.push("bbb");stack.push("ccc");//出栈int count = stack.size();for (int i = 0; i < count; i++) {System.out.println(stack.pop());}}
}

队列:是一种先进先出的数据结构。

  • Queue接口:继承Collection接口
  • offer方法入队、poll方法出队
  • LinkedList实现了Queue接口

eg:

public class TestQueue {public static void main(String[] args) {//队列, 是一种先进先出的数据结构//创建队列Queue queue = new LinkedList();//进队queue.offer("aaa");queue.offer("bbb");queue.offer("ccc");//出队int count = queue.size();for (int i = 0; i < count; i++) {System.out.println(queue.poll());}}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/337482.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

从生活入手学编程(1):Edge浏览器设置自动刷新专业教程

一、前言 我们都知道&#xff0c;Edge浏览器运行时的速度卡的实在是感人…… 于是今天&#xff0c;我就突发奇想&#xff0c;来看一看怎么刷新并且还能保留页面内容。 二、探索 首先&#xff0c;我在此提醒您&#xff0c;在使用这种方法时要非常小心。因为更改网页源代…

SaaS先驱Salesforce发展史

Salesforce是云计算和SaaS领域的先驱&#xff0c;大致经过5个不同发展阶段 第一个阶段&#xff1a;SaaS CRM发展初期 Salesforce成立时间是1999年&#xff0c;其SaaS业务的Idea的灵感起源于IaaS巨头亚马逊。初期标榜的竞品Siebel早期投入高、很难上手、功能过于复杂、实用性不强…

75应急响应-数据库漏洞口令检索应急取证箱

必要知识点 第三方应用是选择性的安装的&#xff0c;比如mysql&#xff0c;如何做好信息收集&#xff0c;有没有爆过它的漏洞&#xff0c;和漏洞探针也是获取攻击者思路的重要操作&#xff0c;除去本身漏洞外&#xff0c;提前预知或口令相关攻击也要进行筛选。 排除三方应用…

《网络是怎样连接的》2.5节图表(自用)

图5.1&#xff1a;ip包结构 图5.2&#xff1a;ip网络包的传输方式 1.以太网的部分也可以替换成其他的东西&#xff0c;例如无线局域网、ADSL、FTTH等&#xff0c;它们都可以替代以太网的角色帮助IP协议来传输网络包 2.根据ARP协议&#xff0c;客户端可以根据ip地址得到下一个路…

Python如何使用Excel文件

使用Python操作Office——EXCEL 首先介绍下office win32 com接口&#xff0c;这个是MS为自动化提供的操作接口&#xff0c;比如我们打开一个EXCEL文档&#xff0c;就可以在里面编辑VB脚本&#xff0c;实现我们自己的效果。对于这种一本万利的买卖&#xff0c;Python怎么能放过…

白嫖aws创建Joplin server服务器

网上有很多的Joplin服务器的搭建教程&#xff0c;但是基本都是抄来抄去&#xff0c;对初学者实在是太不友好了。 话不多说&#xff0c;说干就干&#xff0c;自己从头找资料搭了一个&#xff0c;这可能是全网最好的Joplin服务器搭建教程了。 aws服务器 aws的服务器还是很香的&…

平衡搜索二叉树(AVL树)

前言 二叉搜索树虽可以缩短查找的效率&#xff0c;但如果数据有序或接近有序二叉搜索树将退化为单支树&#xff0c;查 找元素相当于在顺序表中搜索元素&#xff0c;效率低下。因此&#xff0c;两位俄罗斯的数学家G.M.Adelson-Velskii 和E.M.Landis在1962年 发明了一种解决上述…

宋仕强论道之华强北硬件创新(四十)

我前几天去华强北&#xff0c;看到中电智谷大楼下有一个“硬件创新创业”示范区&#xff0c;我看锁了门应该是项目搞失败了。华强北以前也搞了很多的创新中心&#xff0c;比如什么创业咖啡&#xff0c;基本上以失败告终&#xff0c;我们就应该分析一下原因了。华强北的主要基因…

软件测试|MySQL中的GROUP BY分组查询,你会了吗?

MySQL中的GROUP BY分组查询&#xff1a;详解与示例 在MySQL数据库中&#xff0c;GROUP BY语句用于将数据按照指定的列进行分组&#xff0c;并对每个分组执行聚合函数操作。这就是的我们可以在查询中汇总数据并生成有意义的结果。本文将深入介绍MySQL中的GROUP BY语句&#xff…

第三十八周周报:文献阅读 +BILSTM+GRU+Seq2seq

目录 摘要 Abstract 文献阅读&#xff1a;耦合时间和非时间序列模型模拟城市洪涝区洪水深度 现有问题 提出方法 创新点 XGBoost和LSTM耦合模型 XGBoost算法 ​编辑 LSTM&#xff08;长短期记忆网络&#xff09; 耦合模型 研究实验 数据集 评估指标 研究目的 洪…

深度学习算法应用实战 | 利用 CLIP 模型进行“零样本图像分类”

文章目录 1. 零样本图像分类简介1.1 什么是零样本图像分类?1.2 通俗一点的解释 2. 模型原理图3. 环境配置4. 代码实战5. Gradio前端页面5.1 什么是 Gradio ? 6 进阶操作7. 总结 1. 零样本图像分类简介 1.1 什么是零样本图像分类? “零样本图像分类”&#xff08;Zero-shot …

Spring MVC配置全局异常处理器!!!

为什么要使用全局异常处理器&#xff1a;如果不加以异常处理&#xff0c;错误信息肯定会抛在浏览器页面上&#xff0c;这样很不友好&#xff0c;所以必须进行异常处理。 异常处理思路 系统的dao、service、controller出现都通过throws Exception向上抛出&#xff0c;最后由sp…