linux教程第四版答案孟庆昌,Java集合讲解(2)

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类

示例:

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值

Set s=map.keySet();

//刚刚讲过迭代器,这里还需要迭代器才能获取数据

Iterator it=c.iterator();//打印键

Iterator it1=s.iterator();//打印值

while(it.hasNext()) {

System.out.println(“键”+it.next());

System.out.println(“值”+it1.next());

}

System.out.println(map);

}

}

在这里插入图片描述

2.1.4 Iterator迭代器讲解

在前面的 List中,传入的数据是可以通过 get() 获得的,但是到了 Set 中,我们发现没有 get() 方法了,这个时候Java提供了 Iterator迭代器供我们使用

Iterator 是对集合进行迭代的迭代器,通过迭代器我们可以对集合进行遍历,我们如果需要输出集合的元素

//HashSet情况

Set s=new HashSet();

//迭代HashSet

Iterator it=s.HashSet();

while(it.hasNext()) {//判断是否有元素

System.out.println(it.next());//返回下一个迭代对象

}

//Map 情况

上面的代码就是很好的实例

文章编辑于

2019年4月16日00:37:07

3.1 泛型

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数Java工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年Java开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,真正体系化!

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!

如果你觉得这些内容对你有帮助,可以扫码获取!!(备注Java获取)

img

总结

上述知识点,囊括了目前互联网企业的主流应用技术以及能让你成为“香饽饽”的高级架构知识,每个笔记里面几乎都带有实战内容。

很多人担心学了容易忘,这里教你一个方法,那就是重复学习。

打个比方,假如你正在学习 spring 注解,突然发现了一个注解@Aspect,不知道干什么用的,你可能会去查看源码或者通过博客学习,花了半小时终于弄懂了,下次又看到@Aspect 了,你有点郁闷了,上次好像在哪哪哪学习,你快速打开网页花了五分钟又学会了。

从半小时和五分钟的对比中可以发现多学一次就离真正掌握知识又近了一步。

人的本性就是容易遗忘,只有不断加深印象、重复学习才能真正掌握,所以很多书我都是推荐大家多看几遍。哪有那么多天才,他只是比你多看了几遍书。

《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!
忘,这里教你一个方法,那就是重复学习。**

打个比方,假如你正在学习 spring 注解,突然发现了一个注解@Aspect,不知道干什么用的,你可能会去查看源码或者通过博客学习,花了半小时终于弄懂了,下次又看到@Aspect 了,你有点郁闷了,上次好像在哪哪哪学习,你快速打开网页花了五分钟又学会了。

从半小时和五分钟的对比中可以发现多学一次就离真正掌握知识又近了一步。

[外链图片转存中…(img-fWFKDBGl-1713468104843)]

人的本性就是容易遗忘,只有不断加深印象、重复学习才能真正掌握,所以很多书我都是推荐大家多看几遍。哪有那么多天才,他只是比你多看了几遍书。

《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!

  • 19
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值