JAVA进阶教学之(集合)

本文详细介绍了Java集合框架中的ArrayList、LinkedList、Vector、HashSet、TreeSet以及HashMap等常见集合类的特性和使用。从集合概述到具体数据结构,再到集合的遍历、操作和排序,深入剖析了各种集合类的底层实现,帮助开发者更好地理解和应用Java集合框架。
摘要由CSDN通过智能技术生成

目录

1、集合概述

2、集合存储的数据类型

3、不同的集合,底层都会对应不同的数据结构

4、集合继承结构图(部分接口和类)

5、Collection接口中常用的方法

6、Collection 集合迭代(遍历)

7、Collection的contains( )方法理解

8、集合中元素的删除

9、List接口特有的方法

10、ArrayList集合初始化容量及扩容

11、LinkedList双向列表源码分析

12、Vector安全数组

13、HashSet集合特点

14、TreeSet集合特点

15、Map接口常用方法

16、HashMap集合

17、HashMap和HashTable的区别

18、属性类Properties

19、TreeSet可排序集合


 

1、集合概述

什么是集合,有什么用?

数组其实就是一个集合,集合实际上就是一个容器,集合可以容纳引用类型的数据

 

为什么集合在开发中使用较多?

集合是一个容器,一次可以容纳多个对象(集合的大小和机器的性能有关,理论无限大)

在实际开发中,假设网页内容连接的是数据库,数据库中有10条记录

假设需要把这10条记录查询出来,在java程序中会将这10条数据封装

成10个java对象,然后将10个java对象放到一个集合中,将集合传递

给前端,然后遍历集合,将一个数据一个数据展现出来

 

 

2、集合存储的数据类型

集合中存储的都是java对象的内存地址,或者说集合中存储的是引用,不能直接存储java对象

 

疑问?为什么list.add(100); 这个集合里面的100是什么数据类型

答案:100,是自动装箱的100,将int型自动装箱成为Integer型的包装型

底层原理:Integer x = new Integer(100);  然后 list.add(x);  x 表示的是内存地址

 

集合之间通过内存地址的存储可以嵌套

 

 

3、不同的集合,底层都会对应不同的数据结构

什么是数据结构:

数据结构就是数据进行存储时,存储的方式,例如:数组、二叉树、链表、哈希表

使用不同的集合等同于使用了不同的数据结构

java已经将数据结构实现了,已经写好了这些常用的集合类,只需要掌握怎么使用集合,什么情况用哪种类型的集合

new ArrayList(); 创建一个集合,底层是数组

new LinkedList(); 创建一个集合,底层是链表

new TreeSet();创建一个集合对象,底层是二叉树

 

集合在哪个包下:

java.util.*

 

 

4、集合继承结构图(部分接口和类)

在java中集合分成两大类

第一种类型:单个方式存储元素(超级父接口:java.util.Collection)

 

 

集合的接口之间的继承结构图:

Collection接口调用父类接口Iterable的iterator()方法,拿到集合依赖的迭代器对象

Itertor itertor = "Collection 对象".iterator();       itertor 是迭代器对象

 

 

总结:

  • ArrayList:底层是数组
  • LinkedList:底层是双向链表
  • Vector:底层是线程安全的数组,效率低
  • HashSet:底层是HashMap,放到HashSet集合中的元素等同于放到HashMap集合中的key部分
  • TreeSet:底层是TreeMap,放到TreeSet集合中的元素等同于放到TreeMap集合中的Key部分

可以多次看加强记忆

 

 

补充:

 

 

 

 

 

第二种类型:键值对方式存储元素(超级父接口:java.util.Map)

 

总结:

  • HashMap:底层是哈希表
  • Hashtable:底层是线程安全的哈希表,效率低
  • Properties:线程安全的属性类,并且key和value只能存储字符串String
  • TreeMap:底层是二叉树,TreeMap 集合的Key 可以按照大小顺序排序

 

 

总结:

  • List集合存储元素的特点:

元素有序可重复:存进去和取出来的顺序相同,元素有下标,存进去1,还可以存1

  • Set(对应的是Map)集合存储元素的特点:

元素无序不可重复:存进去和取出来的顺序不一定相同,元素无下标,存进去1,不可继续存1

  • SortSet(对应的是SortedMap)集合存储元素的特点:

元素无序不可重复可排序:01同上,可排序是指可以按照大小进行排序

 

 

关键点:

Map集合的key,就是一个Set集合

往Set集合中放数据,实际上放到了Map集合的Key部分

 

理解点:

怎么往集合这个容器里面放东西,怎么取出来的这个过程需要理解

 

 

 

5、Collection接口中常用的方法

 

提问:Collection中能存放什么元素

  • 在没有使用“泛型”之前,Collection中可以存储Object的所有子类型
  • 使用了“泛型”之后,Collection中只能存储某个具体的类型
  • 集合后期我们会学习“泛型”,目前先不用管,我们只需要知道Collection中什么都能存,只要是Object的子类型就行

 

