Java集合入门总结

1.集合容器的概述
2.Collection接口
3.List接口
4.Set接口
5.Map接口

1.集合容器的概述

1.1.什么是集合

集合框架:用于存储数据的容器。
集合框架是为表示和操作集合而规定的一种统一的标准的体系结构。
任何集合框架都包含三大块内容: 对外的接口、接口的实现和对集合运算的算法

集合框架通过提供有用的数据结构和算法使你能集中注意力于你的程序的重要部分上,而不是为了让程序能正常运转而将注意力于低层设计上。
通过这些在无关API之间的简易的互用性,使你免除了为改编对象或转换代码以便联合这些API而去写大量的代码。 它提高了程序速度和质量。

1.2.集合的特点:

1.对象封装数据,对象多了也需要存储。集合用于存储对象。
2.对象的个数确定可以使用数组,对象的个数不确定的可以用集合。因为 集合是可变长度的

1.3.使用集合框架的好处

1.容量自增长;
2.提供了高性能的数据结构和算法,使编码更轻松,提高了程序速度和质量;
3.允许不同 API 之间的互操作,API之间可以来回传递集合;
4.可以方便地扩展或改写集合,提高代码复用性和可操作性。
5.通过使用JDK自带的集合类,可以降低代码维护和学习新API成本。

1.4.常用常用的集合类

Map接口和Collection接口是所有集合框架的父接口

  • 1.Collection接口的子接口包括:Set接口和List接口
  • 2.Map接口的实现类主要有:HashMap、TreeMap、Hashtable、ConcurrentHashMap以及Properties等
  • 3.Set接口的实现类主要有:HashSet、TreeSet、LinkedHashSet等
  • 4.List接口的实现类主要有:ArrayList、LinkedList、Stack以及Vector等
参考下面者个图(博主只画出了相对重要的):

在这里插入图片描述

1.5.集合框架底层数据结构
集合底层原理
ArraylistObject数组
VectorObject数组
LinkedList双向循环链表
HashSet(无序,唯一)基于 HashMap 实现的,底层采用 HashMap 来保存元素
LinkedHashSetLinkedHashSet 继承与 HashSet,并且其内部是通过 LinkedHashMap 来实现的。有点类似于我们之前说的LinkedHashMap 其内部是基于 Hashmap 实现一样,不过还是有一点点区别的。
TreeSet(有序,唯一)红黑树(自平衡的排序二叉树。)
HashMapDK1.8之前HashMap由数组+链表组成的,数组是HashMap的主体,链表则是主要为了解决哈希冲突而存在的(“拉链法”解决冲突).JDK1.8以后在解决哈希冲突时有了较大的变化,当链表长度大于阈值(默认为8)时,将链表转化为红黑树,以减少搜索时间
LinkedHashMapLinkedHashMap 继承自 HashMap,所以它的底层仍然是基于拉链式散列结构即由数组和链表或红黑树组成。另外,LinkedHashMap 在上面结构的基础上,增加了一条双向链表,使得上面的结构可以保持键值对的插入顺序。同时通过对链表进行相应的操作,实现了访问顺序相关逻辑。
HashTable数组+链表组成的,数组是 HashMap 的主体,链表则是主要为了解决哈希冲突而存在的
TreeMap红黑树(自平衡的排序二叉树)
1.8.集合和数组的区别在这里插入图片描述

3.List接口

3.1特点

java.util.List接口继承自Collection接口,在List集合元素可重复、元素有序。所有的元素是以一种线性方式进行存储的,在程序中可以通过索引来访问集合中的指定元素,而且元素的存入顺序和取出顺序一致。

3.2List里边常用的方法:

在这里插入图片描述

3.3List的子类

1.ArrayList集合
(1)特点:

java.util.ArrayList集合数据存储的结构是数组结构元素增删慢,查找快,由于日常开发中使用最多的功能为查询数据、遍历数据,所以ArrayList是最常用的集合。

(2)优缺点:

ArrayList的优点如下:

ArrayList 底层以数组实现,是一种随机访问模式。ArrayList 实现了 RandomAccess 接口,因此查找的时候非常快。
ArrayList 在顺序添加一个元素的时候非常方便。

ArrayList 的缺点如下:

