我们之前使用数组的时候,总是要声明数组的空间,但是数组的大小一旦申请完空间,就无法改动了,数组毕竟是一个静态的数据结构,这使得我们的增删改查也有很大的限制,为了防止数据溢出,我们总是会多定义几个空间,但是有没有一种办法使我们不用自己另外给数组添加空间呢?
我们来试试集合
一、Java的集合框架与结构
-
Java中的集合框架是指一系列存储数据的接口和类,这些接口和类都存放在 util包中
-
有了集合框架我们就可以解决复杂的数据存储问题
下面是一张Java集合框架的思维导图,可以帮助大家理解
1.1 List接口
通过上面的思维导图我们可以知道,List接口是通过Collection接口实现的
1.1.1 List 接口的特点
-
存储的数据有序
-
可以保存重复的元素
1.1.2 List 接口常用方法
-
Lsit 常用子类有: ArrayList 和 Vector
-
ArrayList 用法类似数组,其容量会按照实际情况动态调整,所以也称为动态数组
-
Vector 也称为动态数组,但是和ArrayList类有些区别
下面给大家分享一些list的常用方法,直接上代码
/**
-
@author gorit
-
@date 2019年4月15日20:39:08
-
@missson Java中List接口的复习巩固
-
*/
import java.util.*;//*包含了util中的的所有包,ArrayList 是其中的一种
import com.zrgj.list.pojo.Student;
public class Test {
public static void main(String[] args) {
//集合,动态数组
List list=new ArrayList();
Student stu=new Student(null, 0, null);//这里用的是OOP编程中的学生类的有参构造方法
list.add(1);//add里的参数是Object 是所有子类的父类,所有这里可以传递数字,字符,对象
list.add(“aa”);
list.add(“bb”);
list.add(“\n”);
list.add(stu);//我们在集合还可以传入对象,但是打印的时候回打印其所在地址
list.add(“p”);
list.remove(“aa”);//删除元素
System.out.println(“集合的长度:”+list.size());
for (int i = 0; i < list.size(); i++) {//这里求集合的长度要用到.size方法,这和前面的.length有点区别
System.out.println(list.get(i));//通过索引值获得指定元素德伟值
}
list.removeAll(list);//删除集合中的所有元素
}
}
Tips:在第一行中的
List list=new ArrayList();
中,我们没有指定 List 的数据类型,所以它会默认为Object 类,“”Object“”类是所有类型的父类,所以在上面的代码,我可以往集合中添加整数,字符(串)、类、甚至boolean 都可以,但是我们一般使用集合的时候都会给限定数据类型,看下面这段代码
加了限制之后,我们只能传入字符串了,这样做的话我们就可以使我们的输入有更多的便捷了
下面来说里一个 List 接口的子类
1.1.3 LinkedList类
-
LinkedList 表示链表的操作类,它同时实现 List 和 Queue(队列)接口
-
LinkedList 中的数据按照先进先出(FIFO)的方式排序
代码示例:
import java.util.*;//*包含了util中的的所有包,ArrayList 是其中的一种
public class Test {
public static void main(String[] args) {
LinkedList list=new LinkedList();//LinkedList 也在util包中
list.add(“a”);
list.add(“ava”);
list.add(123);
list.addFirst(“我是头”);
list.addLast(“我是尾巴”);
list.remove(“ava”);
for (int i = 0; i < list.size(); i++) {
System.out.println(list.get(i));
}
}
}
其实这里大部分的功能和 ArrayList 相似,其实也不必特意去记,代码不全会告诉我们有哪些方法,我们点击该方法还能看到该方法使用的“方法”,写的很直观了
补充一下,如果我们想要直接看到集合中所有的元素,可以直接打印 list(之前我们创建的一个对象)
1.1.4 Vector类
-
Vector类能够实现可增长的对象数组(Java对象数组的讲解)
-
其大小可以根据需要增大或缩小
示例:
import java.util.*;//*包含了util中的的所有包,Vector 是其中的一种
public class Test {
public static void main(String[] args) {
List list=new Vector();
list.add(1);
list.add(“234”);
list.add(“a”);
System.out.println(list);
}
}
1.1.5 ArrayList 和 Vector作比较
| ArrayList | Vector |
| — | — |
| 当元素达到指定容量,自动增长原容量的百分之50 | 当元素达到指定容量,自动增加一倍 |
| 非线程安全且性能更高 | 线程安全但性能较低 |
2.1 Set 接口
特点~
-
Set接口存储顺序是无序的
-
无法重复添加重复元素
2.1.1 HashSet 类讲解
直接上代码:
import java.util.*;//*包含了util中的的所有包,Set 是其中的一种
public class Test {
public static void main(String[] args) {
Set s=new HashSet();
s.add(“aa”);
s.add(“bb”);
s.add(1);
s.add(2);
Iterator it=s.iterator();//iterator 称之为迭代器,我们创建一个迭代对象,然后返回集合set中的元素,这里是不支持上面的 get()方法的,所以要用迭代器来返回迭代对象
while (it.hasNext()) {
System.out.println(it.next());
}
}
}
这里还提供了很多其他的方法,比如判断是否为空,返回的是一个布尔值,集合置空等等功能
2.1.2 小总结(List 类 Set 类 Map类的特点)
-
List类 :元素按顺序存放,而且元素可以重复
-
Set类 :元素不按照顺序存放,而且还不能重复,每个元素的数据存放的位置是由该元素的Hashcode唯一决定,所以在集合中的位置也是固定的
-
Map类: 它通过==键 : 值(key : Value)==来存放数据,而且也是没有顺序的
2.1.3 Map的常用子类
-
HashMap
-
Hashtable
声明方法:
Map map=new Map();
示例代码:
import java.util.*;//*包含了util中的的所有包,ArrayList 是其中的一种
public class Test {
public static void main(String[] args) {
Map map=new HashMap();
map.put(“2”, 3);//这里有两个值,左边存放键,右边存放值
map.put(11, “Hello”);
map.put(null, null);//空键,空值也可以存在
map.put(“price”, 20);
map.put(“price”, 44);//键值可以相同
Collection c=map.values();//取出所有value值
最后
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
深知大多数Java工程师,想要提升技能,往往是自己摸索成长,自己不成体系的自学效果低效漫长且无助。
因此收集整理了一份《2024年Java开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,不论你是刚入门Java开发的新手,还是希望在技术上不断提升的资深开发者,这些资料都将为你打开新的学习之门!
如果你觉得这些内容对你有帮助,需要这份全套学习资料的朋友可以戳我获取!!
由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!
担。**
[外链图片转存中…(img-5WMMngSP-1715779393489)]
[外链图片转存中…(img-p3mKkRqx-1715779393489)]
[外链图片转存中…(img-8qQJIx8l-1715779393489)]
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,不论你是刚入门Java开发的新手,还是希望在技术上不断提升的资深开发者,这些资料都将为你打开新的学习之门!
如果你觉得这些内容对你有帮助,需要这份全套学习资料的朋友可以戳我获取!!
由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!