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.pri

ntln("元素删除成功:"+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进阶----集合相关推荐

  1. Java 进阶 -- 集合(一)

    本节描述Java集合框架.在这里,您将了解什么是集合,以及它们如何使您的工作更轻松,程序更好.您将了解组成Java Collections Framework的核心元素--接口.实现.聚合操作和算法. ...

  2. 20、JAVA进阶——集合(1)

    ✅作者简介:热爱国学的Java后端开发者,修心和技术同步精进.

  3. JAVA进阶教学之(集合)

    目录 1.集合概述 2.集合存储的数据类型 3.不同的集合,底层都会对应不同的数据结构 4.集合继承结构图(部分接口和类) 5.Collection接口中常用的方法 6.Collection 集合迭代 ...

  4. Java进阶,Set集合,Map集合

    Java进阶,Set集合,Map集合 一.Set系列集合 1.Set系列集系概述 Set系列集合特点 无序:存取顺序不一致 不重复:可以去除重复 无索引:没有带索引的方法,所以不能使用普通for循环遍 ...

  5. Java进阶篇(六)——Swing程序设计(上),java面试题,java基础笔试题,BAT

    写在最前面,我总结出了很多互联网公司的面试题及答案,并整理成了文档,以及各种学习的进阶学习资料,免费分享给大家.扫码加微信好友进[程序员面试学习交流群],免费领取.也欢迎各位一起在群里探讨技术. Sw ...

  6. 超仪电子 java面试_全靠这份阿里大佬的“Java进阶面试手册”助我收获蚂蚁金服offer!...

    都2021年了,你的工资涨了吗? 对于即将到来的金三银四跳槽涨薪季,我想很多小伙伴都已经摩拳擦掌了吧!当然,我猜也有很多小伙伴是下图的状态吧!毕竟面试一年比一年难[落泪] 不得不说现在面试确实很难,现 ...

  7. Java进阶3. 内存回收机制

    Java进阶3. 内存回收机制 20131029 前言: 学过C++的都知道,C++中内存需要程序员自己维护.说道这里,很多开发的同学就感觉很痛苦,当他转向Java的时候,就会说你看Java多好啊,程 ...

  8. Java进阶_3 注解、APT

    Java进阶_3 注解.APT 一.注解的概念 注解(Annotation) ​ 也叫元数据.一种代码级别的说明.它是JDK1.5及以后版本引入的一个特性,与类.接口.枚举是在同一个层次.它可以声明在 ...

  9. Java基础到Java进阶——Java小白的历练之路------从0到1,开卷!

    Java小白的历练之路------从0到1 title: Java Essay date: 2022-09-07 08:58:32 tags: Java notes 写在前面: 免责声明:本笔记来源自 ...

最新文章

  1. 盘点近期重大技术成就及其将带给你的影响,与你我息息相关!
  2. FreeWheel基于Go的实践经验漫谈——GC是大坑(关键业务场景不用),web框架尚未统一,和c++性能相比难说...
  3. linux存储--mmap与sendfile(十七)
  4. 80%的Android手机用户面临浏览器安全风险
  5. 3_1 StrategyMode.cpp 策略模式
  6. 日志库 winston 的学习笔记 - logger.info 打印到控制台上的实现原理
  7. 2个字符串相等 swift_Swift快速入门(一)之 Swift基础语法
  8. 长沙计算机中级职称分数公布,大家所期待的2020年湖南省长沙中级职称评审公示...
  9. 54. 二叉搜索树的第k大节点
  10. hive与hbase的联系与区别
  11. abaqus土木结构视频教程
  12. setw()使用方法
  13. yolov5——断点训练/继续训练【解决方法、使用教程】
  14. springboot整合分布式任务调度 elastic-job
  15. WPTools改进了光标定位算法和RTF编写器
  16. 个人网站搭建及IIS部署(2019/3/11)个人心得分享
  17. gsoap 调用 java_Qt5 + gSOAP 调用 Webservice
  18. 渗透测试情报收集工具
  19. ssh连接linux_使用内网穿透访问内网ssh图文教程
  20. 12期 5月期刊自荐

热门文章

  1. 行业分析-全球与中国特里坦水瓶市场现状及未来发展趋势
  2. PHP 简单案例[3]
  3. 区块链100讲:如何使用开发环境命令行注册EOS靓号及变更EOS账号的active key和owner key?
  4. html5如何让多张图片重叠,HTML5图片层叠
  5. JVM 2eden survivor分配问题)
  6. html语言怎么让字横过来,css怎么让文字竖着排列?
  7. 2018年金融业ctf竞赛 backdoor 流量数据分析writeup
  8. 摘自网眼的腾讯QQ微博(http://t.qq.com/zhangking)
  9. 路径压缩优化并查集的时间复杂度
  10. A股暴跌三日市值蒸发4.2万亿 股民人均浮亏超2万