JAVA容器详解

JAVA容器详解系列文章目录提示 这里可以添加系列文章的所有文章的目录 目录需要自己手动添加例如 Java 基础之异常提示 写完文章后 目录可以自动生成 如何生成可参考右边的帮助文档文章目录系列文章目录前言一 为什么引入 Java 容器 二 Java 容器分类 1 Collection 1 List 2 Set 3 Queue2 Map 补漏查缺小知识参考前言这篇文章主要是介绍 java 容器的分类和一些用法 提示 以下是本篇文章正文内容 下面案例可供参考一 为什么引入 Java 容器 为什么要引入 Java 容器

系列文章目录



前言

这篇文章主要是介绍java容器的分类和一些用法。


一、为什么引入Java容器?

二、Java容器分类

在这里插入图片描述
Java的容器主要分为2个大类,即Collection和Map。Collection代表着集合,类似数组,只保存一个数字。而Map则是映射,保留键值对两个值。
根据图,首先提一下List Queue Set Map 这四个的区别。




  • List(对付顺序的好帮手): 存储的元素是有序的、可重复的。
  • Set (注重独一无二的性质):存储的元素是无序的、不可重复的。
  • Queue (实现排队功能的叫号机):按特定的排队规则来确定先后顺序,存储的元素是有序的、可重复的。
  • Map (用 key 来搜索的专家) :使用键值对(key-value)存储,类似于数学上的函数 y=f(x),“x” 代表 key,“y” 代表 value,key 是无序的、不可重复的,value 是无序的、可重复的,每个键最多映射到一个值。

接下来我们就来深入探究一下吧。

1.Collection

(1).List

名称 底层 线程安全性 优点 扩容机制
ArrayList 数组 线程不安全 查找快,增删慢 首次创建长度为10,扩为1.5倍
Vector 数组 线程同步线程安全 查找快,增删慢 首次创建长度为10,*2
LinkedList 双向链表(JDK1.6 之前为循环链表,JDK1.7 取消了循环) 线程不安全 增删快,查找慢 不主动扩容

(2).Set

名称 底层 线程安全性 备注
HashSet HashMap(数组+链表) 线程不安全 注意hashcode和equals()
LinkedHashSet 链表和哈希表 线程不安全 HashSet的子类,元素的插入和取出顺序满足 FIFO
TreeSet 红黑树 线程不安全 支持对元素自定义排序规则

实现类

package TreeSet; //1.自然排序 public class Person implements Comparable{ 
       private int age; private String name; private int score; public Person(int age,String name,int score){ 
       this.age=age; this.name=name; this.score=score; } @Override public int compareTo(Object o) { 
       //强制转换对象 //按年龄和分数排序 都是从大到小 if(o instanceof Person){ 
       Person O=(Person) o;//强转类型 if(this.age!=O.age) return this.age-O.age;//this是当前的主体,此时返回的应该是升序 else return O.score-this.score; }else throw new RuntimeException("不属于此类型"); } @Override public String toString() { 
       return "Person{" + "age=" + age + ", name='" + name + '\'' + ", score=" + score + '}'; } } 

测试类

package TreeSet; import java.util.Arrays; public class Test { 
       public static void main(String[] args) { 
       Person[] person=new Person[3]; person[0]=new Person(5,"guolu",99); person[1]=new Person(3,"cherry",98); person[2]=new Person(5,"cherry",98); Arrays.sort(person);//别忘了这句话; for(int i=0;i<3;i++){ 
       System.out.println(person[i].toString()); } } } 

(2)定制排序:向其中传入已经重写Comparator中方法的对象。

