java进阶----集合
1、 集合弥补了数组的缺陷,它比数组更灵活实用,而且不同的集合适用于不同场合。
2、 Java集合框架共有3大类接口,即Map接口、List接口和Set接口。
3、 ArrayList和数组采用相同的存储方式,它的特点是长度可变且可以存储任何类型的数据,它的优点在于遍历元素和随机访问元素的效率较高。
4、 LinkedList类采用链表存储方式,优点在于插入、删除元素时效率较高。
5、 Iterator为集合而生,专门实现集合的遍历,它隐藏了各种集合实现类的内部细节,提供了遍历集合的统一编程接口。
6、 HashMap类是最常用的Map实现类,它的特点是存储键值对数据,优点是查询指定元素效率高。
7、 泛型的本质是参数化类型,也就是说所操作的数据类型被指定为一个参数,使代码可以应用于多种数据类型。
8、 使用泛型集合在创建集合对象时指定集合中元素的类型,从集合中取出元素时无需进行强制类型转换。
9、 在集合中使用泛型只是泛型多种应用的一种,在接口、类、方法等方面也有着泛型的广泛应用。
10、 如果数据类型不确定,可以通过泛型方法的方式,达到简化代码、提高代码重用性的目的。
4.1为什么使用集合框架
5 总结之前的储存数据的容器
package cn.bdqn.demo01;
public class Demo01 {
public static void main(String[] args) {
/*
* 凡是能够用来存储数据的都可以看成是容器:
*
* 变量:存储数据的空间(装数据的容器),一个变量中只能存储一个数据
* 数组:存储数据的空间(装数据的容器),一个数组中可以存储多个相同类型的数据
* 对象:可以理解成存储数据的空间(装数据的容器),一个对象可以拥有不同类型的属性,从而达到存储不同类型数据的目的
* 集合:存储数据的空间(装数据的容器),一个集合中可以存储多个不同类型的数据
* 计算机中的文件:将数据通过IO流存储到计算机的某个文件中
* XML:从计算机的XML文件中读取数据或者存储数据到XML文件中
* 数据库:专门用来存储和管理数据的软件
*
*/}
}
5.1Java集合框架包含的内容2-2
5.2 学会查看API
5.3 ArrayList集合类 === Set接口
新闻管理系统,需求如下
可以存储各类新闻标题(包含ID、名称、创建者)
可以获取新闻标题的总数
可以逐条打印每条新闻标题的名称
3.1新闻类:
package cn.bdqn.demo02;public class NewsTitle {private int id;private String name;private String author;public NewsTitle() {super();}public NewsTitle(int id, String name, String author) {super();this.id = id;this.name = name;this.author = author;}public int getId() {return id;}public void setId(int id) {this.id = id;}public String getName() {return name;}public void setName(String name) {this.name = name;}public String getAuthor() {return author;}public void setAuthor(String author) {this.author = author;}@Overridepublic String toString() {return "NewsTitle [id=" + id + ", name=" + name + ", author=" + author+ "]";}}
3.2创建类对象
package cn.bdqn.demo02;import java.util.ArrayList;
import java.util.Iterator;public class ArrayListDemo01 {public static void main(String[] args) {//创建3个NewsTitle类对象NewsTitle nt1 = new NewsTitle(1001, "以武力吞请入俄新动作", "前沿时刻");NewsTitle nt2 = new NewsTitle(1002, "没想到,“裁”这么快就来了", "表哥聊科技");NewsTitle nt3 = new NewsTitle(1003, "再过4天,要放7天假", "北大青鸟合肥一元教育");//数据准备好了,接下来要准备一个集合容器,使用ArrayListArrayList al = new ArrayList();
//将数据存储到集合中,使用ArrayList类中的add()方法将数据存储到集合中
al.add(nt1);
al.add(nt2);
al.add(nt3);
---------------> al.add(nt2);
//将数据存储到集合中的指定位置:add(int index,Object obj)
al.add(2, nt1)
3.3 接下来对集合中元素的操作,都是通过集合对象名al调用方法来实现
//1)获取集合中的元素个数:size()
int size =al.size();
System.out.println("al集合中元素个数:"+size);
//2)获取集合中某个指定下标的元素:get(int index)
//获取集合中的第一个元素
Object obj1 =al.get(0);
//System.out.println(obj1);-------------->输出为地址值
NewsTitle nt = (NewsTitle)obj1;
System.out.println(nt);
//3)遍历集合中的元素
for(int i =0;i<al.size();i++){
Object object=al.get(i);
NewsTitle newsTitle = (NewsTitle)object;
System.out.println(newsTitle);
}
//4)判断集合中是否包含某一个元素:contains()
boolean result1 = al.contains(nt3);
System.out.println("集合中包含nt3这个元素:"+result1);
//5)删除集合中的元素:remove(元素名)/remove(元素下标)
boolean result2 =al.remove(nt3);
System.out.println("元素删除成功:"+result2);
3.4 list遍历的三种方法
//5)删除集合中的元素:remove(元素名)/remove(元素下标)boolean result2 =al.remove(nt3);System.out.println("元素删除成功:"+result2);System.out.println("****************************************");//删除后使用增强for循环遍历集合for(Object object:al){NewsTitle newsTitle = (NewsTitle)object;System.out.println(newsTitle);}System.out.println("****************************************");Object obj=al.remove(1);System.out.println(obj);System.out.println("****************************************");//删除元素后使用迭代器遍历集合:iterator()/** Iterator:迭代器,可以将它看成是集合容器* 将集合al中得元素转移到了Iterator中* 接下来使用hasNext()方法判断Iterator容器中是否有元素,如果有返回true,那么就调用next()方法取出集合中的元素* 如果hasNext()方法返回false,说明Iterator容器中没哟元素
Iterator it =al.iterator();
--------> //从it容器中取出元素
while(it.hasNext()){
Object object =it.next();
NewsTitle ntt = (NewsTitle)object;
System.out.println(ntt);
}
---------> //判断集合是否为空:isEmpty()
boolean result3 =al.isEmpty();
System.out.println("集合为空:"+result3);
System.out.println("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~");
--------------> //将集合中的元素转换为数组:toArray()
Object[] objs=al.toArray();
for (int i = 0; i < objs.length; i++) {
System.out.println(objs[i]);
}
----------->//清空集合:clear()
al.clear();
System.out.println(al.size());
System.out.println(al.isEmpty());
LinkedList集合类2-1
public static void main(String[] args) {
// 创建3个NewsTitle类对象
NewsTitle nt1 = new NewsTitle(1001, "以-违!乌国四州申请入俄后,古作",
"前沿时刻");
NewsTitle nt2 = new NewsTitle(1002, "中芯国际“赌赢”了!也没想到,“制裁”这么快就来了",
"表哥聊科技");
NewsTitle nt3 = new NewsTitle(1003, "再过4天,要放7天假", "北大青鸟合肥一元教育");// 数据准备好了,接下来要准备一个集合容器,使用LinkedList
List list = new LinkedList();
//将数据存储到集合中
list.add(nt1);
list.add(nt2);
list.add(nt3);
//将nt3这个元素存储到集合的第一个位置
//接口的引用无法调用实现类中特有的方法,需要进行向下转型
// list.addFirst(nt3);
LinkedList linkList = (LinkedList)list;
linkList.addFirst(nt3);
//遍历元素
for (int i = 0; i < linkList.size(); i++) {
Object obj1=linkList.get(i);
NewsTitle ntt = (NewsTitle)obj1;
System.out.println(ntt);
}
System.out.println("-------------------------");
//获取集合中的第一个元素
Object obj2=linkList.getFirst();
NewsTitle ntt2 = (NewsTitle)obj2;
System.out.println(ntt2);//获取集合中的最后一个元素
Object obj3=linkList.getLast();
NewsTitle ntt3 = (NewsTitle)obj3;
System.out.println(ntt3);
//删除集合中的第一个元素和最后一个元素
System.out.println("删除的第一个元素是:"+linkList.removeFirst());
System.out.println("删除的最后一个元素是:"+linkList.removeLast());
System.out.println("集合为空:"+linkList.isEmpty());
linkList.clear();
System.out.println("集合为空:"+linkList.isEmpty());
}}
Set接口存储一组唯一,无序的对象
HashSet是Set接口常用的实现类
Set中存放对象的引用
Set set=new HashSet();
String s1=new String("java");
String s2=s1;
String s3=new String("JAVA");
set.add(s1);
set.add(s2);
set.add(s3);
System.out.println(set.size())
6 接口 Map<K,V>
用法:
6.1 public interface Map<K,V>
将键映射到值的对象。一个映射不能包含重复的键;每个键最多只能映射到一个值。
6.2 代码展示方法的用法
Student类
package cn.bdqn.demo04;public class Student {private String name;private int age;public Student(String name, int age) {super();this.name = name;this.age = 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;}@Overridepublic String toString() {return "name=" + name + ", age=" + age;}}
6.2 Map方法
package cn.bdqn.demo04;import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Set;public class HashMapDemo02 {public static void main(String[] args) {
//创建3个Student类对象
Student stu1 = new Student("张三", 18);
Student stu2 = new Student("李四", 19);
Student stu3 = new Student("如花", 20);
//创建集合容器
Map map = new HashMap();
//将学生对象和其英文名称存储到集合中
map.put("JackMa", stu1);
map.put("TomLei", stu2);
map.put("MissDong", stu3);
7 遍历map集合 -----三种方式
//遍历map集合
//获取键的集合,然后通过键来找值
Set keys=map.keySet();
for(Object obj1:keys){
String key = (String)obj1;
Object obj2 =map.get(key);
Student student1 = (Student)obj2;
System.out.println(key+"对应的学生:"+student1);
}
iterator*****
Iterator it = keys.iterator();
while(it.hasNext()){
Object obj3=it.next();
String key2 = (String)obj3;
Object obj4 =map.get(key2);
Student student2 = (Student)obj4;
System.out.println(key2+"对应的学生:"+student2);
}
//map集合的第3种遍历方式
Set keyValues=map.entrySet();
for(Object obje:keyValues){
Map.Entry me =(Map.Entry)obje;
//获取键
Object ob1 = me.getKey();
String key = (String)ob1;
//获取值
Object ob2 =me.getValue();
Student student = (Student)ob2;
System.out.println(key+"对应的学生:"+student);
java进阶----集合相关推荐
- Java 进阶 -- 集合(一)
本节描述Java集合框架.在这里,您将了解什么是集合,以及它们如何使您的工作更轻松,程序更好.您将了解组成Java Collections Framework的核心元素--接口.实现.聚合操作和算法. ...
- 20、JAVA进阶——集合(1)
✅作者简介:热爱国学的Java后端开发者,修心和技术同步精进.
- JAVA进阶教学之(集合)
目录 1.集合概述 2.集合存储的数据类型 3.不同的集合,底层都会对应不同的数据结构 4.集合继承结构图(部分接口和类) 5.Collection接口中常用的方法 6.Collection 集合迭代 ...
- Java进阶,Set集合,Map集合
Java进阶,Set集合,Map集合 一.Set系列集合 1.Set系列集系概述 Set系列集合特点 无序:存取顺序不一致 不重复:可以去除重复 无索引:没有带索引的方法,所以不能使用普通for循环遍 ...
- Java进阶篇(六)——Swing程序设计(上),java面试题,java基础笔试题,BAT
写在最前面,我总结出了很多互联网公司的面试题及答案,并整理成了文档,以及各种学习的进阶学习资料,免费分享给大家.扫码加微信好友进[程序员面试学习交流群],免费领取.也欢迎各位一起在群里探讨技术. Sw ...
- 超仪电子 java面试_全靠这份阿里大佬的“Java进阶面试手册”助我收获蚂蚁金服offer!...
都2021年了,你的工资涨了吗? 对于即将到来的金三银四跳槽涨薪季,我想很多小伙伴都已经摩拳擦掌了吧!当然,我猜也有很多小伙伴是下图的状态吧!毕竟面试一年比一年难[落泪] 不得不说现在面试确实很难,现 ...
- Java进阶3. 内存回收机制
Java进阶3. 内存回收机制 20131029 前言: 学过C++的都知道,C++中内存需要程序员自己维护.说道这里,很多开发的同学就感觉很痛苦,当他转向Java的时候,就会说你看Java多好啊,程 ...
- Java进阶_3 注解、APT
Java进阶_3 注解.APT 一.注解的概念 注解(Annotation) 也叫元数据.一种代码级别的说明.它是JDK1.5及以后版本引入的一个特性,与类.接口.枚举是在同一个层次.它可以声明在 ...
- Java基础到Java进阶——Java小白的历练之路------从0到1,开卷!
Java小白的历练之路------从0到1 title: Java Essay date: 2022-09-07 08:58:32 tags: Java notes 写在前面: 免责声明:本笔记来源自 ...
最新文章
- 盘点近期重大技术成就及其将带给你的影响,与你我息息相关!
- FreeWheel基于Go的实践经验漫谈——GC是大坑(关键业务场景不用),web框架尚未统一,和c++性能相比难说...
- linux存储--mmap与sendfile(十七)
- 80%的Android手机用户面临浏览器安全风险
- 3_1 StrategyMode.cpp 策略模式
- 日志库 winston 的学习笔记 - logger.info 打印到控制台上的实现原理
- 2个字符串相等 swift_Swift快速入门(一)之 Swift基础语法
- 长沙计算机中级职称分数公布,大家所期待的2020年湖南省长沙中级职称评审公示...
- 54. 二叉搜索树的第k大节点
- hive与hbase的联系与区别
- abaqus土木结构视频教程
- setw()使用方法
- yolov5——断点训练/继续训练【解决方法、使用教程】
- springboot整合分布式任务调度 elastic-job
- WPTools改进了光标定位算法和RTF编写器
- 个人网站搭建及IIS部署(2019/3/11)个人心得分享
- gsoap 调用 java_Qt5 + gSOAP 调用 Webservice
- 渗透测试情报收集工具
- ssh连接linux_使用内网穿透访问内网ssh图文教程
- 12期 5月期刊自荐
热门文章
- 行业分析-全球与中国特里坦水瓶市场现状及未来发展趋势
- PHP 简单案例[3]
- 区块链100讲:如何使用开发环境命令行注册EOS靓号及变更EOS账号的active key和owner key?
- html5如何让多张图片重叠,HTML5图片层叠
- JVM 2eden survivor分配问题)
- html语言怎么让字横过来,css怎么让文字竖着排列?
- 2018年金融业ctf竞赛 backdoor 流量数据分析writeup
- 摘自网眼的腾讯QQ微博(http://t.qq.com/zhangking)
- 路径压缩优化并查集的时间复杂度
- A股暴跌三日市值蒸发4.2万亿 股民人均浮亏超2万