Java 集合专题

【韩顺平讲Java】Java集合专题 -ArrayList HashMap HashSet List Map TreeMap

01----集合的理解和好处

  1. 可以动态保存任意多个对象,比较方便。
  2. 提供了一系列操作对象的方法:add(), remove(), set(), get()

02----集合的框架体系

  • 单列集合
  • 双列集合

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-cotMTIEA-1640566300154)(E:[HanShunping] Java Collection\笔记\01.png)]

03----集合的常用方法

import java.util.ArrayList;
import java.util.List;

public class CollectionMethod {
   

    public static void main(String[] args) {
   
        List list = new ArrayList();
        //add 添加元素
        list.add("jack");
        list.add(10);
        list.add(true);
        //remove 删除元素
        list.remove(0); //删除第一个元素
        list.remove(true);
        System.out.println(list);
        //contains 查找元素是否存在
        System.out.println(list.contains("jack"));
        //size 获取元素个数
        System.out.println(list.size());
        //isEmpty 判断是否为空
        System.out.println(list.isEmpty());
        //clear 清空
        list.clear();
        //addAll 添加多个元素
        List list2 = new ArrayList();
        list2.add("wang");
        list2.add(100);
        list.addAll(list2);
        //cintainsAll 查找多个元素是否都存在
        list.containsAll(list2);
        //removeAll 删除多个元素
        list.removeAll(list2);

    }
}

04----迭代器遍历

iterator.hasNext():判断是否有下一个元素。

import java.util.ArrayList;
import java.util.Iterator;

public class CollectionIterator {
   

    public static void main(String[] args) {
   

        ArrayList arrayList = new ArrayList();
        arrayList.add("Wang");
        arrayList.add("Zhao");
        arrayList.add("Qian");
        //生成迭代器
        Iterator iterator = arrayList.iterator();
		
        while (iterator.hasNext()){
   
            System.out.println(iterator.next());
        }
    }
}

05----增强 for 循环

增强 for 底层仍然是迭代器。

for(Object obj : arrayList){
   
		System.out.println(obj);
}

07----List 接口方法

  1. 有序可重复(添加,取出顺序一致)
  2. 支持索引
  3. 可根据序号存取容器中的元素
  4. ArrayList 线程不安全,效率高
  5. Vector线程安全
  6. LinkedList线程不安全

add(int index, Object ele):在 index 位置插入 ele 元素

addAll(int index, Collection eles):从 index 位置开始将 eles 中所有元素添加进去

get(int index):获取指定位置的元素

indexOf(Object obj):返回 obj 首次出现的位置

lastIndexOf()

remove(int index):删除指定位置的元素,并返回此元素

set(int index, Object ele):设置指定位置的元素为 ele

subList(int fromIndex, int toIndex):返回从 fromIndex 到 toIndex 位置的子集合

12----ArrayList 底层结构和源码分析

  1. ArrayList中维护了一个Object类型的数组elementData, transient Object[] elementData
  2. 当创建ArrayList对象时,如果使用的是无参构造器,则初始elementData容量为0,第一次添加数据时扩容elementData为10,如需要再次扩容,则按照 1.5倍 增加。
  3. 当使用指定大小的构造器时,则初始elementData容量为指定大小,如需要扩容,则按照 1.5倍 增加。

16----Vector 底层结构和源码分析

  1. Vector中维护了一个Object类型的数组elementData, transient Object[] elementData
  2. 当创建Vector对象时,如果使用的是无参构造器,则默认elementData容量为10,如需要扩容,则按照 2倍 增加。
  3. 当使用指定大小的构造器时,则初始elementData容量为指定大小,如需要扩容,则按照 2倍 增加。

17----LinkedList 底层结构和源码分析

- LinkedList的底层操作机制
  1. LinkedList底层维护了一个双向链表
  2. 维护了两个属性firstlast分别指向首节点和尾节点
  3. 每个节点Node对象里面又维护了prev,next,item三个属性,其中通过prev指向前一个,next指向后一个节点,最终实现双向链表
  4. 所以LinkedList的元素的添加和删除不是通过数组完成的,相对说效率较高

20----Set接口和常用方法

  1. 无序不可重复
  2. 没有索引

21----HashSet

  1. HashSet实现了Set接口
  2. HashSet实际上是HashMap
  3. 可以存放null值,但只能有一个
  4. HashSet不保证元素是有序的,取决于hash后,再确定索引结果
  5. 元素,对象不可重复
经典Java面试题:
Set set = new HashSet();

set.add(new Dog("tom"));	//Ok
set.add(new Dog("tom"));	//Ok

set.add(new String("hsp"));	//Ok
set.add(new String("hsp"));	//false

22----数组链表模拟

Node[] table = new Node[16];

Node john = new Node("john", null);
table[2] = john;
Node jack = new Node("jack", null);
john.next = jack;	//jack挂载到john后

class Node{
   
    Object item;
    Node next;	//单向链表
    public Node(Object item, Node next){
   
        this.item = item;
        this.next = next
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值