注意:集合中不能直接存储基本数据类型,也不能存储java对象,只能存储java对象的内存地址

 

Collection中常用的方法

    1、boolean add(Object e) 向集合尾部中添加元素,把元素的内存地址添加进集合

代码演示:
 

package com.lbj.javase.collection;

import java.util.ArrayList;
import java.util.Collection;

public class CollectionTest01 {
    public static void main(String[] args) {
        //创建一个集合对象,由于接口是抽象的,无法实例化
        //多态 父类对象的引用指向子类对象
        Collection collection=new ArrayList();

        //测试集合中可以放置的是不是内存地址
        //自动装箱,Integer x = new Integer(100); collection.add(x),x是内存地址
        collection.add(100);
        collection.add(3.14);
        collection.add(new Object());
        collection.add(new Student());
    }
}
class Student{

}

 

 

  2、int size( )   获取集合中元素的个数,!注意,并不是获取集合中的容量

代码演示:

 

 

 

   3、void  clear( ) 清空集合中的元素

代码演示:

 

 

 

   4、boolean remove(Object o) 删除集合中指定元素

代码演示:

package com.lbj.javase.collection;

import java.util.ArrayList;
import java.util.Collection;

public class CollectionTest01 {
    public static void main(String[] args) {
        //创建一个集合对象,由于接口是抽象的,无法实例化
        //多态 父类对象的引用指向子类对象
        Collection collection=new ArrayList();

        //测试集合中可以放置的是不是内存地址
        //自动装箱,Integer x = new Integer(100); collection.add(x),x是内存地址
        collection.add(100);
        collection.add(3.14);
        collection.add(new Object());
        collection.add(new Student());

        collection.remove(100);
        System.out.println(collection.size());//3
    }
}
class Student{

}

 

   5、boolean contains(Object o)  判断集合中是否包含元素o

代码演示:

 

 

 

   6、boolean isEmpty( ) 判断该集合中元素个数是否为0

代码演示:

 

 

   7、Object[ ] toArray( )   调用这个方法可以把集合转换成数组

 代码演示:

package com.lbj.javase.collection;

import java.util.ArrayList;
import java.util.Collection;

public class CollectionTest01 {
    public static void main(String[] args) {
        //创建一个集合对象,由于接口是抽象的,无法实例化
        //多态 父类对象的引用指向子类对象
        Collection collection=new ArrayList();

        //测试集合中可以放置的是不是内存地址
        //自动装箱,Integer x = new Integer(100); collection.add(x),x是内存地址
        collection.add(100);
        collection.add(3.14);
        collection.add(new Object());
        collection.add(new Student());


        Object[] objects=collection.toArray();
        //遍历数组
        for (int i = 0; i <objects.length; i++) {
            System.out.println(objects[i]);
        }
//结果:
//100
//3.14
//java.lang.Object@1540e19d
//com.lbj.javase.collection.Student@677327b6
    }
}
class Student{

}

 

 

6、Collection 集合迭代(遍历)

迭代:就是遍历,不要将迭代两个字想的太难,因为集合不是数组,没有固定长度,无法通过For循环遍历集合

底层:需要用到Collection继承父类Iterable接口的 iterator( ) 方法,然后再在Collection中调用 iterator( ) 方法返回一个Iterator迭代器对象。

此迭代器对象可以使用其中的两个方法

一个方法是boolean hasNext() ,表示如果下一个元素存在,则返回true,有点类似指针;

一方法是Object next( ) 返回迭代的下一个元素,且取出来的元素类型都是Object类。 

代码演示:

package com.lbj.javase.collection;

import java.util.ArrayList;
import java.util.Collection;
import java.util.HashSet;
import java.util.Iterator;

/**
 * @author LBJ
 * @version V1.0
 * @Package com.lbj.javase.collection
 * @date 2021/3/28 18:40
 * @Copyright 公司
 */
public class CollectionTest02 {
    public static void main(String[] args) {
        //创建集合对象
        Collection collection=new ArrayList();
        //添加集合元素
        collection.add("abc");
        collection.add(100);
        collection.add(new Object());
        //集合遍历
        //第一步:获取集合对象的迭代器对象
        Iterator iterator=collection.iterator();

        //第二步:开始遍历
        while(iterator.hasNext()){
                //不管存进去的是什么,拿出来的时候一律都是Object类
                Object o=iterator.next();
                System.out.println(o);
            }
        }

    }

//结果:
//abc
//100
//java.lang.Object@1540e19d

图示:

图示2:

注意:以上的遍历方式,是所有Collection通用的一种方式(除了Map集合不可以用!!!

 

 

代码演示2:

ArrayList集合,有序可重复

HashSet集合,无序不可重复

package com.lbj.javase.collection;

import java.util.ArrayList;
import java.util.Collection;
import java.util.HashSet;
import java.util.Iterator;

/**
 * @author LBJ
 * @ver
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值