删除元素的时候,需要做一次元素复制操作。如果要复制的元素很多,那么就会比较耗费性能。
插入元素的时候,也需要做一次元素复制操作,缺点同上。
ArrayList 比较适合顺序添加、随机访问的场景。

深入了解看:ArrayList集合源码详解
2.LinkedList集合
(1)特点:

java.util.LinkedList集合数据存储的结构是链表结构元素增删快,查找慢的集合

在这里插入图片描述
详细看:LinkedList集合详解
3.ArrayList和LinkedList对比:
在这里插入图片描述
4.List三种遍历方式


(1)第一种for循环

基于计数器。在集合外部维护一个计数器,然后依次读取每一个位置的元素,当读取到最后一个元素后停止

package untl;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
public class MyObject {
    public static void main(String[] args) {
        List<String> list=new ArrayList();
        Collections.addAll(list,"aaa","bbb","ccc","ddd");
        for (int i = 0; i <list.size() ; i++) {
            System.out.println(list.get(i));
        }

    }
}
运行结果:
aaa
bbb
ccc
ddd

(2).第二种foreach循环

foreach 内部也是采用了 Iterator 的方式实现,使用时不需要显式声明 Iterator 或计数器。优点是代码简洁,不易出错;缺点是只能做简单的遍历,不能在遍历过程中操作数据集合,例如删除、替换。

package untl;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
public class MyObject {
    public static void main(String[] args) {
        List<String> list=new ArrayList();
        Collections.addAll(list,"aaa","bbb","ccc","ddd");
        for (String str:list) {
            System.out.println(str);
        }

    }
}
aaa
bbb
ccc
ddd

(3).第三种迭代器Iterator

Iterator 是面向对象的一个设计模式,目的是屏蔽不同数据集合的特点,统一遍历集合的接口。Java 在 Collections 中支持了 Iterator 模式。

package untl;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Iterator;
import java.util.List;
public class MyObject {
    public static void main(String[] args) {
        List<String> list=new ArrayList();
        Collections.addAll(list,"aaa","bbb","ccc","ddd");
        for (Iterator<String>  iterator=list.iterator();iterator.hasNext();)
        {
            String str=iterator.next();
            System.out.println(str);
        }
    }
}
运行结果:
aaa
bbb
ccc
ddd

5.List子类与数组之间相互转换

数组转 List:使用 Arrays. asList(array) 进行转换。
List 转数组:使用 List 自带的 toArray() 方法。

例子:

package untl;
import java.util.*;
public class MyObject {
    public static void main(String[] args) {
        List<String> list1=new ArrayList<String>();
        Collections.addAll(list1,"aaa","bbb","ccc","ddd");
        Object arr[] = list1.toArray();//这里返回Object类型数组
        for (Object str:arr)
        {
            System.out.println(str);
        }
        System.out.println("---------------------------------------------");
        List list2= Arrays.asList(arr);
        for (Iterator<String> iterator=list2.iterator();iterator.hasNext();)
        {
            String str=iterator.next();
            System.out.println(str);
        }

    }
}
运行结果:
aaa
bbb
ccc
ddd
---------------------------------------------
aaa
bbb
ccc
ddd

4.Set接口

4.1set接口特点

java.util.Set接口和java.util.List接口一样,同样继承自Collection接口,它与Collection接口中的方法基本一致,并没有对Collection接口进行功能上的扩充,只是比Collection接口更加严格了。与List接口不同的是,Set接口中元素无序且不重复,刚好全与list相反,set会以某种规则保证存入的元素不出现重复。

4.2set接口常用方法

在这里插入图片描述

4.3Set接口的子类

1.HashSet

java.util.HashSet是Set接口的一个实现类,它所存储的元素是不可重复、无序(即存取顺序不一致)。java.util.HashSet底层的实现其实是一个java.util.HashMap支持。

详细看:HashSet详解

5.Map接口

5.1Map接口的特点:

Map 是一种把键对象和值对象映射的集合,它的每一个元素都包含一对键对象和值对象。 Map没有继承于Collection接口,从Map集合中检索元素时,只要给出键对象,就会返回对应的值对象。

5.2Map接口的常用方法:

在这里插入图片描述

5.3Map接口的子类:

1.HashMap
详细看:HashMap详解

2.LinkedHashMap
详细看:LinkedHashMap详解

3.TreeMap
详细看:TreeMap详解

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值