public class Test { 
       public static void main(String[] args) { 
       Person[] person=new Person[3]; person[0]=new Person(5,"guolu",99); person[1]=new Person(3,"cherry",98); person[2]=new Person(2,"cherry",98); Comparator com=new Comparator() { 
       @Override public int compare(Object o1, Object o2) { 
       Person p1=(Person)o1; Person p2=(Person)o2; return p1.getAge()-p2.getAge();//得确保有get和set接口,这边好像不太好用compareTo,暂时不知道为啥 } }; Arrays.sort(person,com); for(int i=0;i<3;i++){ 
       System.out.println(person[i].toString()); } } } 

(3).Queue

2.Map

名称 底层 线程安全性 备注 扩容机制
HashMap 数组+链表(jdk7) 数组+链表+红黑树 (jdk8) 线程不安全 能存储null的key和value 首次创建长度16,扩容2倍,jdk8中当数组的某一个索引位置上的元素以链表形式存在的数据个数>8且当前的数组长度>64时,此索引位置上的所有数据改为使用红黑树存储
LinkedHashMap 同hashmap 线程不安全 比hashmap多了指向前驱和后继的两个指针
ConcurrentHashMap 同hashmap 线程安全 使用16个锁来控制segments,分段锁
HashTable 数组+链表 线程安全,全表锁 不能存储null的key和value 首次创建时长度为11,后来变为2n+1
TreeMap 红黑树 线程不安全 定制排序

补漏查缺小知识

1.集合转换为数组

Collection coll=new ArrayList(); Object arr[]=coll.toArray(); for(int i=0;i<arr.length;i++){ 
        System.out.println(arr[i]); } 
List<String> list=Arrays.asList(new String[]{ 
       "AA","BB","CC"}); System.out.println(list); 

参考

javaguide、尚硅谷

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/206024.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月19日 下午4:39
下一篇 2026年3月19日 下午4:39


相关推荐

  • PyCharm 快速批量注释及取消注释

    PyCharm 快速批量注释及取消注释选中需要注释的代码块 gt 同时按住 ctrl 键 gt 批量注释 gt 再同时按住 ctrl 键 gt 批量取消注释

    2026年3月27日
    2
  • 计算机编程入门教程

    计算机编程入门教程用什么语言可以写木马程序啊!!!首先确定你需要什么功能,如果是控制Http服务器的话,就是ASP木马,用脚本语言(VBS、JS)来写,Window自带的记事本就可以胜任如果是控制Windows的话,就属于一般的Win32木马,几乎什么程序都可以写,不管是MASM32、VC++、VB、Delphi、BCB都可以,个人推荐MASM32,毕竟汇编的东西短小精悍,而且设计直观方便,其他的语

    2022年6月16日
    39
  • css两端对齐

    css两端对齐两端对齐在导航 Nav 的制作中非常常用 例子例如下面这个例子 在导航栏中 我们希望左边的 nav 文字左端对齐 右边的 button 有段对齐 并且导航栏部分居中 和上边 banner 中的文字 以及下边的内容居中对齐 概念 flex 弹性盒模型 flex 作为强大的弹性布局方式 可以 hold 住大部分的布局效果 当然也包括两端对齐 可以使用主轴对齐 justify content 的两端对齐属性 space between display flex 应用 flex 布局 justify content space be

    2026年3月20日
    2
  • 《三体》中的经典名句是_三体2黑暗森林中的好词好句

    《三体》中的经典名句是_三体2黑暗森林中的好词好句0.死亡是唯一一座永远亮着的灯塔,不管你向哪里航行,最终都得转向它指引的方向。一切都会逝去,只有死神永。1.弱小和无知不是生存的障碍,傲慢才是!2.有一个故事,说一波外星人来到了地球。他们发现这个

    2022年8月5日
    14
  • 冒泡排序详解_超详细电音

    冒泡排序详解_超详细电音1、什么是冒泡排序?冒泡排序的英文BubbleSort,是一种最基础的交换排序。之所以叫做冒泡排序,因为每一个元素都可以像小气泡一样,根据自身大小一点一点向数组的一侧移动。冒泡排序的原理:每一趟只能确定将一个数归位。即第一趟只能确定将末位上的数归位,第二趟只能将倒数第2位上的数归位,依次类推下去。如果有n个数进行排序,只需将n-1个数归位,也就是要进行n-1趟操作。而“每一趟”都需要从第一位开始进行相邻的两个数的比较,将较大的数放后面,比较完毕之后向后挪一位继续比较下面

    2022年10月19日
    3
  • 俄罗斯方块c语言源代码_俄罗斯方块C语言

    俄罗斯方块c语言源代码_俄罗斯方块C语言Windows系统下C语言控制台小游戏—俄罗斯方块

    2025年6月28日
    8

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号