栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

JAVA集合

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

JAVA集合

JAVA集合
  • 集合的框架体系
  • 单列集合
    • Collection常用方法
      • Iterator 迭代器
        • 迭代器的使用
        • 增强for循环遍历
    • List接口方法
      • List的三种遍历方式{ArrayList,linkedList,Vector}
      • 集合结合冒泡排序,根据价格从小到大排序
      • ArraryList的注意事项
        • ArrayList底层结构和源码分析
      • Vector的注意事项
      • Vector底层结构和ArrayList的比较
      • linkedList的底层结构
        • linkedList的全面说明
        • linkedList的底层操作机制
          • 代码模拟双向链表
        • linkedList的增删改查案例
      • ArrayList和linkedList的比较
    • Set接口方法
      • Set接口的基本介绍
      • Set接口的常用方法
  • 双列集合
    • Map接口和常用方法
      • Map接口的特点
      • Map六大遍历方式

集合的框架体系
  1. 集合主要是两组(1.单列集合:存放的是单列对象,2.双列集合:存放的是键值对形式)


ArrayList 单列集合,HashMap 双列集合
3. Collection 接口有两个重要的子接口 List,Set,他们的实现子类都是单列集合
4. Map接口的实现子类 是双列集合,存放的K-V

单列集合 Collection常用方法


Iterator 迭代器

迭代器的使用

增强for循环遍历
  1. 使用增强for,在Collection集合
  2. 增强for,底层仍然是迭代器
  3. 增强for可以理解成就是简化版本的迭代器遍历
  4. 快捷方式 大写i I
List接口方法

Collection有List和Set两个子接口,List接口是Collection的子接口。

List的三种遍历方式{ArrayList,linkedList,Vector}

ArrayList,linkedList,Vector都是List接口的实现子类所以以下三种遍历方式通用

集合结合冒泡排序,根据价格从小到大排序


ArraryList的注意事项
  1. ArrayList可以放入空元素
  2. ArrayList底层是由数组来实现数据存储的
  3. Arraylist基本等同于Vector,除了ArrayList是线程不安全的但是执行效率高,多线程情况下不建议用ArrayList考虑用Vector
    为什么说ArrayList是线程不安全的?
    咱们可以看他的源码 没有synchronized线程安全控制关键字
	//ArrayList是线程不安全的,可以看源码 没有 synchronized
    public boolean add(E e) {
        ensureCapacityInternal(size + 1);  // Increments modCount!!
        elementData[size++] = e;
        return true;
    }
ArrayList底层结构和源码分析


1.分析使用无参构造器,创建和使用ArrayLIst的源码
创建一个ArrayList对象

创建了一格空的elementData数组={}

执行list.add

Vector的注意事项

Vector底层结构和ArrayList的比较


ArrayList是线程不同步的所以线程不安全,效率高,Vector做了线程同步所以是线程安全的,但是效率就低了

无参构造器

linkedList的底层结构 linkedList的全面说明
  1. linkedList底层实现了双向链表和双端队列特点
  2. 可以添加任意元素(元素可以重复),包括null
  3. 线程不安全,没有实现同步
linkedList的底层操作机制


linkedList添加、删除,不是通过数组来完成,不涉及到数组的扩容所以说效率较高
比如删除:比如删除A对象,让A的下一个对象prev(指向前一个节点)属性指向A对象的前一个对象,A前一个对象的next(指向后一个节点)属性指向A后一个对象,完成连接就执行完删除A对象的操作。

代码模拟双向链表

public class linkedList_ {
    public static void main(String[] args) {
        //模拟一个简单的双向链表
        Node jack = new Node("jack");
        Node jack1 = new Node("jack1");
        Node jack2 = new Node("jack2");

        //连接三个节点,形成双向链表
        //jack -> jack1 -> jack2
        jack.next = jack1;
        jack1.next = jack2;
        //jack2 -> jack1 -> jack
        jack2.pre = jack1;
        jack1.pre = jack;

        Node first = jack;//让first引用指向jack,jack就是双向链表的尾节点
        Node last = jack2;//让last引用指向jack2,jack2就是双向链表的尾节点


        //演示,从头到尾进行遍历
        System.out.println("从头到尾:从jack到jack2遍历");
        while (true) {
            if (first == null) {
                break;
            } else {
                //输出first信息
                System.out.println(first);
                first = first.next;
            }
        }
        //演示,从尾到头进行遍历
        System.out.println("从尾到头:从jack到jack2遍历");
        while (true) {
            if (last == null) {
                break;
            } else {
                //输出last信息
                System.out.println(last);
                last = last.pre;
            }
        }

        //演示链表的添加对象/数据,是多么方便迅速
        //要求:是在jack1------jack2之间插入一个jack3
        //1.县创建一个Node(节点),name就是jack3
        Node jack3 = new Node("jack3");
        //关联他们的关系,下面这样就把jack3加入到双向链表了
        jack3.next = jack2;
        jack3.pre = jack1;
        jack1.next = jack3;
        jack2.pre = jack3;
        first = jack;
        while (true) {
            if (first == null) {
                break;
            } else {
                System.out.println(first);
                first = first.next;
            }
        }
    }
}

class Node {
    public Object item;
    public Node next;
    public Node pre;

    public Node(Object item) {
        this.item = item;
    }

    public String toString() {
        return "Node name=" + item;
    }
}

linkedList的增删改查案例

ArrayList和linkedList的比较


ArrayList:底层结构是数组,增删因为有扩容涉及到数据的拷贝所以效率较低,改查因为根据索引定位所以效率较快。
linkedList:底层结构是双向链表,增删根据链表追加,查找时会根据链表的头一个一个找所以效率较低

Set接口方法 Set接口的基本介绍

Set接口的常用方法

双列集合 Map接口和常用方法

Map和Collection并列存在,用于保存具有映射关系的数据:Key-Value(双列元素)

Map接口的特点


存进去是no1,no2,取出为什么是no2,no1呢?
取出无序是因为底层是hash,是单链表
在已有no1的情况下再存入
map.put(“no1”,“张三”) 张三会覆盖韩顺平

Map六大遍历方式

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/444883.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号